1亿行聚合到新集

时间:2013-05-27 07:20:44

标签: database nosql bigdata

我的应用程序已经超出了自身,性能开始迅速降低。

  1. 我有一个包含1亿行的数据库表。
  2. 我需要在两个日期之间找到一组数据。
  3. 将一些算法应用于该集合中的每一行。
  4. 将结果集(约1600万行)插入新表中。
  5. 如果你已经解决了这个问题,请你解释一下。

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

    我只是在寻找:

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

1 个答案:

答案 0 :(得分:0)

从您的描述中可以看出,您的数据已经适合单个机器,因此甚至可能不需要分片。您可以在日期时间列上创建聚簇索引。此操作本身可能需要很长时间。完成后,选择需要处理的16 M行应该相当快。

一旦找到所需的16M行,数据处理是否需要很长时间?您可能希望将原始16M行(不处理)插入到临时表中,然后创建可以帮助处理的其他索引。如果你能详细说明,我可以给你一些额外的建议。

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