2011-05-10 5 views
7

CouchDB가 문서의 개정 ID를 계산하는 방법을 이해하려고합니다. 나는 여기에 코드의이 비트에 의해 계산 있다는 소스에서주의 사항 :CouchDB가 개정 번호를 계산하는 방법

couch_util:md5(term_to_binary([Deleted, OldStart, OldRev, Body, Atts2])) 

그리고 나는 아무 첨부 파일이 비어있는 새 문서를 만들 경우, CouchDB를 항상 그것을 1-967a00dff5e02add41819138abb3284d의 개정을주는 것을 알고있는에 십진수는 < < 150122022324522442221651291455617117940,77 >>입니다. 내가 입력하면

그러나, 얼랭 프롬프트에 다음 (삭제에 대해 false, 0 OldStart, OldRev 0, 빈 몸없이 첨부) :

erlang:md5(term_to_binary([false, 0, 0, [], []])).     

난 항상 얻을

<<26,196,244,40,211,149,193,185,214,6,230,61,54,138,62,132>> 

등.

내가 여기서 잘못하고있는 것은 무엇입니까? 소파에서 생성되는 실제 개정판을 어떻게 처리 할 수 ​​있습니까?

+1

왜 선제 _rev 번호를 확인해야합니까? 쓰기 후에 서버에서 응답으로 생성 된 번호를 가져옵니다. –

+3

다른 데이터 저장소를 couchdb와 동기화하는 데 관심이 있고 올바른 동기화를 위해 양쪽에서 같은 방식으로 개정 ID를 계산해야하기 때문입니다. – kybernetikos

답변

6

Emit Tuples From Erlang Views In CouchDB에 대한 대답을 읽은 후 나는 틀린 일을하는 것은 튜플에있는 빈 프로스트리스트를 포장하는 것이 아니라는 것을 깨달았습니다. 왜 소파가 그렇게하는지 모르겠지만 그게 문제입니다.

erlang:md5(term_to_binary([false, 0, 0, {[]}, []])). 

정답

< < 150122022324522442221651291455617117940,77를 >> 제공합니다

+1

리스트를 포함하는 1- 튜플은 거의 항상 JSON 시리얼 라이저의 JSON 유형 (키/값) 데이터 구조를 나타냅니다. {{{<<"like">>, <<"this">}, {<<"cool">>, true}]}'는'{ "like": "this", "cool": true}'가됩니다. 1-tuple이 없으면 다른 Erlang 목록 (또는 문자열)처럼 보일 것입니다. – JasonSmith

관련 문제