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



我的当前id键包含3或4段:

namespace::my_key::id
namespace::my_key::my_second_key::id

解决方案1。使用复杂id并通过在id中搜索键

来创建视图
function (doc, meta) {
  if(meta.id.indexOf("::my_key::") !== -1){
    emit([doc.source_id], [doc.name,doc.title,doc.ui]);
  }

}

解决方案2。为每个文档添加像"type", "namespace"这样的字段并使用它们创建视图

function (doc, meta) {
  if(doc.type=='my_key'){
    emit([doc.source_id], [doc.name,doc.title,doc.ui]);
  }

}

如果我选择方案2,我必须在我的应用程序上维护id,可能我会像解决方案1中那样做。

有人有命名id和创建视图的经验吗?每个解决方案都有什么问题。或者indexOf()函数是不推荐的?

Couchbase在后台建立视图索引,所以如果你不使用stale=false参数,你将在两种解决方案中获得相同的性能从视图获取文档。

在第一个解决方案中,你可能会得到比第二个更长的键,因为在第二个解决方案中,你可以在doc中存储类型,而不是meta。Couchbase将所有元数据保存在内存中,所以键越长,需要的内存就越多。indexOf=====慢,所以建立索引需要更多的时间。

所以我认为第二个解决方案更好。

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

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

我使用像你的解决方案1。

在我的例子中(社交游戏后端服务器),key name表示存储的数据类型,例如,"player:{zone_id}:{uid}","playerchar:{zone_id}:{player_uid}:{char_id}"等。所以我没有在文档中添加type字段,因为应用程序知道它想要什么,从不需要来自value content的信息来进行反射。

关于性能/速度,对不起,我不能给出任何建议,我没有查询数据与视图的要求,我创建的所有视图只适用于开发& &;备份环境,数据分析;

相关内容

  • 没有找到相关文章

最新更新