1. 分库分表是为了解决什么问题
分库分表的目的就是为了解决由于数据量过而导致数据库性能降低的问题,将原来独立的数据库拆分为若干数据库组成,将数据大表拆分成若干数据表,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的,简单来说,就是为了缓解数据库的压力,最大限度提高数据操作的效率
2.分库分表 是如何实现的
将原来的数据库拆分为若干个数据库组,将原来独立的表拆分为数据表组,是单一数据库数据表的数据量变小,从而达到提升数据库性能的效果
3.分库分表的方式
垂直分库:按照业务类型分库
好处:解决业务层面的耦合,业务清晰;能对不同业务的数据经行分级管理、维护、监控、扩展等;高并发场景下垂直分库一定程度的提升IO、降低单机硬件资源的瓶颈
水平分库:把同一个表的数据按一定规则拆分到不同的数据库中,每个库可以·放在不同的服务器上
好处:解决了单库大数据,高并发的性能瓶颈;提高了系统的稳定性以及可用性
垂直分表:按照字段分表
好处:充分发挥热门数据的操作效率,确保高效率操作不会被低效率操作所拖累
垂直拆分的原则:
把不常用的字段单独放在一张表;把text,blob等大字段拆分出来放在附表中;经常组合查询的列放在一张表中;
水平分表:在同一个数据库内,把同一个表的数据按照一定规则拆到多个表中
好处:优化了单一表数据量过大儿产生的性能问题
一般来说,在系统设计阶段就应该根据业务耦合松紧来确定垂直分库,垂直分表方案,在数据量及访问压力不是特别大的情况,首先考虑缓存、读写分离、索引技术等方案。若数据量极大,且持续增长,再考虑水平分库水平分表
4.项目分库分表的方案
hash方式:
优点:数据均匀
缺点:扩容需要做数据迁移
rang方式(范围方式):
优点:扩容不需要做数据迁移
缺点:存在热点数据,前期访问的是同一数据库,容易使数据全部打在第一张表上
综合方案:
根据用户id哈希分库
根据订单范围分表