Edm*_*mhs 6 couchdb mapreduce nosql couchbase
我当前的id键包含3或4个段:
namespace::my_key::id
namespace::my_key::my_second_key::id
Run Code Online (Sandbox Code Playgroud)
解决方案1.使用复杂的id并通过在id中搜索密钥来创建视图
function (doc, meta) {
if(meta.id.indexOf("::my_key::") !== -1){
emit([doc.source_id], [doc.name,doc.title,doc.ui]);
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案2.对于每个文档,添加"type","namespace"等字段并使用它们创建视图
function (doc, meta) {
if(doc.type=='my_key'){
emit([doc.source_id], [doc.name,doc.title,doc.ui]);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我选择解决方案2,我必须在我的应用程序上维护id,并且我可能会像在解决方案1中那样做.
有没有人有过命名id和从中创建视图的经验?你对这些解决方案有什么问题.或者也许不建议使用indexOf()函数?
Couchbase 在后台构建视图索引,因此如果您不使用stale=false
参数,则在这两种解决方案中从视图获取文档时将获得相同的性能。
在第一个解决方案中,您可能可以获得比第二个解决方案更长的密钥,因为在第二个解决方案中,您可以在文档中存储类型,而不是元。Couchbase 将所有元数据保存在内存中,因此您拥有的密钥越长,就需要更多的内存。也indexOf
比==
或慢===
,因此构建索引可能需要更多时间。
所以对我来说,第二种解决方案更好。
此外,您还可以通过仅发出并在客户端库中emit(doc.source_id, null)
使用来提高视图的磁盘使用率。IncludeDocs
它将减小它们的大小并且几乎不会影响性能。
这里还有一个“最佳实践”的链接。也许它也会有帮助。
归档时间: |
|
查看次数: |
1011 次 |
最近记录: |