我有一个美国公司数据库,有2000万条记录。首先,它们不是大型RAM数据库服务器的预算。所以我认为我将不得不将数据库拆分成4个部分按州分组。
我的问题是如何用PHP处理这个问题的最佳方法,我在想用户查询查找状态然后指向相关的数据库?有什么想法吗?
答案 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个分区。
还考虑创建聚合表。让我详细说明:在数据仓库中,指标和属性之间存在区别。
attribute
是一列告诉 > metric
告诉多少,多少。聚合表的详细程度较低:属性较少(没有地理信息,或者没有产品信息),或者整个表中的属性高于某些步骤(只是状态而不是城市+州,年月而不是日期,等等。)
最后一项:确保您的用户真正需要详细的旧数据。一些数据在几年内变得无关紧要。例如,网站推荐人在1 - 2年后没有任何意义,因为大多数网站都有变化。 2年的网站流量数据可以只是一些每日/每月图表。