什么更好/更快的复杂couchbase ID或内联文档类型="my_document_type"

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()函数?

m03*_*eek 4

Couchbase 在后台构建视图索引,因此如果您不使用stale=false参数,则在这两种解决方案中从视图获取文档时将获得相同的性能。

在第一个解决方案中,您可能可以获得比第二个解决方案更长的密钥,因为在第二个解决方案中,您可以在文档中存储类型,而不是元。Couchbase 将所有元数据保存在内存中,因此您拥有的密钥越长,就需要更多的内存。也indexOf==或慢===,因此构建索引可能需要更多时间。

所以对我来说,第二种解决方案更好。

此外,您还可以通过仅发出并在客户端库中emit(doc.source_id, null)使用来提高视图的磁盘使用率。IncludeDocs它将减小它们的大小并且几乎不会影响性能。

这里还有一个“最佳实践”的链接。也许它也会有帮助。