php:创建自动数据库分片逻辑?

时间:2010-08-13 18:21:46

标签: php mysql relational-database sharding

我刚刚提出了以下想法,但我不知道它是否适用于生产应用程序。

我们有一个基于PHP / mySQL的Web应用程序,可以轻松实现。数据库中的表容易变大 - 容易增加几百万个记录,因此表分片可能是一个选项。

以下是我想象这个过程的工作方式:

缓存文件包含一个包含数据库中可用表的列表。每个表最多包含一百万行,当达到该值时,将在构建新表后重新创建缓存列表。

显然,检查每次写入表的行数都不是一个好主意,所以这可以在设定的时间间隔内完成,例如一周或每天 - 取决于每百万数据的速度有多快已创建。

这是处理大量数据和保持索引大小相当低的好方法吗?

由于

4 个答案:

答案 0 :(得分:3)

如果你正在计划提前实现巨大增长的可能性(例如游戏已经病毒化),你可以按照你之前的步骤进行NoSQL。

Couchbase /支持Zinga(并且是个人最爱) Apache Cassandra / powers Twitter mongoDB / powers Craiglist

但是你正在 php / MySQL中建立一个网站,以“轻松实现”所以不要重新发明一个非常大的问题。< / p>

不要弄乱数据。寻求经过验证的解决方案。包括MySQL。

答案 1 :(得分:2)

你应该使用水平分区,按记录数分区表,假设每个分区都有一百万条记录,那样mysql将在内部处理分区,而且除了一个大索引之外,索引将被分区同样。

在此处阅读更多http://dev.mysql.com/tech-resources/articles/performance-partitioning.html

答案 2 :(得分:1)

说实话,我认为那不是一个好主意。您应该研究可能存档旧数据或转到像MOngo这样的NoSQL解决方案。

答案 3 :(得分:1)

索引的性能不会随着表的大小线性降低。在成为问题之前,表必须非常庞大。如果你看到性能问题,我会开始做mysql'解释',并确保你的所有查询都进行了最少量的行扫描。你可能会对实际的瓶颈最终感到惊讶。

所以,基本上,如果你需要数据,我就不会搞砸它。另一方面,如果它类似于会话数据,只需删除太旧的行。