Couchdb

Couchdb 如何計算文件修訂號?

  • October 5, 2021

計算 CouchDB 修訂號的確切算法是什麼。CouchDB 使用確定性算法來計算文件修訂號。這是我發現的一個相關文件: https ://stackoverflow.com/questions/5954864/how-does-couchdb-calculate-the-revision-number

但這一切都在 elrang 中,我正在嘗試在 dart 中實現它。我使用範例文件:{"_id":"123-this-is-an-id","hello":"world","testing":123}進行測試。

當我對其進行 MD5 雜湊時,它給了我:f0853833850bce08dce0896e010a375e,其中 couchdb 修訂號是:

"_rev": "1-43dce8fe7e9a26b49390e3727a015cc0"

我到處搜尋它,但如果我能在 text 的某個地方找到算法,UI 可以將其轉換為 dart。

該算法是 Erlang 特定的,因為它涉及 Erlang外部術語格式。(CouchDB 是用 Erlang 編寫的。)很難用不同的語言重新實現。

它確實是文件及其屬性的二進制術語表示的 MD5 散列。

我不確定是否可以複製程式碼,因此您可以在couchdb 儲存庫中找到它。請注意,對於主分支,該new_revid函式已移至Fabric DB implementation

PouchDB 有一個完全不同的散列算法——它的 rev 是文件的 JSON 表示的 MD5 散列,沒有它的修訂欄位。

如您所見,完美重現算法並不重要——您只會在同時創建文件的不同平台上同步兩個數據庫時遇到衝突。即便如此,衝突解決算法也應該處理好它。

所以過了一段時間,我知道 couchdb 計算修訂號是這樣的:

seq_num-md5HashOfDocJsonContentWithoutRevField

引用自:https://dba.stackexchange.com/questions/251991