假设我们有一些包含N
文档、每个S
字节大小和V
视图计数的 couchbase 存储桶。我们需要检索这些文档,包括。它们包含的所有信息。
一种方法:创建一个具有这种地图功能的视图:
function (doc, meta) {
if (meta.type == "json" && doc.type == "mytype"){
emit([doc.field1, doc.field2], doc);
}
}
这个 map 函数将在一个步骤中返回我们需要的所有数据。但另一方面,它会产生大量安静的数据。
另一种方法:创建一个只返回类似文档 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
s。
在这种情况下,我们生成的视图数据量较少,但操作将通过 X+1 个请求完成。
因此,第一种方式加载 couchbase 服务器并为视图消耗大量磁盘空间。第二种方式消耗更少的视图空间,但会加载客户端并向 couchbase 服务器产生更多请求。
所以有一些关于这个的问题:
- 这些方式中哪一种更容易接受/经常使用,或者几乎不依赖于它和
N
价值观?S
V
- 如果正确的方式取决于
N
,S
,V
那么这些变量的哪些值(高/中/低)一种方式比其他方式更容易接受? - Couchbase 可以轻松地水平缩放。如果客户端更难扩展,首选第一种方式吗?
- 可能有一些测试结果可以比较这两种方式。