我目前正在使用couchDB,并且有以下情况: 我正在实施问题跟踪器。要求是每个问题文档都有(除了它的文档_id)一个唯一的数字序号,以便以更合适的方式引用它。
我的第一种方法是拥有一个视图,它只返回当前存储的唯一问题文档的数量。将客户端的值增加1,将其分配给我的新问题并插入。 当使用ajax调用插入多个问题或让多个客户端同时添加问题时,结果是一个坏主意。在后一种情况下,如果没有客户之间的沟通,就不可能实现。
理想情况下,我希望在沙发上生成序列号,由于分布式系统中的状态存在冲突,因此无法实现。
是否有任何好的模式可以使用(可能在客户端)来解决这个问题?我觉得这是一种标准的用例(考虑发票号码等)。
提前致谢!
答案 0 :(得分:1)
您可以使用一个空的单独文档,但它只包含id
和rev
。 rev
前缀始终是整数,因此您可以将其用作自动递增数字。
只需对您的文档进行POST,这将增加rev
并将其返回。然后,您可以将此生成的值用于您的目的。
替代方式:
创建一个单独的文档,其中包含value
和lock
。然后执行如下操作:" IF lock == true然后返回ELSE set lock = true并将值增加1",然后执行GET以检索新value
并最终设置{{1} }。
答案 1 :(得分:0)
我同意你的看法,使用一个给你一个文件计数的视图并不是一个好主意。而这正是couchdb使用uuid的原因。
我不知道couchdb中的顺序ID功能,但认为它很容易编写。我考虑过: