数据聚合mongodb与mysql

数据聚合mongodb与mysql,mysql,mongodb,Mysql,Mongodb,我目前正在研究一个后端,用于一个具有苛刻数据聚合需求的项目。主要项目要求如下 为每个用户存储数百万条记录。用户每年可能有超过100万条条目,因此即使有100个用户,我们也在谈论每年1亿条条目 必须动态执行这些条目上的数据聚合。用户需要能够通过大量可用的过滤器对条目进行过滤,然后呈现总结(总计、平均e.t.c)和结果图表。显然,我无法预先计算任何聚合结果,因为过滤器组合(以及结果集)非常庞大 用户将只能访问自己的数据,但如果可以计算所有数据的匿名统计数据,那就太好了 数据大部分时间都是成批处理的。

我目前正在研究一个后端,用于一个具有苛刻数据聚合需求的项目。主要项目要求如下

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

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

  • 用户将只能访问自己的数据,但如果可以计算所有数据的匿名统计数据,那就太好了

  • 数据大部分时间都是成批处理的。e、 g用户每天上传数据,可能会有3000条记录。例如,在一些较新版本中,可能会有自动程序每隔几分钟上传一次100个项目的小批量内容

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

    我也用couchdb做了测试,结果差得多

    在速度方面似乎很有希望的是卡桑德拉,当我第一次发现它时,我非常热衷于它。然而,文档很少,我还没有找到任何关于如何对数据执行求和和和其他聚合函数的可靠示例。可能吗

    从我对当前性能的测试来看(可能是我做错了什么),在这样的项目中使用mongodb是不可能的,尽管自动切分功能似乎非常适合它

    是否有人拥有mongodb中数据聚合的经验,或者有任何见解可以帮助项目的实施

    谢谢,
    Dimitris

    < P>如果你正在寻找一个非常高性能的DBMS,不需要它是关系型的,你可以考虑卡桑德拉——尽管它的优势只有在你有一个数据库集群而不是一个节点时才会发挥作用。 你没有说物理架构有什么限制。你提到了切分,这意味着一个集群。IIRC-MySQL集群也支持分片

    了解系统打算支持的并发级别以及如何添加数据(滴灌或批处理)也是非常有用的

    您会说“显然,我无法预先计算任何聚合结果,因为过滤器组合(以及结果集)非常庞大。”

    这是您最大的问题,也是决定系统性能的最重要因素。当然,您不能维护每个可能组合的物化视图,但您最大的性能胜利将是维护有限的预聚合视图,并构建一个能够找到最近匹配的优化器。没那么难


    C.

    我从未对MongoDB在需要javascript的用例中的性能印象深刻,例如MapReduce作业。也许1.51更好。我没有试过


    您也可以尝试Greenplum:和

    的免费单节点版本,或者hadoop()或hadoopdb()?

    如果在Mongo中一个简单的100万个文档花费了20秒,您可能没有足够的RAM。使用Mongo时,您必须在内存中维护整个数据集,否则性能会受到影响。你没有提到你是如何计算的,也许是你的map reduce代码有问题?细节太少,无法说明问题所在,但我已经完成了更复杂的map,减少了一个数量级的文档,只需在笔记本电脑上运行就可以节省时间

    您好,谢谢您的回复。我用更多的信息更新了我原来的帖子。您最后对预聚合视图和最近匹配优化器的评论是我在研究项目时一直在考虑的。我的问题是我不知道该怎么做,从哪里开始。每个记录都有许多标志,这些标志将用作过滤器,用户还可以按任意日期间隔进行过滤。然后在结果集上,我必须计算出大量的平均值和计数。有多少次这个标志是真的e.t.c.还有更多的指针感谢。greenplum链接非常有用,因为我发现有很多数据库,比如greenplum,都是针对我需要做的事情而优化的。海量数据分析。另一个是infobright,它插入mysql,看起来很有前途。