繁体   English   中英

数据聚合mongodb vs mysql

[英]Data aggregation mongodb vs mysql

我目前正在研究一个后端,该后端可用于对数据聚合有严格要求的项目。 主要项目要求如下。

  1. 为每个用户存储数百万条记录。 用户每年可能有超过100万个条目,因此即使有100个用户,我们每年也要讨论1亿个条目。

  2. 这些条目上的数据聚合必须动态进行。 用户需要能够通过大量可用过滤器对条目进行过滤,然后呈现结果的摘要(总计,平均值等)和图表。 显然,我无法预先计算任何聚合结果,因为过滤器组合(以及结果集)非常庞大。

  3. 用户将只能访问自己的数据,但是如果可以为所有数据计算匿名统计信息,那就太好了。

  4. 大部分时间都是批量数据。 例如,用户每天将上传数据,并且可能需要3000条记录。 在某些更高版本中,可能会有自动程序,例如每隔几分钟以100批的小批量上传。

我做了一个简单的测试,创建一个具有100万行的表,并在mongodb和mysql中执行1列的简单求和,性能差异很大。 我不记得确切的数字,但是它就像mysql = 200ms,mongodb = 20 sec。

我还使用了ouchdb进行了测试,结果却差得多。

cassandra似乎是极有希望的速度明智之选,当我第一次发现它时就非常热衷。 但是,文档很少,我还没有找到关于如何对数据执行求和和其他聚合函数的可靠示例。 那可能吗 ?

从我对当前性能的测试(也许我做错了)看来,尽管自动分片功能似乎非常适合,但无法将mongodb用于此类项目。

是否有人在mongodb中具有数据聚合方面的经验,或者是否有任何对项目实施有帮助的见解?

谢谢Dimitris

如果您正在寻找高性能的DBMS,并且不需要将其与关系数据库联系起来,则可以考虑使用Cassandra-尽管它的优势只有在拥有数据库集群而不是单个节点的情况下才会发挥作用。

您没有说物理架构有什么限制。 您确实提到了分片,这意味着群集。 IIRC MySQL集群也支持分片。

知道系统打算支持什么级别的并发以及如何添加数据(滴灌或批处理),这也非常有用。

您说:“显然,我无法预先计算任何聚合结果,因为过滤器组合(因此结果集)很大。”

这是您最大的问题,并且将是确定系统性能的最重要因素。 当然,您无法维护每种可能组合的实体化视图,但是最大的性能赢利将是维持有限的预聚合视图并构建可以找到最接近匹配项的优化器。 这并不难。

C。

在需要javascript的用例中,例如map-reduce-jobs,MongoDB的性能给我留下了深刻的印象。 也许在1.51中会更好。 我没有尝试。

您也可以尝试免费的Greenplum单节点版本: http : //www.greenplum.com/products/single-node/http://www.dbms2.com/2009/10/19/greenplum-free-single -node-edition /

如果一百万个文档的总和在Mongo中花费了20秒,那么您可能没有足够的RAM。 对于Mongo,重要的是您可以在内存中维护整个数据集,否则性能将受到影响。 您没有提到计数的方式,也许这是您的map reduce代码的问题? 几乎没有什么细节可以说出问题所在,但是我已经完成了更复杂的地图缩减工作,订单量增加了很多,而仅在笔记本电脑上运行就花费了更少的时间

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM