2011-05-10 46 views
7

nasıl hesaplanır CouchDB'nin belge için revizyon kimliğini nasıl hesapladığını anlamaya çalışıyorum. Buranın bu kod bit yoluyla hesaplanır o kaynaktan dikkat edin:CouchDB, Revizyon numarası

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

Ve ben hiçbir ekleri ile yeni bir boş belge oluşturursanız, CouchDB hep o 1-967a00dff5e02add41819138abb3284d gözden geçirilmesini sağladığını biliyor ki, içinde ondalık, < < 150,122,0,223,245,224,42,221,65,129,145,56,171,179,40,77 >>. Ben yazarsanız

Ancak erlang istemine aşağıdaki (silindi için sahte, 0 OldStart, OldRev için 0, boş bir gövde ve hiçbir ekleri):

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

Hep almak

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

geri.

Peki burada yanlış yapıyorum - nasıl kanepe üreten gerçek revizyon egzersiz yapabilirler?

+1

Neden önleme amaçlı olarak _rev sayısını belirlemek gerekiyor? Herhangi bir yazma işleminden sonra oluşturulan sayıyı sunucudan yanıt olarak alırsınız. –

+3

Bunun nedeni, couchdb ile farklı bir veri deposu senkronizasyonu yapmakla ilgiliyim, ve her iki tarafın düzgün bir şekilde senkronize edilmesi için revizyon kimliğini aynı şekilde hesaplamalıdır. – kybernetikos

cevap

6

Emit Tuples From Erlang Views In CouchDB cevabını okuduktan sonra ben ne yanlış yaptığını bir demet içinde vücut için boş proplist sarma olmadığını fark etti. Neden kanepenin bunu yaptığından emin değilim, ama sorun buydu.

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

doğru cevabı

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

+1

Bir listeyi içeren 1-tuple hemen hemen her zaman JSON serileştiricisine in-out veya çıkmak üzere olan JSON tipi (anahtar/değer) veri yapısını gösterir. '{[{<<"like">>, <<"this">>}, {<<"cool">> doğru}]} 'olacaktır' { "gibi", "Bu", "soğuk": gerçek} '. 1-tuple olmadan, sadece herhangi bir Erlang listesi (veya dizesi) gibi görünecekti. – JasonSmith