当我阅读 CouchDB 文档时,我发现视图需要压缩而芒果索引不需要压缩,这很奇怪。它们在本质上不是相同的东西并且受到清理未使用或旧条目的相同要求吗?这对我来说似乎是一个疏忽。
我想我只需要澄清一下它们之间的索引树有何不同。
谢谢!
当我阅读 CouchDB 文档时,我发现视图需要压缩而芒果索引不需要压缩,这很奇怪。它们在本质上不是相同的东西并且受到清理未使用或旧条目的相同要求吗?这对我来说似乎是一个疏忽。
我想我只需要澄清一下它们之间的索引树有何不同。
谢谢!
事实上,人们可能会压缩芒果索引,因为在/db/_index
端点1创建的每个索引都有一个“ddoc”(设计文档),就像 map/reduce 视图的设计文档一样。
引用 /db/_index 文档,
Mango 是一种用于 CouchDB 数据库的声明式 JSON 查询语言。Mango 包装了几种索引类型,从开箱即用的主索引开始。索引类型为 json 的芒果索引是使用 MapReduce 视图构建的。1
现在查看/db/_compact/design-doc
2端点的文档*
压缩与指定设计文档关联的视图索引。与压缩实际数据库相比,压缩大视图可能会返回更多存储空间。因此,如果您知道一组特定的视图索引受到最近数据库更改的影响,则可以使用它来代替完整的数据库压缩。
*强调我的
由于每个“芒果索引”都有一个设计文档,因此任何芒果索引都可以与/db/_compact/design-doc
端点进行压缩。
这可以通过 curl 轻松验证。假设“stack”数据库中有一个带有 ddoc="foo-json-index-ddoc" 的芒果索引,
curl -v -X POST -H "Content-Type: application/json" http://localhost:5984/stack/_compact/foo-json-index-ddoc
详细(成功)响应将如下所示
< HTTP/1.1 202 Accepted
< Cache-Control: must-revalidate
< Content-Length: 12
< Content-Type: application/json
< Date: Tue, 18 May 2021 14:30:33 GMT
< Server: CouchDB/2.3.1 (Erlang OTP/19)
< X-Couch-Request-ID: bbf2b7b0c9
< X-CouchDB-Body-Time: 0
<
{"ok":true}
* Connection #0 to host localhost left intact
为了清楚起见,我留下了授权。
[1] /db/_index
[2] /db/_compact/design-doc