生成按字典顺序排列的唯一ID

时间:2012-04-02 19:25:26

标签: node.js couchdb uuid

我想生成用于CouchDB的ID。我希望ID按时间点按字母顺序递增,以便我可以在不保持单独的时间戳字段的情况下对id进行排序。我知道CouchDB将使用此属性生成id,但我不希望查询数据库的性能受到影响,我宁愿在我的服务器上运行算法。我将使用rfc 4112的实现,除了结果不是以词汇方式提升。我不应该这样做有什么好的理由:

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

(我正在使用nodejs)。是否有使用非标准uuid或依赖javascript内置随机函数的成本?

2 个答案:

答案 0 :(得分:2)

对于uuids,你有一些选择。

第一个选择是你想要_id生成的客户端(节点,浏览器等),还是沙发。听起来你想在客户端生成自己的uuid。那样就好。只需将函数的结果粘贴到保存到couchdb的doc的_id字段中即可。 Couch会使用它。

你可以让沙发创建id。如果您不为自己选择一个,则Couchdb仅生成_id。 Couchdb默认使用'顺序'uuid生成算法。您可以通过蒲团和配置将算法更改为其他人。有一个名为'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:

  

当您的文档ID出现时,CouchDB将具有最佳插入时间   不断增加,因为这最大限度地减少了对b~树的重写。这个   也会有所帮助   您的视图构建时间也是出于同样的原因,并且最大限度地减少了浪费的文档空间,   虽然在压实过程中也可以恢复。

所以你的算法和utc_random都应该没问题,因为他们的文档不断增加对看似有用的一个时间方向。

答案 1 :(得分:0)

我建议坚持使用CouchDB为您生成的UUID,但是您可以将服务器配置为使用utc_random,它将为您的记录排序时间戳前缀。

http://wiki.apache.org/couchdb/HttpGetUuids