1

背景

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

我想做的事

当它们发生时,使用临时视图为这些交互查找(查询)传递映射/归约。

为什么不?

文档告诉我这是一个糟糕的主意

问题

为什么这是一个可怕的想法?这真的是一个可怕的想法吗?

奖励积分

如果这是一个糟糕的主意,那么什么是好主意?每个组合的视图都是愚蠢的许多视图,并且为此将整堆数据加载到另一个程序中感觉有点过头了(我注意到 lucene 有一些工具可以解决这个问题,如果必须的话,我可以制作一个 Node )。如果必须的话,我可以转向这样的工具,但我还不明白为什么。

4

1 回答 1

3

临时视图仅供开发使用,因为它们每次被调用时都被迫重建整个视图索引,并且它们的结果不会像典型视图那样保存。数据库中的文档越多,这将产生更大的损失,如果您尝试将其用作动态查询系统,它将很快咬住您。(源v1.6.1 文档)事实上,临时视图完全从 v2 中删除。(源码v2.0.0升级说明

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

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

于 2017-02-13T20:57:55.893 回答