合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
>[info] 分库分表场景要求 **不到万不得已,不会轻易去订单分库分表:** 因为分库分表会产生诸如分布式事务以及多表查询和统计等等问题。 在分库分表前,你先尝试用nosql和搜索引擎或读写分离或mysql分区去解决,如果这些都解决不了,才 不得不用分库分表。 >[info] 为什么需要分库分表 1. 表太大了,超过5000万可能就是msyql瓶颈了,到底多少万,要综合考虑 **字段个数** 以及 **硬件配置** 和应用优化度 2. 加速查询,原因∶ 2.1 大表变小表,小表快。 2.2 压力被分散到各个库和表,压力小了自然快。 3. 降低压力降低负载,一个库负载压力变成多个库共同承担 4. 容灾,如果没分库分表,一但单库挂了,就所有数据都操作不了了。但是这个不是从根本上解决容灾,只是有—定作用(数据分片)。 >[info] 分表 比如你单表都几千万数据了,你确定你能扛住么?绝对不行,单表数据量太大,会极大影响你的 sql 执 行的性能,到了后面你的 sql 可能就跑的很慢了。一般来说,就以我的经验来看,单表到几百万的时 候,性能就会相对差一些了,你就得分表了。 **1. 分表是啥意思?** 就是把一个表的数据放到多个表中,然后查询的时候你就查一个表。比如按照用户 id 来分表,将一个用 户的数据就放在一个表中。然后操作的时候你对一个用户就操作那个表就好了。这样可以控制每个表的 数据量在可控的范围内,比如每个表就固定在 200 万以内。 **2. 怎么拆分?** 大表拆分为小表 ![](https://img.kancloud.cn/fd/1e/fd1ea3827b76b507c20b6679b686b6af_796x655.png) >[info] 分库 **1. 分库是啥意思?** 就是你一个库一般我们经验而言,最多支撑到并发 2000,一定要扩容了,而且一个健康 的单库并发值你最好保持在每秒 1000 左右,不要太大。那么你可以将一个库的数据拆分到多个库中, 访问的时候就访问一个库好了。 ![](https://img.kancloud.cn/bc/73/bc73441b52da2268b8de80165485a5a8_758x260.png) **2. 怎么进行分库** **数据库以业务实体来进行划分设计:** 即根据业务进行垂直拆分。原来的表在一个数据库中,根据表来存 储管理各业务数据。现在业务数据以数据库为单位来管理存储。 ![](https://img.kancloud.cn/c4/ac/c4ac2f4cf06bf8dc23edfb774abddfb6_781x647.png) >[info] 分库分表原理 分库分表就是把网站数据根据相关的规则拆分到不同的库与不同的表中。当业务需要的时候,再根据拆分规则去到对应数据库中进行数据的获取。最后进行SQL条件的查询匹配。 **那应该按照什么规则来对数据进行拆分呢?** 1. **水平拆分:** 根据业务表中指定的数据范围来进行数据拆分。 **优点:** 1.1 每张表的订单数量是均匀的,所以压力分配比较合理。 1.2 拓展性好。后面不需要做架构调整了,一个拆分架构方案用几十年。 **缺点:** 1.3 插入数据时太集中 1.4 假设—张表存100万,现在插入的最大id是288万,那么这个插入是在那张表? 2. **hash取模:** 指定数据表中的某字段来进行取模运算。根据取模结果把数据划分到不同的数据表。 2.1 **优点:** 数据分配均匀,不会出现集中插入。 2.2 **缺点:** 拓展性不好,迁移数据时需要重新进行hash运算。 ![](https://img.kancloud.cn/f4/3b/f43b0041127c18f3223b358715a2e7ca_771x520.png) 每次查找数据,需要取模计算,得到对应的值,在根据值来找到对应的数据表。**如果你不想取模找库**, **你可以增加配置文件**,里面保存了**库和表的映射关系**。通过这种方式,你只需要知道表名,就能通过库 和表的映射关系获得库名。 >[info] 大数据量拆分流程 1. 垂直拆库 2. 水平分表 3. 库表扩容