我的应用程序已经超出了自身,性能开始迅速降低。
如果你已经解决了这个问题,请你解释一下。
我可以使用任何所需的技术,nosql或sql。我不是在寻找哪种技术更好。我知道这可以通过许多不同的方式完成。
我只是在寻找:
我已经使用6个mongo分片和map reduce解决了这个类似的数据集,每台机器都有32gb内存。或者,我在sql中使用了分布式分区。我已经尝试并尽可能地在一台128gb ram和v high io的机器上进行了优化,但现在需要花费数小时才能完成。
答案 0 :(得分:0)
从您的描述中可以看出,您的数据已经适合单个机器,因此甚至可能不需要分片。您可以在日期时间列上创建聚簇索引。此操作本身可能需要很长时间。完成后,选择需要处理的16 M行应该相当快。
一旦找到所需的16M行,数据处理是否需要很长时间?您可能希望将原始16M行(不处理)插入到临时表中,然后创建可以帮助处理的其他索引。如果你能详细说明,我可以给你一些额外的建议。
如果数据库继续增长,传统的基于时间的分片也可能有效。您为每个月的数据创建一个新数据库,并在您的应用程序层中确定您需要查询和合并结果的数据库。这允许您通过简单地删除数据库来清除旧数据,而不是有选择地从现有表中删除大量数据。后者可能会导致在实时系统上同时运行的其他查询出现性能问题。