MySQL分库分表
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,分库分表的种类:这里说的分库分表是把数据库中的数据物理地拆分到多个实例或者多台服务器上,而不是MySQL原生的Partitioining。MySQL官方的Partitioning可以将一张表的数据库分
千家信息网最后更新 2024年11月11日MySQL分库分表分库分表的种类:
这里说的分库分表是把数据库中的数据物理地拆分到多个实例或者多台服务器上,而不是MySQL原生的Partitioining。
MySQL官方的Partitioning可以将一张表的数据库分别存储为多个文件,如果在写SQL的时候遵从了分区规则,就能把原本需要遍历全表的工作转化为只需要遍历表里一个或者部分分区的工作,这样就降低了查询对服务器的压力。但是这样不管怎么分区,所有数据都在一个服务器上边,没有办法通过水平扩展物理服务的方法把压力分摊出去。
垂直拆分:
考虑数据库拆分的时候,首先考虑垂直拆分,其次考虑水平拆分。垂直拆分可以理解为分出来的库表结构是互相独立各不相同的。
1)如果有多个业务,业务之间的关联性不大,就可以把不同业务拆分为单独的实例,库或表。
2)如果在一个实例上边,有多个数据库,可以把每个数据库拆分到单独的实例上。
3)如果一个库中有多张表,可以把每张表拆分到不同的实例上。
4)如果有一张表,但表里字段太多,当表太大的时候,可以把每个或者几个字段拆分为一个表。
水平拆分:
水平拆分是针对一张表说的,在经过垂直拆分之后,如果表的数据库依然过大,例如注册用户量超过10亿,那只好通过某种算法进行水平拆分。拆分之后结果是多张具有相同表结构的表,每张表里存储一部分数据。拆分的方法依据很多,例如通过取模100、2014等。
分库分表的原则:
原则零:能不分就不分
如果能对系统进行升级来提升数据库的性能,例如升级硬盘、cpu、内存、网络、数据库版本、读写分离、负载均衡等方面解决问题,就不要做分表分库。也就是说做分表分库的前提是这些已经做好了。
原则一:数据量太大,正常的运维影响正常的业务访问。
1)对数据库的备份,如单个表太大,做数据库备份的时候需要大量的磁盘IO或者网络IO资源。
2)对数据表的修改,如表数据库太大,做DDL时候会对表加锁,这个时间会很长。
3)整个表的热点数据,如某表的user_last_login字段,频繁进行update操作,导致此表压力过大。
原则二:表设计不合理,对某些字段垂直拆分
1)用户数从100万飙升到10亿,user_last_login字段不断被update,最好的办法就是把该字段垂直拆分出去。
2)用户表的person_info 表本来没什么用,但是有些用户会把个人信息填写的分成完善,更糟糕的是产品经理心血来潮,要把该字段开放,其他所有人都可以访问,而该字段的类型是text,这个必须要进行拆分。
原则三:某些数据出现了无穷尽的增长
比如聊天系统的聊天记录,充值系统的充值记录等等。
原则四:安全性和可用性的考虑
不要把所有鸡蛋都放在一个篮子里,我们不希望数据库出问题,或者不希望100%的用户受到影响。如把用户、库存、订单等本来统一的资源进行拆分。
原则五:业务耦合性考虑
火车票业务和烤羊腿业务不沾边,完全可以拆分为不同的数据库。
这里说的分库分表是把数据库中的数据物理地拆分到多个实例或者多台服务器上,而不是MySQL原生的Partitioining。
MySQL官方的Partitioning可以将一张表的数据库分别存储为多个文件,如果在写SQL的时候遵从了分区规则,就能把原本需要遍历全表的工作转化为只需要遍历表里一个或者部分分区的工作,这样就降低了查询对服务器的压力。但是这样不管怎么分区,所有数据都在一个服务器上边,没有办法通过水平扩展物理服务的方法把压力分摊出去。
垂直拆分:
考虑数据库拆分的时候,首先考虑垂直拆分,其次考虑水平拆分。垂直拆分可以理解为分出来的库表结构是互相独立各不相同的。
1)如果有多个业务,业务之间的关联性不大,就可以把不同业务拆分为单独的实例,库或表。
2)如果在一个实例上边,有多个数据库,可以把每个数据库拆分到单独的实例上。
3)如果一个库中有多张表,可以把每张表拆分到不同的实例上。
4)如果有一张表,但表里字段太多,当表太大的时候,可以把每个或者几个字段拆分为一个表。
水平拆分:
水平拆分是针对一张表说的,在经过垂直拆分之后,如果表的数据库依然过大,例如注册用户量超过10亿,那只好通过某种算法进行水平拆分。拆分之后结果是多张具有相同表结构的表,每张表里存储一部分数据。拆分的方法依据很多,例如通过取模100、2014等。
分库分表的原则:
原则零:能不分就不分
如果能对系统进行升级来提升数据库的性能,例如升级硬盘、cpu、内存、网络、数据库版本、读写分离、负载均衡等方面解决问题,就不要做分表分库。也就是说做分表分库的前提是这些已经做好了。
原则一:数据量太大,正常的运维影响正常的业务访问。
1)对数据库的备份,如单个表太大,做数据库备份的时候需要大量的磁盘IO或者网络IO资源。
2)对数据表的修改,如表数据库太大,做DDL时候会对表加锁,这个时间会很长。
3)整个表的热点数据,如某表的user_last_login字段,频繁进行update操作,导致此表压力过大。
原则二:表设计不合理,对某些字段垂直拆分
1)用户数从100万飙升到10亿,user_last_login字段不断被update,最好的办法就是把该字段垂直拆分出去。
2)用户表的person_info 表本来没什么用,但是有些用户会把个人信息填写的分成完善,更糟糕的是产品经理心血来潮,要把该字段开放,其他所有人都可以访问,而该字段的类型是text,这个必须要进行拆分。
原则三:某些数据出现了无穷尽的增长
比如聊天系统的聊天记录,充值系统的充值记录等等。
原则四:安全性和可用性的考虑
不要把所有鸡蛋都放在一个篮子里,我们不希望数据库出问题,或者不希望100%的用户受到影响。如把用户、库存、订单等本来统一的资源进行拆分。
原则五:业务耦合性考虑
火车票业务和烤羊腿业务不沾边,完全可以拆分为不同的数据库。
数据
数据库
字段
业务
原则
用户
分库
分表
实例
水平
多个
时候
服务
不同
压力
服务器
系统
表里
相同
上边
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
幻塔渠道服服务器有几个
天龙八部私服登录器数据库
关于网络安全的简易漫画横版
ipfs互联网科技巨头谷歌
长沙喜智软件开发有限公司
架设ftp服务器
华科网络安全学院怎么样
网络安全和信息化工作的
自己服务器怎么备案
数据库中勒索病毒付费
学校网络安全应用预案
网络经济属于网络技术发展阶段吗
数学不好能学软件开发
普通台式机可以服务器系统吗
共筑网络安全内容
网络安全教育违法吗
怎么找出差异数据库
地平线4拍卖场服务器
提升市场的管理与服务器
域网服务器管理
linux服务器停止重启
qq代理服务器ip和端口
cepii数据库哪个代表中国
服务器装系统c盘内存驱动
臻云服务器
olt关键网络技术是什么
互联网 高校科技
维护网络安全要更细心更小心
ps4注册账号服务器连接超时
域网服务器管理