数据库分库分表
分表分库解决的问题
- 分表分库就是为了解决数据量过大导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据达标拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的
分库分表方式
- 垂直分表:把一个宽表的字段安访问频次、是否大字段的原则拆分成多个表
- 垂直分库:把多个表按业务耦合松紧归类,分别存放在不同的库,这些库可以分布在不同服务器,从而使访问压力被多台服务器负载,大大提升性能,同时能提高整体架构的业务清晰度,不同的业务库可以根据自身情况定制优化方案
- 水平分库:可以把一个表的数据(按数据行)拆分成不同的库,每个库只有这个表的部分数据,这些库可以分布在不同数据库,从而使访问压力被多态服务器负载,大大提升性能
- 水平分表:把一个表的数据(按数据行)拆分成同一个数据库的多张表中,每个表只有这个表的部分数据,这样做能小幅提升性能,仅仅作为水平分库的一个补充优化
- 一般来说,在系统设计阶段就应该根据业务耦合松紧来确定垂直分库、垂直分表方案,在数据量及访问压力不是特别大的情况,首先考虑缓存、读写分离、索引技术等方案。若数据量极大,且持续增长,再考虑水平分库、水平分表方案
分库分表带来的问题
- 由于数据分散在多个数据库,服务器导致了事务一致性问题,跨界点Join问题、跨界点分页、排序、函数,主键需要全局唯一,公共表问题