db 分库分表分区系统知识

来源:互联网 发布:cx域名不值钱吗 编辑:程序博客网 时间:2024/06/04 00:05

不分库分表害处

扩展性差
单机宕机对用户影响极大
高并发 性能瓶颈

why

互联网,每天几十亿的pv对数据库很大的负载
数据量足够大 单服务器资源(cpu 磁盘 内存 io 负载)有限 单数据库扩展能力有限
单表几百万以上的查询 时间将变长 用户体验变差

概念

分库:
分表:提高单表的存取数据时,mysql本身的并发性能。
都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件。
分区: 仍旧是一张表 数据存放在了不同的区块 。通过提高磁盘读写性能,提升mysql的处理能力。对业务程序透明。

db设计的时候要考虑:
单表容纳数据量 1000万-5000万
什么时候应该分库分表

一个系统设计的时候 ,瓶颈要发现是进程socket数瓶颈 还是进程本身运算开销瓶颈 or 是db 瓶颈

怎么做

垂直切分 :按照功能模块 字段关系密切程度 切换成不同的表 难度较小 表重新设计 相当于重构。

水平切分:只是数据切分,表数据按id索引取模 切分 表结构相同。

    通过一系列的切分规则将数据水平分布到不同的DB或table中,在通过相应的DB路由 或者 table路由规则找到需要查询的具体的DB或者table,以进行Query操作。

技术难点

负载均衡策略 &db table路由规则
数据库集群方案

分布式数据方案提供功能如下:
(1)提供分库规则和路由规则(RouteRule简称RR)
(2)引入集群(Group)的概念,保证数据的高可用性;
(3)引入负载均衡策略(LoadBalancePolicy简称LB);
(4)引入集群节点可用性探测机制,对单点机器的可用性进行定时的侦测,以保证LB策略的正确实施,以确保系统的高度稳定性;
(5)引入读/写分离,提高数据的查询速度;

分布式数据库设计 ,
分库路由服务
访问缓存服务
数据库中间件

建议

在大规模并发的业务上,尽量做到在线查询和离线查询隔离,交易查询和运营/客服查询隔离。

------
[1].http://www.infoq.com/cn/articles/summary-and-key-steps-of-vip-orders-depots-table

原创粉丝点击