水平拆分是优化数据库大表的常见方式。
拆分方式
水平拆分的一种实现方式是使用数据库本身支持的分区表特性,即多个物理子表组成一个逻辑总表。
也可以显式地 (库内)分表,或 分库。
库内分表 可以缓解单表数据量过大的问题,但对于减轻数据库服务器压力的作用不大,因为所有请求还是在争用同一服务器的资源。这时可以采用 分库。
实际使用时也可以与 垂直拆分 结合。
(《MySQL大表优化方案》)
按照用户名首字母将用户分表分为两份:A~M 和 N~Z
数据拆分原则
-
能不分就不分!
-
分片规则要慎重选择,提前规划。数据的 增长模式、访问模式、数据分片关联问题 和 扩容问题 都需认真考虑。
按数据范围分片、枚举分片、一致性Hash分片 等都是比较容易扩容的方式。
对有时效性的数据,按时间范围分片 就是一种典型的策略。
-
分片尽量少;分片尽量均匀分布在多个数据节点上。
执行SQL时,涉及的分片越多,跨分片所消