【问题标题】:Couch DB - Complex Keys And View RedundancyCouch DB - 复杂的键和视图冗余
【发布时间】:2014-04-01 09:00:39
【问题描述】:

试图让这个问题尽可能简单......我目前正在考虑使用两个(Couch)数据库视图。

第一个的签名有点像这样;

{[username, group], value}

我可以使用哪些查询 - startkey=[username]&endkey[username,{}]

...

两个视图中的第二个看起来像;

{[group, username], value}

我可以用类似的方式查询 - startkey=[group]&endkey[group,{}]

Afaik,我无法使用 - startkey=[{},propertyName]&endkey[{},propertyName] 查询视图 - 这就是为什么我觉得我需要两个视图。但问题是,使用看起来非常相似的键创建两个视图感觉非常麻烦。当然,最大的优势是两个视图中的一个可以让我简单、直观地搜索用户名,而另一个可以为组提供相同的功能。

不过,这两个组都允许我使用 reduce 函数来识别每个组中的唯一用户名。

TLDR?

我是否可以只使用一个视图来唯一标识每个组中的用户数量,或者使用键“组”或“用户名”属性来查询它?

【问题讨论】:

    标签: optimization database-design mapreduce nosql couchdb


    【解决方案1】:

    不,您不能,因为视图下的 B 树是按构成索引的键从第一个到最后一个排序的,因此不允许按二级、三级等键进行搜索,除非键在它面前也是存在的。这类似于在 RDBMS 中添加索引,因为相同的 B 树结构是这些索引的基础。在查询使用的索引的 RDBMS 中,您必须至少包含索引的第一个键。在没有第一个键的情况下进行查询会导致表扫描(假设不存在更好的索引),而以这种方式“查询”CouchDb 视图只会导致没有结果。因此,CouchDb 的视图是显式索引,没有对所有文档进行扫描的回退。

    根据我在使用 CouchDb 时的经验,感觉好像存在一种增加视图的内在趋势,但实际上它只是迫使我们真正考虑搜索,因为没有内置的回退。

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多