修改CouchDB的UUID算法



这个问题引用的是couchdb版本1.5.0

对于我的环境,我希望能够根据某种时间索引对数据库中的文档进行有效排序,以便以后检索。我在网上看到,在couchdb中有四种创建流体的算法。

显示可用于uuid生成的算法的文档列在这里:http://couchdb.readthedocs.org/en/latest/config/misc.html#uuids-configuration

我怀疑默认的uuid算法设置是"顺序的",当发出http://couchdb:5984/_uuids?count=50时,我看到它们中的一大块(如果不是全部)前26位数字是相同的,最后6位是唯一的。

我尝试将算法更改为utc选项之一("utc_random"或"utc_id"将工作),其中前16位是十六进制中Unix epoch的微秒时间。

我用来改变UUID算法的方法是进入local.ini文件并附加以下节(它以前不在那里):

[uuids] algorithm = utc_random

然后重新启动couchdb服务

service couchdb restart

当我再次查询一批uuid时,我仍然得到一个结果,表明正在生成的uuid仍然在顺序算法中。(当我在此之后第二次查询50个uid时,会注意到"顺序"算法行为)

我做错了什么吗?任何可以提供的帮助都将非常感激!

在尝试了Akshat Jiwan Sharma建议的curl命令后,我回到配置文件中,找到了一个default.ini文件。在这个文件中似乎设置了uids参数,我将'sequential'替换为'utc_random',重新启动couchdb服务,一切正常工作。为了找到couchdb的配置文件,我使用了一个简单的命令行couchdb -c再次感谢你的帮助,你们真是太棒了!

您可以检查几件事情。

  1. 是否添加了其他配置文件?您可以在couchdb中链接配置文件,如果您这样做,则只会使用链中最后一个文件的更改。

  2. 调用http://localhost:5984/_config/uuids获取couchdb使用的uuid算法信息。你应该得到像

  3. 这样的结果

{"algorithm":"utc_random","max_count":"1000"}

,您可以验证couchdb是否拾取了您的配置。

也可以通过rest api修改配置文件。这将有助于调试,因为您不需要再次重新启动couchdb。这种方法的好处是只会更改相关的配置文件。

你可以这样做

curl -X PUT http://localhost:5984/_config/uuids/algorithm -d '"utc_random"'

请注意,如果你想更改的参数中有错别字,例如ramdom而不是random(我实际上是输入的!)couch db将抛出运行时异常,你必须求助于手动更改配置文件。

作为一种稍微不同的方法来解决您的问题,您可以在编写每个文档之前设置自己的_id。我建议使用这种方法,而不是信任CouchDB自动生成算法来获得正确的排序。

例如,您可以在客户端系统中使用UUID生成器,并将索引附加到生成的UUID。在python中,我将使用UUID库。我认为,您应该能够为几乎所有语言找到UUID生成器。

_id看起来像 _

只要它是一个新的文档,你可以选择任何你想要的_id值。

对于可能相关的文档,我经常使用确定性文档ID。想象一下,我可能有一个包含一些客户信息的"Customer"文档,我还存储了一个包含该客户事务历史记录的"Customer History"文档。我可能会给客户文档一个表单

Customer_14567ad352f-351979ffe12,然后创建他的历史文档

Customer_14567ad352f-351979ffe12_History

另一种方法,因为您说"我希望能够有效地对数据库中的文档进行排序,以便以后基于某种时间索引进行检索"

这就是视图的作用。所以你可以写一个视图来按照你想要的时间索引来组织文档。最简单的视图是:

function(doc)
{
    emit( doc.TimeIndex, null );
}

最新更新