2011-05-10 11 views
7

? Estoy tratando de comprender cómo CouchDB calcula la id de revisión para un documento. Me he dado cuenta de la fuente que se calcula según la siguiente trozo de código aquí:¿Cómo calcula CouchDB el número de revisión

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

Y sé que si puedo crear un nuevo documento vacío sin los accesorios, CouchDB siempre le da una revisión de 1-967a00dff5e02add41819138abb3284d que, a su el decimal es < < 150,122,0,223,245,224,42,221,65,129,145,56,171,179,40,77 >>.

Sin embargo, si escribo lo siguiente en el símbolo del Erlang (falso para eliminar, 0 para OldStart, 0 para OLDREV, un cuerpo vacío y sin archivos adjuntos):

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

Siempre me

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

atrás.

Entonces, ¿qué estoy haciendo mal aquí? ¿Cómo puedo calcular la revisión real que genera el sofá?

+1

¿Por qué es necesario determinar de manera preventiva el número _rev? Obtiene el número generado en la respuesta del servidor después de escribir. –

+3

Es porque estoy interesado en realizar una sincronización de almacén de datos diferente con couchdb, y para una sincronización adecuada, ambas partes deben calcular la id de revisión de la misma manera. – kybernetikos

Respuesta

6

Después de leer la respuesta a Emit Tuples From Erlang Views In CouchDB me di cuenta de que lo que estaba haciendo mal no era envolver el proplist vacío para el cuerpo en una tupla. No estoy seguro de por qué el sofá hace eso, pero ese era el problema.

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

da la respuesta correcta

< < 150,122,0,223,245,224,42,221,65,129,145,56,171,179,40,77 >>

+1

Una 1-tupla que contiene una lista casi siempre indica una estructura de datos de tipo JSON (clave/valor), ya sea que esté fuera o que vaya a ingresar al serializador JSON. '{[{<<"like">>, <<"this">>}, {<<"cool">>, true}]}' sería '{" como ":" this "," cool ": true}'. Sin la 1-tupla, se vería como cualquier otra lista de Erlang (o cadena). – JasonSmith

Cuestiones relacionadas