node.js - 生成按字典顺序升序的唯一 ID

标签 node.js couchdb uuid

我想生成用于 CouchDB 的 ID。我希望 ID 按时间顺序升序,以便我可以对 id 进行排序,而无需维护单独的时间戳字段。我知道 CouchDB 将生成具有此属性的 ids,但我不希望查询数据库的性能受到影响,我宁愿只在我的服务器上运行算法。我会采用 rfc 4112 的实现,除非结果不是按字典顺序升序。我有什么充分的理由不应该这样做:

(Date.now()) + 'x' + Math.round(Math.random() *1E18)

(我使用的是nodejs)。使用非标准 uuid 或依赖 javascript 内置随机函数是否会产生任何成本?

最佳答案

对于 uuid,您有一些选择。

第一个选择是如果您想要客户端( Node 、浏览器等)或沙发生成 _id。听起来您想在客户端生成自己的 uuid。没事儿。只需将函数的结果粘贴到保存到 couchdb 的文档的 _id 字段中即可。沙发只会用它。

您可以让 couch 创建 ID。如果您没有为自己选择一个 _id,Couchdb 只会生成一个 _id 。 Couchdb 默认使用“顺序”uuid 生成算法。您可以通过 futon 和 config 将算法更改为其他算法。有一个名为“uuids”的部分,其键为“algorithm”。您可以在此处查看这些算法的来源:

https://github.com/apache/couchdb/blob/master/src/couchdb/couch_uuids.erl

这里有关于它们的描述:

http://wiki.apache.org/couchdb/HttpGetUuids?highlight=%28utc%5C_random%29

如您所见,utc_random 函数与您的建议非常相似。但如果您想要自己的算法,如果您愿意,您可以在服务器端添加算法并重新编译沙发。

您问题的第二部分是关于选择不同算法的性能。我将引用 Dave Cottlehuber 在用户列表帖子中的一段话:

CouchDB will have best insert time when your doc ids are continually increasing, as this minimises rewrites to the b~tree. This will also help your view build time for the same reason, and also minimises wasted doc space, although that would also be recovered during compaction.

因此,您的算法和 utc_random 都应该没问题,因为它们的文档 ID 不断增加,以实现看似有用的时间方向。

关于node.js - 生成按字典顺序升序的唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982538/

相关文章:

python - 将 UUID 添加到 pandas DF

ios - App更新时iPhone UUID会改变吗?

javascript - 如何使用 Protractor 从表格中获取特定单元格值

node.js - heroku scale web=1 失败,出现 "record not found"- procfile 问题?

javascript - 使用 Multer 时出现意外的表单错误结束

javascript - CouchDB 更新相关文档的最佳实践

cross-domain - 来自 XMLHttpRequest 的 CouchDB 跨域访问?

node.js - 如何使用使用角度2发布的nodejs保存包含图像的表单数据

java - 使用 #elemMatch 选择器进行嵌套数组字段的 Cloudant 客户端查询

laravel - laravel uuid 作为主键