让我们假设我们有一些包含N
个文档的couchbase存储桶,每个S
字节大小和V
个视图计数。我们需要审阅这些文档。它们包含的所有信息。
一种方式: 创建具有此类地图功能的视图:
function (doc, meta) {
if (meta.type == "json" && doc.type == "mytype"){
emit([doc.field1, doc.field2], doc);
}
}
此地图功能将在一个步骤中返回我们需要的所有数据。但另一方面,它会产生大量数据。
另一种方式:
创建一个只返回文档ID的视图(甚至使用meta.id
返回文档键):
function (doc, meta) {
if (meta.type == "json" && doc.type == "mytype"){
emit([doc.field1, doc.field2], doc.id);
}
}
然后在客户端获取此文件后,我们需要通过提供的ID获取每个文档,如:
couchbase.getMultiple([key1,key2,...,keyX]) *
*其中keyX
是doc.id
的视图。
在这种情况下,我们生成的视图数据量较少,但操作将在X + 1请求中完成。
因此,首先加载couchbase服务器并为视图消耗大量磁盘空间。第二种方式消耗较少的视图空间,但加载客户端并向couchbase服务器产生更多请求。
所以有一些问题:
N
,S
和V
值?N
,S
,V
这些变量的值(高/中/低)单向哪一种比其他方式更可接受?答案 0 :(得分:2)
您使用哪种SDK来访问视图?
好的做法通常是避免发出文档ID,因为它会自动放入视图索引中。
基本规则:
看看: http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views-writing-bestpractice.html
然后,如果您的应用程序需要访问您需要执行的完整文档(例如Java):
query.setIncludeDocs(true);
在这种情况下,客户端将自动执行“get”以调用服务器并将文档加载到缓存中。 (实际上SDK正在进行多次获取。