Couchdb适合这样的查询?

时间:2012-06-26 13:33:12

标签: couchdb

我一直在寻找GAE的逃脱,因为数据存储区不支持我想用它做的很多事情。

所以我看过CouchDB(以及其他),我非常喜欢我在Cloudant找到的REST接口和托管选项。

但是对于我所有的Google搜索和阅读我能找到的任何文档,我仍然不确定它是否合适。 所以我来到这里是希望有人可以有更多的见解。

我编写了网络应用程序,我想做的很多项目都会涉及一个如下所示的查询:

查找用户输入lat / long边界框内的所有条目,其中start-time小于user-input-time-1,end-time大于user-input-time-2并且user-input-of-tags中的所有标签。

这甚至不是伪代码,但我希望无论如何它都有意义。

我不只是在寻找“你不能在CouchDB中做到这一点”。某种解释,或许类似于“如果没有标签就可以生活,那么你可以这样做:”

我想使用Cloudant服务,所以GeoCouch显然是不可能的,但他们做的事情应该像lucene一样工作,但这是否意味着查询很慢?

正如你所知,我在这里有点困惑,所以尽力把我拉直,我会很高兴:)

1 个答案:

答案 0 :(得分:0)

没有提到标签(这本身已经是一个问题),你所描述的是一个多维查询:你有几个“坐标”(纬度,长度,开始时间,结束时间)并提供一个范围对于这些坐标中的每一个。

就其本身而言,CouchDB根本无法执行多维查询 - 您只能在一个坐标上获得单维查询。

标签肯定是可能的,但这取决于您是否需要列表中至少有一个标签的文档,或者列表中包含所有标签的文档。第一种情况很简单(使用批量API对每个标签运行一次查询),第二种情况可能需要过多的内存(如果文档有N个标签,则需要发出2个 N-1 标签 - 设置为了匹配涉及它的所有可能的标记组合,因此您应该在文档中的标记数或查询中的标记数上加上限。

Lucene确实允许多维和基于关键字的查询,但我不能保证他们的表现。