Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以针对noSQL DB构造复杂的查询_Nosql - Fatal编程技术网

是否可以针对noSQL DB构造复杂的查询

是否可以针对noSQL DB构造复杂的查询,nosql,Nosql,我一直在研究noSQL数据库,但自己并没有能够满意地回答这个问题:是否有可能针对noSQL数据库构造复杂的查询 我想知道的查询类型如下: select * from DB where vara > x AND varb = 2 AND varc < x AND vard in (x,y,z) AND vare like '%texthere%' AND varf = 2 AND varg = 3 and etc... 从数据库中选择*,其中 vara>x和 varb=2和 varc

我一直在研究noSQL数据库,但自己并没有能够满意地回答这个问题:是否有可能针对noSQL数据库构造复杂的查询

我想知道的查询类型如下:

select * from DB where
vara > x AND
varb = 2 AND
varc < x AND
vard in (x,y,z) AND
vare like '%texthere%' AND
varf = 2 AND
varg = 3 and
etc...
从数据库中选择*,其中
vara>x和
varb=2和
varc
注意:我知道我不能使用SQL,如上所述,我要问的是如何使用上面的psuedo逻辑进行查询,换句话说,是一大堆不同的条件。到目前为止,我找到的最佳答案是,您需要查询RDBMS,然后根据云上的密钥获取数据。这对我来说并不一定更有效率


作为后续行动。如果只是想解决一个“搜索400万行”的问题,而不是“我们有数十亿行数据”的问题,那么我是否应该考虑一下noSQL数据库呢?

我不是noSQL专家,但顾名思义,他们不必依赖SQL。您可能想做什么就做什么,但需要编写map/reduce函数或其他非SQL方式来查询数据

也许这个博客为您提供了有用的信息:

在中,您只需执行类似于
db.mytbl.find({“vara”:{$gt:10},“varb”:2,“varc”:{$lt:100})


请参见,有关示例,它取决于您使用的数据存储

我经常使用AppEngine,他们的数据存储只允许一列不相等(该列必须是排序顺序中的第一个元素。因此,您将无法运行发布的查询,但可以执行类似的查询:

select * from DB where
vara > x AND
varb = 2 AND
varc in (t,u,v,w)
vard in (x,y,z) AND
varf = 2 AND
varg = 3
此外,您还可以创建一个包含字符串列表的列,并选择列表中有值的行


因此,官方的答案是“可能,有时,但不是真的,除非是”

在我看来,您可以在文档数据存储(如MongoDB)中这样做,但在键值数据存储(如Cassandra)中不容易。如果要在键值数据存储中这样做,复合键必须标识所有查询的数据元素(列)。换句话说,一个实例必须具有所有查询列。这是可能的。在普通键值存储中,每个键有一个数据元素(列),但您可以这样做以支持多个。键值存储允许这样做,因为值只是一个字符串值,可以包含您想要的内容。我建议使用多个数据元素(专栏)每个键,但您必须为此进行编程。如果在不同的列实例中有列,则垂直搜索数据的速度会非常慢,即使列是有序的。问题中的示例只有一个表。如果在关系中有多个表,则在键值存储中,您必须创建一个new列族来存储连接的数据,并且每个键仍然必须有多个数据元素。但是,必须通过类似ETL的过程在一个族中的一个实例中水平预加载数据。换句话说,在将数据加载到键值存储之前连接数据,并设计Cassandra数据存储来存储已存在的-c将数据与多个值组合在一个列中。或者使用数据挖掘。我相信“大数据分析”目前正在关键值商店中解决这个问题。另一个没有你的复杂的例子是,在关键值商店中,你如何按客户、产品、每周生成销售收入和销售量的简单报告