3

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

我需要以 EAV 样式存储数据。具有稀疏索引的文档存储非常适合这一点。这样,我可以针对每个参数的值创建一个索引。查询时,只会触及需要的索引。例如,MongoDB 非常适合这一点。这是需求#1。

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

第二阶段涉及大量数学,我必须在第一阶段的结果上执行才能对它们进行排名。这个数学涉及大量使用权力和更简单的操作。然后将结果按排名排序,并将“前 100 名”返回给客户端。这是需求#3。

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

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

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

4

1 回答 1

1

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

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

于 2012-03-13T10:52:59.437 回答