Couchbase是一个有序的键值存储吗?

时间:2015-02-08 18:23:48

标签: database couchbase key-value-store couchbase-lite

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

1 个答案:

答案 0 :(得分:3)

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

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

(很少有数据库/数据存储保证磁盘上的文档或行排序,因为索引可以更便宜地提供此功能。)

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

  

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

来源:views intro

  

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

来源:Views Basics

enter image description here

source

最后,Translating SQL to map/reduce上的部分可能会有所帮助:

  

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

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

  

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

     

如何改进视图索引:您可以控制的主要功能是地图功能的性能,运行所需的时间以及分配的对象数量。在视图编制索引时尝试分析您的应用,并查看是否在地图功能中花费了大量时间;如果是这样,优化它。看看你是否可以缩短map函数的短路,如果文档不是一个会产生任何行的类型,那就早点放弃。另外,看看你是否可以发出更少的数据。 (如果您将整个文档作为值发布,请不要这样做。)

来自Couchbase Lite - View

相关问题