初入数据库分库分表

参考:

1,分区、分表、分库

 分区分表分库
直接含义将一张表的数据分成N多块区域将一张表分为N多小表将储存在一个库的数据分块储存在多个库上
实现方式
(每张完整的表包含.MYD数据文件、.MYI索引文件、.frm表结构文件)
user#P#P1.MYD
user#P#P1.MYI
user#P#P2.MYD
user#P#P2.MYI
user.frm
user.par
alluser.MRG
alluser.frm
user1.MYD
user1.MYI
user1.frm
user2.MYD
user2.MYI
user2.frm
(alluser总表,分为user1和user2)
在物理实现上分成多个服务器,不同的分库在不同的服务器上
数据处理将存放数据的文件分成多个小块;表还是一张表数据存放在分表中,总表只是外壳 
提高性能1,突破磁盘I/O瓶颈(多核CPU同时对磁盘进行操作)1,提高单表并发(分成多个小表,锁表对象缩小)
2,磁盘I/O性能提高(分成多个索引文件,索引文件缩小)
 
实现难度建立分区表,对开发者透明;和平常建表没区别多种,并且需要修改代码 
解决的问题提示查询效率单次查询时间缩短
读写锁影响的数据量变小
插入数据库需要重新建立的索引的数据减少
 
    

2, 切分方案
 垂直切分水平切分
直接含义将表按照功能模块,关系密切程度切分出来,部署到不同的库上当一个表中的数据量过大时,可以按照某种规则,将表进行划分,然后储存到多个结构相同的表和不同库上
简要案例例如建立定义数据库workDB、商品数据库payDB、用户数据库userDB、日志数据库logDB;分别用于储存项目数据定义表、商品定义表、用户数据表、日志数据表等例如:userDB中可以按照userID散列、性别、省份等进行划分
优点拆分后业务清晰,拆分规则明确
系统之间整合或扩展容易
数据维护简单
单表数据减少,增加高并发的性能瓶颈
应用端改造较少,提高系统的稳定性和负载能力
缺点事务处理复杂
部分业务表无法join
分片事务一致性难以解决
数据多次扩展难度跟维护量大
跨库join性能
   
切分原则
1) 能不切分尽量不要切分
2) 如果必须切分,选择合适的切分规则,并提前规划好
3) 数据切分尽量通过数据冗余或分组,降低跨库join的可能
4) 由于数据库中间件对数据join实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量少使用多表join

3, 分表分库带来的问题
1) 事务问题
    在执行分库分表后,由于数据储存到了不同的库上,数据库事务管理垂涎了困难。如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价;如果由应用程序去协助控制,形成打的程序逻辑上的事务,会造成编程上的负担
2) 跨库跨表的join问题
    在执行分库分表后,难以避免会将原本逻辑关联性很强的数据划分到不同打的表、不同的库上,这时表的关联操作将会受到限制,无法join位于不同分库的表,也无法join分表粒度不同的表,结果原本一次查询就能完成的业务,可能需要多次查询才能完成
3) 额外的数据管理负担和数据运算压力
    额外的数据管理负担,类似数据的定位问题、数据的增删改查的重复执行问题,都可以通过应用程序解决,但必然引起额外的逻辑运算。例如:需要查询前100名,在分表之前只需要一个order by语句就能完成;分表后,需要n个order by语句,然后再对这些数据进行合并计算。

4,附录
1) join
    根据两个或多个表中的列之间的关系,从这些表中查询数据



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值