繁重的数学查询和NoSQL数据库

时间:2012-03-13 08:52:18

标签: mongodb memcached couchbase nosql

我有一个非常具体的数据格式和查询需求,我需要知道NoSQL DB是否适合这种需求。我询问“哪个DB最好”。我对功能感兴趣。

我需要以EAV风格存储数据。具有稀疏索引的文档存储是完美的。这样我可以在其值上为每个参数创建索引。查询时,只会触及所需的索引。例如,MongoDB非常适合这种情况。 这需要#1。

查询分为两个阶段。第一个是“WHERE”的简单等价物,涉及一系列< =>针对实数的操作。结果可能在成千上万的记录中,但通常会有数千个记录。 这是需要#2。

第二阶段涉及重要的数学,我必须在第一阶段的表现才能对它们进行排名。这种数学运算涉及大量使用权力和简化操作。然后按排名对结果进行排序,并将“前100名”返回给客户。 这是需要#3。

MongoDB是我唯一比较熟悉的NoSQL DB,因此我将它作为参考使用。我不相信它可以在查询中执行数学运算,即使它可以,也可能会很慢。我相信数学需要在客户端上执行(在C或CUDA中)。这意味着数据需要从DB快速传输到客户端。我知道MongoDB有一个本机二进制连接,但是,例如,Couchbase使用REST,我认为这会使大数据集的数据传输速度变慢。

我没有选择MongoDB的原因是我需要分布式服务器,例如,Couchbase似乎更适合。

所以我需要一个解决方案,可以在内部执行快速数学运算,从而限制要传输的记录数,或者可以非常快速地传输记录,以便可以在客户端上处理它们。我知道唯一知道的方法是测试,但我不知道,因此这个问题,NoSQL DB具有上述功能。

1 个答案:

答案 0 :(得分:1)

MongoDB提供服务器端javascript执行,这可能会解决你的一些问题,但我恐怕不知道效率如何。但是,我怀疑您的工作流程是I / O绑定的(您提到了数千条记录),因此最好不要进行客户端处理。当然,基准测试会说实话,但我提出了另一种解决方案。

你试过Redis吗?它具有强大的排序集,非常适合您的范围和排名查询。此外,下一个版本将引入LUA脚本,它可以补救工作流的I / O特性。请记住,Redis非常快。