【问题标题】:Is Couchbase an ordered key-value store?Couchbase 是有序键值存储吗?
【发布时间】:2015-02-08 18:23:47
【问题描述】:

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

【问题讨论】:

  • 接受的答案是正确的,但视图是用于索引,而不是文档检索。检索是通过请求给定的密钥来完成的,并且由于文档存储在 RAM 中,因此它们存储的确切顺序与检索目的无关。

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


【解决方案1】:

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

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

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

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

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

来源:views intro

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

来源:Views Basics

source

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

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

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

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

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

来自Couchbase Lite - View

【讨论】:

猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 2012-03-13
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2023-04-04
相关资源
最近更新 更多