拆分2000万条记录数据库

时间:2009-11-06 12:03:17

标签: php mysql

我有一个美国公司数据库,有2000万条记录。首先,它们不是大型RAM数据库服务器的预算。所以我认为我将不得不将数据库拆分成4个部分按州分组。

我的问题是如何用PHP处理这个问题的最佳方法,我在想用户查询查找状态然后指向相关的数据库?有什么想法吗?

3 个答案:

答案 0 :(得分:5)

我认为您需要查看MySQL partitioning

答案 1 :(得分:1)

听起来你可能想要考虑分片。

不确定您是否使用ORM进行数据访问,但其中一些支持分片。关于php和mySQL的分片的一些信息:

http://highscalability.com/database-sharding-netlog-mysql-and-php

刚刚意识到 - 链接缺失到最后一个网址中的实际文章...试试这里:http://www.jurriaanpersyn.com/archives/2009/02/12/database-sharding-at-netlog-with-mysql-and-php/

答案 2 :(得分:0)

所有这些操作都不需要PHP。也许生成SQL代码。最好将SQL脚本从原始表复制到新表中。如果您还不熟悉它们,请参阅“INSERT ... SELECT ...”和“CREATE TABLE ... AS SELECT ...”。

如果你有MySQL> = 5.1,那么尝试分区表,以便任何请求只能访问1个分区。

  • 如果用户仅需要1个州的信息,请按州进行分区。可能有很多分区没有开销工作。如果用户只能看到某个时间范围,例如Webalizer中的月份图,按月分区等等。

还考虑创建聚合表。让我详细说明:在数据仓库中,指标属性之间存在区别。

  • attribute是一列告诉 >
  • metric告诉多少多少

聚合表的详细程度较低:属性较少(没有地理信息,或者没有产品信息),或者整个表中的属性高于某些步骤(只是状态而不是城市+州,年月而不是日期,等等。)

最后一项:确保您的用户真正需要详细的旧数据。一些数据在几年内变得无关紧要。例如,网站推荐人在1 - 2年后没有任何意义,因为大多数网站都有变化。 2年的网站流量数据可以只是一些每日/每月图表。