2010-12-07 2 views
3

URL 단축기를 독립 실행 형 CouchApp로 쓰고 싶지만 가능한 경우 궁금합니다. 분명히 URL 단축키의 핵심 요구 사항은 짧고 고유 한 키를 갖는 것입니다.CouchDB의 짧고 고유 한 키

내가 원했던 것은 긴 URL을 CouchDB에 POST하고 단축 URL을 얻는 것이다. 업데이트 처리기를 사용하는 방법에 대해 생각했지만 키가 고유한지 확인하기 위해 DB를 쿼리해야했습니다.

CouchDB에서 짧고 고유 한 키를 생성하는 방법이 있습니까? 아니면 CouchDB 주위에 얇은 래퍼가 필요합니까?

답변

2
나는 다음과 같은 구조의 문서를 기반으로, 얇은 래퍼 갈 것

:

새로운 긴 URL의 삽입은 단일 단계에서 수행 할 수
{ _id : short_url , url : long_url } 

: 래퍼가 새로운 _id을 생성 한 시도 PUT을 입력하고 성공할 때까지 새로운 _id으로 다시 시도하십시오. 그러면 모든 짧은 URL이 한 번만 사용됩니다.

"생성, 시도, 다시 시도"접근 방식이 유일성을 보장하는 유일한 전략이며, 래퍼 없이는 사용할 수 없습니다.

동일한 긴 URL을 다시 사용하려는 경우 echo(doc.url,null)보기를 추가하고 존재하는 경우 _id을 가져올 수 있습니다. 즉, 여러 클라이언트가 정확히 동일한 긴 URL을 추가하려고 시도하지 않으면 해당 긴 URL에 대해 하나의 짧은 URL 만 사용됩니다.

+0

"생성, 시도, 다시 시도"전략을 구현하는 것이 외부 프로세스에서 가능하지만 꽤 좋지 않다는 것을 알았습니다. http://wiki.apache.org/couchdb/ExternalProcesses –

+0

안전하게 안전하게 복제 할 수 있도록 문서 _ids가 노드 전체에서 고유해야합니다! 한 가지 방법은 각 노드에 고유 한 접두사를 추가하는 것입니다. n * 64 노드 만 가질 수 있으므로 무한 확장이 가능하지만 각 노드 접두어에 허용되는 문자 수는 n입니다 (64는 _ids에서 사용할 수있는 URL 안전 문자 수입니다). 또한 몇 백만 개의 URL이있는 경우 고유 한 짧은 ID를 얻기 전에 여러 번 PUT을 다시 시도해야 할 수도 있습니다 ... – ActionOwl