CouchDB中的临时视图有什么问题?

时间:2017-02-13 20:00:06

标签: database lucene couchdb couchdb-lucene

背景

  • 我有一个运行几个数据库的CouchDB集群。
  • 其中一个文档包含数百个数据,结构有些复杂。 (一个'人',例如身高,体重,眼睛颜色,头发颜色,衣服,gps位置,以及其他几百种东西)
  • 我想寻找几个数据点之间的交叉点,即BLUE眼睛和BLACK头发。
  • 我可以搜索数百个可能的因子组合。 我很少进行这些搜索。
  • 我写了很多这个数据库。

我想做什么

使用temporary view传递map / reduce,以便在它们出现时进行这些查找(查询)。

为什么不呢?

文档告诉我这是一个可怕的想法

问题

为什么这是一个糟糕的主意? 它真的是一个可怕的想法吗?

奖励积分

如果一个好主意是一个可怕的想法?每个组合的视图都是愚蠢的许多视图,并将整堆数据加载到另一个程序中为此感觉有点过分(我注意到lucene有一些工具用于此,如果必须,我可以烹饪一个节点)。如果必须的话,我可以转移到这样的工具,我只是还不明白为什么。

1 个答案:

答案 0 :(得分:3)

临时视图仅供开发使用,因为每次调用它们时都会强制重建整个视图索引,并且它们的结果不像典型视图那样保存。对于数据库中的文档越多,这将受到更大的惩罚,如果您尝试将其用作动态查询系统,它会很快地咬你。 (来源v1.6.1 documentation)事实上,临时视图完全从v2中删除。 (来源v2.0.0 upgrade notes

我不确定您运行的是哪个版本的CouchDB,但是如果您使用的是v1并且您想在此处执行高度动态的查询,那么您可能会更好地使用某种全文索引器,例如apache lucene或弹性搜索。除了同时支持多个参数外,它们还将为您的搜索增添许多灵活性。

如果您使用的是CouchDB v2,您还可以考虑使用新的Mango Query Server,它为查询文档添加了mongodb样式的语法。使用此功能,您绝对可以包含多个参数并进行更多动态搜索。