Please enable JavaScript.
Coggle requires JavaScript to display documents.
数据库读写分离实现 (主机负责读写操作,从机负责读操作, 业务服务器将写操作发送给主机,将读操作发送给从机, 主机通过复制将数据同步到从机,每台数据…
数据库读写分离实现
主机负责读写操作,从机负责读操作
业务服务器将写操作发送给主机,将读操作发送给从机
主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据
数据库搭建主从集群,一主一从,一主多从
数据库中间件
Cobar
TDDL,即淘宝分布式数据层,它是一套分布式数据访问引擎。淘宝一个基于客户端的数据库中间件产品;基于JDBC规范,没有server,以client-jar的形式存在
MySql Router
MyCat,社区活跃
Amoeba
读写分离复制延迟问题解决方案
读从机失败后再读一次主机
关键业务读写操作全部指向主机,非关键业务指向从机
写操作后的读操作指定发给数据库主服务器
分库分表原因
数据文件会变得很大,数据库备份和恢复需要耗费很长的时间
数据量太大,读写的性能下降,即使有索引,索引也变得很大,性能同样下降
数据文件越大,极端情况下丢失数据的风险越高(机房火灾导致主备机都发生故障)
业务分库问题
事务问题
成本问题
join操作问题
分表
水平分表:适合表行数特别大的表,比如表行数据超过5000万,这个数字只是参考,并没有绝对的标准。
复杂性
路由
hash路由
配置路由
范围路由
count操作:采用记录数表,包含table_name\row_count两个字段,每次插入或删除子表数据成功后,都更新“记录数据”。
order by操作: 只能由业务代码或数据库中间件分别查询每个子表中的数据,然后汇总进行排序
join操作:需要业务代码或中间件中进行多次join查询,然后将结果合并
垂直分表:将表中不常用且占了大量空间的列拆分出去。 引入的复杂性主要表现在表的操作数量将要增加。
分库分表实现
程序代码封装
特点
每个编程语言都要自己实现一次,无法通用
故障情况下,如果主从切换,则可能需要所有系统都要修改配置并重新启动
实现简单,可以根据业务做较多定制化功能
淘宝的TDDL,具有主备、读写、动态数据库配置等功能
中间件封装
特点
支持完整的SQL语法和数据库服务器协议
数据库中间件自己不执行真正的读写操作,所有数据库的操作请求都要经过中间件,中间件的新能要求很高
能支持多种编程语言
数据库主从切换对业务服务器无感知,数据库中间件可以探测数据库服务器的主从状态。