这听起来像是一个显而易见的问题,但我是 CouchDB 的新手,所以我认为值得一问,以防 CouchDB 的结构有什么改变了我不知道的情况。由于我无法控制的原因,我必须在 CouchDB 之外构建一个类似队列的结构。为简单起见,假设我正在为稍后执行的作业排队 ID。请注意,不会有重复项。
我试图弄清楚构建它的最佳方法是什么。正如我目前所看到的,我有几个选择:
- 将队列项目作为条目存储
queue
在 ID 为 的数据库中_id
,并将出队的项目存储在 ID 为 的类似dequeued
数据库中_id
。每个数据库中的每条记录除了(强制性)_id
和_rev
. - 有一个排队数据库,该数据库将包含一条记录
_id = 'queue'
和一条记录_id = 'dequeued'
。在这两条记录中的每一条中,都会有任意数量的键,每个键都是要执行的(或已经执行的)作业的 ID。数据库中与键关联的值将是无关紧要的,可能只是一个布尔值。 - 有一个排队数据库,并且在该数据库中,有一个名为
queue
. 在该记录中,有两个键:queue
和dequeued
。这些键中的每一个都将具有一个任意长度的作业执行 ID 列表作为其关联值。
1稍微不太理想,因为它需要两个数据库,而2让我觉得这是一个糟糕的选择,因为它需要加载排队或出队项目的整个列表才能读取列表项或进行任何更改。但是,3很好,因为它允许整个 ID 列表是一个有序列表而不是键/值对,这使得从列表中选择一个随机项目作为下一个要执行的作业变得更容易,因为我实际上不需要知道任何键名(因为没有)。
我正在寻找提供最佳性能的那个。对此有什么想法吗?
更新
对于将来阅读这个问题的人,我已经构建了我的 CouchDB 队列模块CouchQueue
,一个正在进行中的工作。
你可以得到它npm install couchqueue
。
在Github 上查看(并请评论、请求请求等) 。