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