我对couchdb很新,我想知道如何创建看起来像的ID.
Employee:DBX-**0001**-SP
数字部分0001必须是唯一的和顺序的.我怎样才能在couchdb中实现这样的功能?我搜遍了所有,我找不到任何简单的解决方案.
如果我可以在couchdb中而不是在客户端生成顺序部分以避免复制期间的冲突,那将是最好的.
我当前的解决方案是我获取一个我存储的文件,看起来像这个{"_ id":"EmployeeAutoIncrement",值:1}在检索时我增加值并将其发送回服务器,如果那些成功的话我返回新的递增值,并将其用作我的自动增量值,成为ID员工的一部分:DBX- AUTO_INCREMENT_VALUE_HERE -SP
这个问题是,如果两个人同时向EmployeeAutoIncrement发出请求并且他们都更新它会不会引起冲突?此外,如果一个人发出请求并且他们离线然后他们又回到网上那么那也不会发生冲突吗?
它可以(某种程度上)完成,尽管我建议您考虑您的设计选择以及为什么您希望在分布式数据库上完成此操作 - 它可能更好地在客户端上完成,您可以在客户端上控制序列生成器的序列化。
如果您想至少部分在服务器上执行此操作,则需要实现所谓的 CRDT 计数器,如下文所述:
http://hal.upmc.fr/docs/00/55/55/88/PDF/techreport.pdf
您可以在这里找到其中一些想法的 Ruby 实现:
https://github.com/aphyr/meangirls
以及一个简单的 Couch 特定实现的计数器(您需要的)和一组:
https://github.com/drsm79/couch-crdt
后者虽然是用 Python 编写的,但如果您遵循以下示例所示的模式,则几乎可以完全满足您的要求:
https://github.com/drsm79/couch-crdt/blob/master/examples/counter.py
这将为您提供单调序列。从那里创建您的文档_id。
翻译成 JavaScript 和 PouchDB 作为读者的练习。