2011-09-05 39 views
1

我必须对存储在MySQL数据库中的非常大的数据集执行一些严重的数据挖掘。但是,需要比基本的多一点的查询往往变得相当低效,因为它们返回的结果大概在10e6或更多,特别是在引入一个或多个表的JOIN时 - 考虑将包含数十个数百万行(在过滤数据后),这在每个查询中都会发生。我们经常希望在这些(sum,avg,count等)上运行聚合函数,但这是不可能的,因为MySQL只是扼杀。关于极大数据集的RDBMS - 人们在使用什么?

我应该注意到很多努力都是为了优化当前的性能 - 所有表格都正确索引,查询调整,硬件一流,存储引擎配置等等。但是,每个查询仍然需要很长时间 - 直到“我们在回家之前运行它,并希望明天我们能够最好地工作时最好”。不好。

这必须是一个可以解决的问题 - 许多大公司执行非常数据和计算密集型挖掘,并处理它(无需编写自己的存储引擎,谷歌)。我愿意接受时间处罚来完成这项工作,但几小时而不是几天。我的问题是 - 人们用什么来对付这样的问题?我听说过针对这类问题的存储引擎(greenplum等),但我想知道如何解决这个问题。我们目前的数据存储显然是关系型的,应该保持这种状态,但任何想法或建议都是值得欢迎的。谢谢。

+0

mysql对于我来说非常适合(运行时间小于0.2秒),并且具有非常大的表10亿行,使用优化的innodb模式的复杂连接可以利用聚簇索引而无需分区。我想知道你的mysql模式有什么问题使得它表现如此糟糕?也许快速阅读这可能会指出你在正确的方向http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –

回答

2

我建议PostgreSQL,我一直在使用〜0.5B行的表格非常成功地工作,需要一些复杂的连接操作。甲骨文也应该对此有所帮助,但我没有太多经验。

需要注意的是,切换RDBMS并不是一个神奇的解决方案,如果要扩展到这些大小,那么在优化查询,优化数据库结构和索引,微调数据库配置,使用正确的硬件为您的使用,复制,使用物化视图(这是非常强大的,如果使用正确的话,请参阅herehere - 其postgres具体,但也适用于其他RDBMSs)...在某些时候,你只需要在这个问题上投入更多的钱。

编辑固定一些奇怪的拼写错误(无用机器人自动正确的...),并增加了一些资源约物化视图

1

我们已经用MS的SqlServer与数百万行多十运行财务数据分析使用复杂的JOIN和聚合。我们所做的几件事情除了你提到的以外,还有:

  • 我们把计算分块成很多临时表而不是使用子查询。这些表格然后通过代码应用正确的密钥,索引等。带子查询的查询对我们来说只是失败
  • 在临时表中,我们经常应用对我们有意义的聚集索引。请注意,此临时表是过滤结果,因此与使用子查询代替此临时表相比,即时应用索引并不昂贵。注意我是根据我们的经验发言的,可能并不适用于所有情况
  • 由于我们也做了很多聚合函数,所以我们在组列上做了很多索引
  • 我们做了很多查询运行计划向我们展示执行计划的SQL Query Analyzer。根据该计划,我们修改了查询,更改索引
  • 我们提供,我们认为可以帮助执行诸如连接算法取(哈希,合并或嵌套)
的选择为SQL Server提示