1

Couchbase 中的文档是否按密钥顺序存储?换句话说,它们是否允许有效的查询来检索具有特定范围内的键的所有文档?特别是我需要知道这是否适用于 Couchbase lite。

4

1 回答 1

3

查询效率与添加到服务器的视图的构造相关。

Couchbase/Couchbase Lite 只存储程序员在这些视图中指定和生成的索引。随着 Couchbase 重新平衡它在节点之间移动文档,因此可以保证或一致的键顺序似乎是不切实际的。

(很少有数据库/数据存储能够保证磁盘上的文档或行排序,因为索引提供此功能的成本更低。)

Couchbase 文档检索是通过视图中的 map/reduce 查询执行的:

视图根据定义的格式和结构在数据上创建索引。该视图包含从 Couchbase 中的对象中提取的特定字段和信息。视图会为您的信息创建索引,以便对数据进行搜索和选择操作。

来源:观点介绍

通过遍历 Couchbase 存储桶中的每个文档并输出指定的信息来创建视图。生成的索引被存储以供将来使用,并在访问视图时使用存储的新数据进行更新。该过程是增量的,因此对性能的持续影响很小。在现有的大型数据集上创建新视图可能需要很长时间才能构建,但数据更新很快。

来源:视图基础

在此处输入图像描述

来源

最后,关于将 SQL 转换为 map/reduce的部分可能会有所帮助:

一般来说,对于每个 WHERE 子句,您需要在生成的视图的 key 中包含相应的字段,然后使用 key、keys 或 startkey/endkey 组合来指示要选择的数据。

总之,Couchbase 视图不断更新其索引以确保最佳查询性能。Couchbase Lite 类似于查询,但是服务器的机制略有不同:

查询时按需更新视图索引。因此,在文档更改后,对视图进行的下一个查询将导致该视图的 map 函数在文档的新内容上被调用,从而更新视图索引。(但请记住,您不应该编写任何关于何时调用映射函数的假设的代码。)

如何改进视图索引:您可以控制的主要内容是地图功能的性能,包括运行时间和分配的对象数量。尝试在视图索引时分析您的应用程序,看看是否在地图功能上花费了很多时间;如果是这样,优化它。如果文档不是会产生任何行的类型,请查看是否可以短路 map 函数并尽早放弃。还要看看你是否可以发出更少的数据。(如果您将整个文档作为值发出,请不要。)

来自Couchbase Lite - 查看

于 2015-02-08T19:00:00.100 回答