无范围查询的NoSQL数据库

4
我正在寻找一种NoSQL数据库,它允许查询返回指定范围内的记录。
我对NoSQL术语不是很熟悉(因为我仍在研究它们是否可行),所以我将按照我在SQL中的做法来解释它。
我需要做的是搜索记录(比如论坛帖子),这些记录高于特定得分。大致上是这样的:SELECT * FROM posts WHERE score > 2
问题是,在使用PHP时,是否可以在任何NoSQL数据库(键值或宽列)中实现此操作?如果任何NoSQL数据库都无法实现,哪些NoSQL数据库支持这样的查询?
2个回答

2
您也许会想查看MongoDB。它很受欢迎1,并支持范围查询:

与其他非关系型数据库解决方案不同的是,任何字段都可以随时查询。MongoDB除了完全匹配字段外,还支持范围查询、正则表达式搜索以及其他特殊类型的查询。查询还可以包括用户定义的JavaScript函数(如果函数返回true,则文档匹配)。

来自:维基百科-MongoDB功能

这是您在Mongo中的SELECT * FROM posts WHERE score > 2查询:
db.posts.find( { score : {$gt: 2} } );

进一步阅读:


1参见:MongoDB:生产部署


我正确地发现 MongoDB 从 ACID 中移除了 Durability 吗? - Hubert Kario
@Hubert:这是一个权衡。你可能想看看这个SO问题:有没有任何符合ACID标准的NoSQL? MongoDB仍然是支持许多SQL数据库功能的NoSQL解决方案之一。 - Daniel Vassallo
@Hubert:您可能也会对这个感兴趣:http://www.mongodb.org/display/DOCS/Durability+and+Repair 和这个:http://blog.mongodb.org/post/381927266/what-about-durability - Daniel Vassallo
我知道,这就是NoSQL数据库的问题所在,我只想知道它为了实现性能而放弃了ACID的哪一部分,这样我就可以编写一个应用程序来缓解这个问题。如果我关心100%的ACID性,我就不会考虑NoSQL解决方案,而是直接使用PostgreSQL :) - Hubert Kario

0

OrientDB 支持具有无模式范例扩展的SQL。

您可以执行此查询:

SELECT * FROM posts WHERE score > 2

但是底层索引不能与不等于=(等于)的运算符一起使用。因此,如果需要扫描整个集群来满足条件(类似于关系型世界中的表),那么在处理数百万条记录时可能不会那么快。


那对我的需求来说就不好了,有两个原因:使用“大于”分数只是查询的一部分(可能还有其他非等式的条件),其次:我需要这样的查询非常快。 - Hubert Kario
这个功能计划在下一个版本中发布:http://code.google.com/p/orient/issues/detail?id=64。我们谈论的是多少记录?数百万还是数十亿? - Lvca
我需要尽可能多的性能,因为我的计划是在VPS上运行它,这样可以处理数百万级别的数据。 - Hubert Kario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接