我们系统有三种主要的扩容方式。最简单的就是升级机器(容量更大、速度更快的硬盘,更多内存,任何成为瓶颈的部分)。

第二种方式是开启新的分片范围。虽然我们的分片ID是16位的(最多64k个分片),但是一开始我们只创建了4096个分片。新建的对象只能存储在开头的4k个分片。

某天我们决定添加新的MySQL服务器用来存储4096到8191的分片,并且开始填充数据。

最后一种方式是将一些分片移动到新的机器上。例如需要对MySQL001A(存储着0到511分片)扩容是,先新建一对主从节点(译者注:此处原文为“a new master-master pair”,可能为笔误),命名为最大的编号(比如是MySQL009A和MySQL009B),然后开始从MySQL001A复制数据

mysql单表存储数据量有上限吗?

单张表多少个字段其实没有什么定论,只要不超过数据库限定的个数就好,但是表的单条记录的大小是有合理空间的,也就是需要根据具体硬件和操作系统来确定单条记录(row size)的大小:

一般来说,现在硬盘的扇区大小都是4K(有些硬盘可以到16K),所以存储基于操作系统的MySQL单条记录的合理大小应不超过硬盘的扇区大小。如果超出意味着查找单条记录时需要多个磁盘扇区去查找,增加了寻道时间,单表数据量大了性能会下降。同时MySQL配置的缓存页大小即innodb_page_size,也要配置成硬盘扇区大小差不多大小,从而减少数据库checkpoint从缓存往磁盘写数据的工作量。

话说回来,其实这些并不十分重要,因为一般系统出现性能问题大概率是在应用程序的质量上。