读写分离方案&分库分表方案
-
读写分离方案
海量数据的存储及访问,通过对数据库进行读写分离,来提升数据的处理能力。读写分离的方案特点是:数据库产生多个副本,数据库的写操作都集中在一个数据库上,但是一些读操作呢 可以分解到其他数据库上。这样只需付出数据复制的成本,就可以保证master的处理压力分散到多个slave上 ,很好的提升master的数据处理能力
优点:所有的slave 都有数据库的副本,因此master的特性都可以实现。部分slave宕机 不影响master对外提供服务。
缺点:数据的<复制同步>是一个问题,必须考虑数据的迟滞性
-
数据分区方案
原先所有的数据都是在一个数据库上,网络IO 即文件IO 都集中在在单个数据库上,因此 CPU、内存、文件IO、网络IO 必成为系统瓶颈。 所谓分区就是把某一个某几个相关的数据放在一个独立的数据库上,这样就可以把CPU、内存、文件IO、网络IO 分解到多个机器中,从而提升系统的处理能力。
优点:不存在数据副本复制
缺点:分区策略必须经过考虑,避免各个分区间的数据存在关联关系。如果某个分区宕机,会影响系统的使用
-
数据分表方案
当单表的数据量达到一定量级的时候必须把该表的数据按照分库原则分散到多个数据表当中。即 一个大表变成N个小表,不同的分表中数据不重复,从而提高数据处理能力
优点:不存在数据副本复制
缺点:分表间的数据很少进行 集合操作;分表都是单点,如果某个分表宕机 ,并且 访问的数据不在该分表中,那么业务不影响
3.1. 分表的两种方案
-
同库分表(分表)
所有的分表都存在一个数据库中,因此表名必须不一致
优点:由于都在同一个数据库中,因此 公共表不需要复制
缺点:由于在同一个数据库中,主机的CPU、内存、文件IO、网络IO压力仍无法解决,只能单纯的降低单表的数据量。表名不一致后续的处理工作及其复杂
-
不同库分表(分库分表)
所有分表都存在于不同的数据库中,因此可以使用相同的表名
优点:CPU、内存、文件IO、网络IO 可以很好地解决。表名一致 后续处理相对简单
缺点:各个分表都需要使用公共表,因此公共表需要 复制同步
-
混合方案
2.在订单表中(分库分表),有70%查询是通过主键和userId字段查询(userId是分库分表策略字段),
有20%要通过order_num(订单号)查数据,请问order_num(订单号)要怎么设计才能快速找到订单记录是在哪个库的哪个表?
对于通过 order_num 访问的问题,建议设计一个全局主键,主键的最后四位
分别是库序号(2 位)和表序号(2 位)。
中间变量=order_num/(库数量*表数量)
库序号=中间变量/每个库中表的数量
表的序号=中间变量%每个库中表的数量
这样根据主键的最后四位就可以迅速找到记录在哪个库的哪个表中
有10%是非主键字段(比如:字段、渠道、商品,档期,品牌,收件人信息、金额等字段)去查记录,非主键字段要怎么设计才能快带定位到记录?
创建时间:2021-12-22 11:35
넶浏览量:0