【问题标题】:How does CouchDB calculate the Sequence Id (seq)CouchDB如何计算Sequence Id (seq)
【发布时间】:2019-01-02 16:09:54
【问题描述】:

我正在寻找源存储库 (https://github.com/apache/couchdb) 中定义 CouchDB 如何计算 seq 值的伪代码或实际代码。

查看文档中的技术概述:http://docs.couchdb.org/en/2.2.0/intro/overview.html 它说:

对数据库实例的每次更新都会生成一个新的序号。

但它没有说明如何。我认为它可能取决于实现,查看它声明的复制协议文档:

序列 ID: 更改源提供的 ID。它必须是增量的,但不能总是整数。

 1-g1AAAAIreJyVkEsKwjAURZ-toI5cgq5A0sQ0OrI70XyppcaRY92J7kR3ojupaSPUUgotgRd4yTlwbw4A0zRUMLdnpaMkwmyF3Ily9xBwEIuiKLI05KOTW0wkV4rruP29UyGWbordzwKVxWBNOGMKZhertDlarbr5pOT3DV4gudUC9-MPJX9tpEAYx4TQASns2E24ucuJ7rXJSL1BbEgf3vTwpmedCZkYa7Pulck7Xt7x_usFU2aIHOD4eEfVTVA5KMGUkqhNZV-8_o5i

这个问题有点相关,因为它询问它如何计算文档的另一个组件,即 rev:

How does CouchDB calculate the Revision number

【问题讨论】:

  • 序列号没有任何内在含义,只是它总是递增。实际上,这意味着唯一可预测的部分是第一个“-”字符之前的整数。其余的实际上是特定于实现的,并且实际上是随机的。如果您可以描述您正在尝试解决的问题,也许可以提供更有用的答案。
  • 哦,我明白有内在的含义。我真的很好奇用于生成该值(不是前导整数)的实现。我没有尝试用它解决的实际问题,也没有 CouchDB 用于它,实际上只是好奇。我没有很好地阅读 Erlang,所以浏览源代码的速度很慢。我敢肯定,在 1.x 格式不同的情况下,仅在 2.x 中使用这种格式并不是随机决定的。我只是想知道人们是如何做出选择的,看看香肠是如何制作的。
  • 很公平。我不知道答案。看起来它至少(部分)是 base64 编码的——可能包括时间戳。

标签: couchdb


【解决方案1】:

你可以找到here一些关于变更序列内部的信息

序列号反映了文档更新序列的集群状态,该信息被编码到序列号中。

序列号的数字部分是文档在每个集群节点中的更新序列的总和。

序列号的第二部分是一个base64编码的字符串,其中包含每个集群节点中的更新序列信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2015-01-03
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多