gpt4 book ai didi

couchdb - 为什么 CouchDB 文档建议不应在 View 中发出文档?

转载 作者:行者123 更新时间:2023-12-01 10:35:31 24 4
gpt4 key购买 nike

在第一个示例(http://docs.couchdb.org/en/1.6.1/couchapp/views/collation.html#views-collation)下的 CouchDB 官方文档的 View Collat​​ion 章节中,建议不建议在 View 中发出文档本身,而是建议包含请求 View 时的文档,通过使用 ?include_docs=true 请求 View 。

如果我理解正确的话,而不是:

emit(doc._id, doc);

并获得以下格式的结果:

{"id":"1","key":"1","value":{"_id": "1", "someProp": "someVal"}},

建议发送空值:

emit(doc._id, null)

然后在使用 include_docs 参数查询我的 View 时得到以下格式的结果:

{
"id": "1",
"key": "1",
"value": null,
"doc": {
"_id": "1",
"_rev": "1-0eee81fecb5aa4f51e285c621271ff02",
"someProp": "someVal"
}

如果有人建议,我认为它的性能会更好,但不幸的是,文档没有详细说明为什么和其他示例通常将文档作为 emit 中的值发出。谁能对此有更多的了解?

最佳答案

当您在 View 中发出 整个文档时,实际上是在磁盘上复制文档。这是因为每个 View 都有自己的文件,其中包含在数据库上运行 View 的结果。因此,如果您有 3 个输出文档的 View ,则有 4 个副本 float 。 (不算文档的多次修改,这当然会增加更多的重复)

CouchDB 非常自由地使用磁盘空间以使写入发生得更快,这主要是因为他们选择使用仅追加结构。因此,使用 View 重复输出相同的文档会导致磁盘使用量快速增长。 (压缩你的数据库和 View 通常会有帮助,但它不应该是你想要不断强制自己做的事情)

将文档排除在外的权衡是,当您从 View 中读取时,CouchDB 将需要在内部查找文档并将其包含在 View 的输出中。由于它是根据 id 查找内容,因此这是一个非常快速的操作,但它仍然会产生开销。因此,虽然这种模式通常是最佳实践,但您应该愿意在您的应用程序上下文中检查权衡。

关于couchdb - 为什么 CouchDB 文档建议不应在 View 中发出文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com