这个用例的最佳NoSQL DBMS是什么?

时间:2013-03-14 02:21:28

标签: nosql data-modeling database-performance

在我提出问题之前,先谈谈我们的问题。

我们正在制定政府收入预测申请。在这个应用程序中,我们收集有关以前收入的数据,应用几个计量经济学和政治投影模型(通过几个阶段),同时将其持久化到数据库。

简而言之,这是投影系统的简化模型:

使用此架构的几行(开始时,~6000行)代表过去的收入(称为业务情景):

+------+------+------+------+------+-------+---------+
| Cat1 | Cat2 | Cat3 | Cat4 | Year | Month | Revenue |
+------+------+------+------+------+-------+---------+

在整个投影系统中,数据以多种方式转换(移动类别,改变收入值,修复非典型性等)。每个转换都在一个阶段完成:

Initial Scenario (S0) ---(1st transformation phase)--> Transformed Scenario (S1)
S1 ---(2nd t.p.)--> S2 ---> S3 ---...---> SN

每个阶段都会转换一个场景,这个块的大小从2-100%的数据变化,部分场景状态必须保持不变,直到达到最终状态(SN)。部分状态只能是变换后的行或整个部分情景(只要可以比较部分状态)。

此外,用户可以返回到该过程(例如,返回到阶段2)并从那里重新开始投影,忽略之前完成的工作。

在这个用例中,我们遇到了RDBMS的问题:它们对于写操作来说确实很慢(花费半小时进行场景预测)。

在阅读了NoSQL DBMS之后,我们得到了几个选项,但是,由于我还在学习曲线上,我想问一下:在这个用例中使用的最佳选择是什么:VoltDB,Redis,Riak ,Cassandra,MongoDB或HBase?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我将从MongoDB的角度介绍我的解决方案。也许其他人可以从其他数据库中添加他们的经验。

Mongo有一个map / reduce框架,允许您针对数据运行非常复杂的查询。关于map / reduce的好处是你可以将结果输出到数据库中的集合(类似于RDBMS中的表)。

所以它会是:

  1. 运行地图/减少作业1 =>输出到集合A。
  2. 针对收集运行地图/减少作业2 A =>输出到集合B.
  3. 针对集合B =>运行map / reduce job 3输出到集合C。
  4. ...
  5. 利润!
  6. 每个步骤都会产生一组持久的数据。这可以让你从中断的地方继续前进。你当然必须在完成后清理,但它可以工作。

    我不是Hadoop专家,但您的情景听起来非常适合他们的生态系统。以中间产出分阶段运行复杂的工作。