CouchDB/DB视图中每个文档的密钥释放限制

CouchDB/DB视图中每个文档的密钥释放限制,couchdb,pouchdb,Couchdb,Pouchdb,我的数据库结构如下: {_id: 'record/1', name: 'Record 1', labels: ['label/1', 'label/2', 'label/3'], created: '2015-03-01T00:00:00.000Z'}, {_id: 'record/2', name: 'Record 2', labels: ['label/1', 'label/5', 'label/7', 'label/3'], created: '2015-03-06T00:00:00.00

我的数据库结构如下:

{_id: 'record/1', name: 'Record 1', labels: ['label/1', 'label/2', 'label/3'], created: '2015-03-01T00:00:00.000Z'},
{_id: 'record/2', name: 'Record 2', labels: ['label/1', 'label/5', 'label/7', 'label/3'], created: '2015-03-06T00:00:00.000Z'},
{_id: 'record/3', name: 'Record 3', labels: ['label/2', 'label/3', 'label/4', 'label/5'], created: '2015-03-10T00:00:00.000Z'}
我有一个映射函数,它可以为每个文档发出多个键,即对于“记录/1”,将发出以下键:

[2015,3,1] for record/1
["label/1"] for record/1
["label/1",[2015,3,1]] for record/1
["label/1","label/3"] for record/1
["label/1","label/3",[2015,3,1]] for record/1
["label/1","label/2"] for record/1
["label/1","label/2",[2015,3,1]] for record/1
["label/1","label/2","label/3"] for record/1
["label/1","label/2","label/3",[2015,3,1]] for record/1
["label/2"] for record/1
["label/2",[2015,3,1]] for record/1
["label/2","label/3"] for record/1
["label/2","label/3",[2015,3,1]] for record/1
["label/3"] for record/1
["label/3",[2015,3,1]] for record/1
看起来每个文档要发出很多复杂的键,但它支持我的查询要求:

  • 查找在开始日期和结束日期之间创建的记录
    • {startkey:[2015,3,1],endkey:[2015,3,9]}
  • 查找应用了多个标签的记录,即“标签/1”和“标签/3”
    • {key:['label/1','label/3']}
  • 查找在开始日期和结束日期之间创建并应用多个标签的记录
    • {startkey:['label/1','label/3',[2015,3,1]],endkey:['label/1','label/3',[2015,3,9]}

  • 问题:使用这种方法,我会在CouchDB或PockDB中遇到任何限制或性能问题吗?

    不,这可能是在PockDB中使用map/reduce索引最有效的方法。:)将所有内容放在一个大索引中肯定会使您在视图构建过程中获得最佳性能。

    谢谢,伙计,您知道是否有任何文档支持这一点吗?我编写了PockDB的大部分map/reduce代码。:)所以我是根据我的心理模型告诉你它是如何工作的。你的“一个大索引”可能不是最有效的唯一情况是,如果你有,比如说,一个你现在需要的小索引,以及一个你以后才需要的更大索引。如果您创建两个单独的视图/DDOC,则PockDB可以并行化,较小的视图可以更快完成。(与CouchDB不同,它并行化所有视图,甚至是同一ddoc中的视图。)我明白了。听起来不错。