数据库分库分表最佳实践附源码
更多摄影技巧 第一时间直达
第一种:磁盘读 IO 瓶颈,热点数据太多,数据库缓存放不下,每次查询会产生大量的 IO,降低查询速度→分库和垂直分表;
第二种:网络 IO 瓶颈,请求的数据太多,网络带宽不够→分库。
第一种:SQL 问题:如 SQL 中包含 join,group by,order by,非索引字段条件查询等,增加 CPU 运算的操作→SQL 优化,建立合适的索引,在业务 Service 层进行业务计算;
第二种:单表数据量太大,查询时扫描的行太多,SQL 效率低,增加 CPU 运算的操作→水平分表。
每个库的结构都一样;
每个库中的数据不一样,没有交集;
所有库的数据并集是全量数据。
每个表的结构都一样;
每个表的数据不一样,没有交集,所有表的并集是全量数据。
每个库的结构都不一样;
每个库的数据也不一样,没有交集;
所有库的并集是全量数据。
每个表的结构不一样;
每个表的数据也不一样,一般来说,每个表的字段至少有一列交集,一般是主键,用于关联数据;
所有表的并集是全量数据。
Sharding-JDBC
TSharding
Atlas
Cobar
MyCAT
Oceanus
Vitess
第一位未使用;
接下来的 41 位是毫秒级时间,41 位的长度可以表示 69 年的时间;
5 位 datacenterId,5 位 workerId。10 位长度最多支持部署 1024 个节点;
最后 12 位是毫秒内计数,12 位的计数顺序号支持每个节点每毫秒产生 4096 个 ID 序列。
对数据库备份,如果单表太大,备份时需要大量的磁盘 IO 和网络 IO;
对一个很大的表做 DDL,MySQL会锁住整个表,这个时间会很长,这段时间业务不能访问此表,影响很大;
大表经常访问和更新,就更有可能出现锁等待。
参考资料
-
http:///www.cnblogs.com/butterfly100/p/9034281.html
https://www.cnblogs.com/littlecharacter/p/9342129.html