
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
分库分表是程序员在做数据库性能优化的时候会经常用到的一个优化方法,而本文我们就通过案例分析来简单了解一下,分库分表概念与实践策略分享。
水平切分
水平切分又称为Sharding,它是将同一个表中的记录拆分到多个结构相同的表中。
当一个表的数据不断增多时,Sharding是必然的选择,它可以将数据分布到集群的不同节点上,从而缓存单个数据库的压力。
垂直切分
垂直切分是将一张表按列分成多个表,通常是按照列的关系密集程度进行切分,也可以利用垂直气氛将经常被使用的列喝不经常被使用的列切分到不同的表中。
在数据库的层面使用垂直切分将按数据库中表的密集程度部署到不通的库中,例如将原来电商数据部署库垂直切分称商品数据库、用户数据库等。
Sharding策略
哈希取模:hash(key)%N
范围:可以是ID范围也可以是时间范围
映射表:使用单独的一个数据库来存储映射关系
Sharding存在的问题
事务问题
使用分布式事务来解决,比如XA接口
连接
可以将原来的连接分解成多个单表查询,然后在用户程序中进行连接。
主从复制
主要涉及三个线程:binlog线程、I/O线程和SQL线程。
binlog线程:负责将主服务器上的数据更改写入二进制日志(Binarylog)中。
I/O线程:负责从主服务器上读取-二进制日志,并写入从服务器的中继日志(Relaylog)。
SQL线程:负责读取中继日志,解析出主服务器已经执行的数据更改并在从服务器中重放(Replay)。
读写分离
主服务器处理写操作以及实时性要求比较高的读操作,而从服务器处理读操作。
读写分离能提高性能的原因在于:
主从服务器负责各自的读和写,极大程度缓解了锁的争用;
从服务器可以使用MyISAM,提升查询性能以及节约系统开销;
增加冗余,提高可用性。
读写分离常用代理方式来实现,代理服务器接收应用层传来的读写请求,然后决定转发到哪个服务器。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。