我有一个数据库结构,如下所示:
{_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'}
我有一个映射函数,每个文档发出多个键,即对于"record/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 或 PouchDB 中遇到任何限制或性能问题吗?
不,这看起来可能是在 PouchDB 中使用 map/reduce 索引的最有效方法。 :)将所有内容放入一个大索引中肯定会在视图构建期间获得最佳性能。