我有一个非常具体的数据格式和查询需求,我需要知道nosql dbs是否适合这种需求。我不是在问“哪个数据库最好”。我对能力感兴趣。
我需要以eav风格存储数据。具有稀疏索引的文档存储非常适合这样做。这样我就可以针对每个参数的值创建一个索引。查询时,只会触及所需的索引。例如,MongoDB就非常适合这样做。这是需求1。
查询分为两个阶段。第一个是“where”的简单等价物,涉及对实数的一系列操作。结果可能是成千上万的记录,但通常是成千上万的。这是需要2。
第二个阶段涉及繁重的数学,我必须对第一阶段的结果进行排名。这一数学运算涉及到大量使用幂和更简单的运算。然后按排名对结果进行排序,并将“前100名”返回给客户机。这是需求3。
mongodb是我相对熟悉的惟一nosql db,因此我将使用它作为参考。我不相信它能在查询中执行数学运算,即使它能,它也可能很慢。我认为需要在客户机上执行计算(在C或CUDA中)。这意味着数据需要非常快速地从数据库传输到客户端。我知道mongodb有一个本机二进制连接,但是,例如couchbase使用rest,我相信这会使它在大数据集的数据传输上变慢。
我还没有决定使用mongodb的原因是我需要分布式服务器,比如couchbase似乎更适合分布式服务器。
因此,我需要一个解决方案,要么在内部执行快速计算,从而限制要传输的记录数,要么可以非常快速地传输记录,以便可以在客户端处理它们。我知道唯一知道的方法是测试,但我不知道的是,因此这个问题是,哪个nosql dbs具有上述功能。

最佳答案

mongodb提供了服务器端javascript执行,这可能会解决您的一些问题,但恐怕我不能告诉您效率有多高。但是,我怀疑您的工作流是I/O绑定的(您提到了数千条记录),因此最好不要进行客户端处理。当然,基准测试会说实话,但我提出了另一种解决方案。
你试过吗?它有强大的排序集,非常适合您的范围和排名查询。另外,下一个版本将引入lua脚本,它弥补了工作流的i/o特性。记住,redis真的非常快。

10-08 08:55
查看更多