1亿行聚合到新集合

Posted

技术标签:

【中文标题】1亿行聚合到新集合【英文标题】:100 million row aggregation to new set 【发布时间】:2013-05-27 07:20:44 【问题描述】:

我有一个应用程序已经过时并且性能开始迅速下降。

    我有一个包含 1 亿行的数据库表。 我需要找到两个日期之间的一组数据。 对该集合中的每一行应用某种算法。 将结果集(大约 1600 万行)插入到新表中。

如果你已经解决了这个问题,请你解释一下如何。

我可以使用任何需要的技术,nosql 或 sql。我不是在寻找哪种技术更好。我知道这可以通过许多不同的方式来完成。

我只是在寻找:

我已经使用 6 个 mongo 分片和 map reduce 为类似的数据集解决了这个问题,每台机器都有 32gb 内存。或者,我在 sql 中使用了分布式分区。我已经在一台具有 128gb 内存和 v 高 io 的机器上尽可能多地尝试和优化,但现在需要几个小时才能完成。

【问题讨论】:

现有数据在什么地方? SQL 服务器? mysql 【参考方案1】:

根据您的描述,听起来您的数据已经适合单台机器,因此甚至可能不需要分片。您可以在日期时间列上创建聚集索引。此操作本身可能需要大量时间。完成后,选择需要处理的 16 M 行应该很快。

找到所需的 1600 万行后,处理数据是否需要很长时间?您可能希望将原始的 16M 行(未经处理)插入到临时表中,然后创建可以帮助处理的附加索引。如果你能提供更多细节,我可以给你一些额外的建议。

如果数据库继续增长,传统的基于时间的分片也可能有效。您为每个月的数据创建一个新数据库,并在应用程序层确定需要查询和合并结果的数据库。这允许您通过简单地删除数据库而不是从现有表中选择性地删除大量数据来清除旧数据。后者可能会导致在实时系统上同时运行的其他查询出现性能问题。

【讨论】:

以上是关于1亿行聚合到新集合的主要内容,如果未能解决你的问题,请参考以下文章

按子文档字段分组文档

将老集合中重复的元素删除并添加到新集合中

什么是java聚合工程

使用 javascript 将 2 个连接的集合插入到新集合 MongoDB

使用云功能将文档复制到 Firestore 中的新集合中

如何在具有组合布局的新集合视图中将 CAGradientLayer 添加到 UIBackgroundConfiguration?