Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1677|回复: 0
打印 上一主题 下一主题

《亿级数据量系统的性能保证之分库分表》

[复制链接]

30

主题

103

帖子

376

积分

认证用户组

Rank: 5Rank: 5

积分
376
跳转到指定楼层
楼主
发表于 2019-1-19 22:05:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hshy 于 2019-1-19 22:18 编辑

《亿级数据量系统的性能保证之分库分表》
主要内容:
1,为何需要分库分表的引入
2,详解分库分表
3,学习mycat实现分库分表


业务拆分
单表数据量太大

OOD 面向对象设计
1.分模块
2.面向接口编程


分业务 分库 分表

阿里 建议 行数超过500万或大小超过2G 进行分表


分库分表详解
对数据的库表进行拆分,

分库分表  跨库查询
联表查询变成程序内写逻辑解决
drds
拆分规则
1.垂直拆分
  分布式事务 联表关联
2.水平拆分
userId%100=0
userId%100=1
..
userId%100=99
1亿分成100个100万
离散性的
连续性的

hash
时间
地区

分区还是同一个表
结果集跨多个表怎么办?

Mycat 实现分库分表
mycat.io


逻辑库
逻辑表
    分片表 用户表        
分片规则 uid%2
        全局表 数据字典 数据不常变,数据量不大,可能与其它表都有关联关系
全量copy 每个分库中都有一份
    ER表 1:n n:m n:1 关联表 用户和用户地址表,这个用户在哪个库,对应的用户地址也在那个库
即用户地址表根据用户表动态的落到同一个库上
    非分片表  只有某个业务才有的表,只放到对应的库上

节点
数据库实例,图中有两个节点

节点主机


比如现在是 2取摸 偶数 奇数在2个库 我我突然变成了10个库 取莫 也变成了10 可是 以前的数据还在那两个库 怎么搞?需要自己清洗一遍么?
节点的扩缩容  dataMigrate.sh
规则改变要清洗


原理
explain select * from user where userId=1;
id最好加上表名 如 userId,这样在配置文件中方便识别
全局id怎么生成?
只支持sql92,还与mysql有不同,有些函数mycat是不支持的
全局表 两个都查,谁先返回用谁的




Internet Communications Engine,或Ice,是ZeroC开发的一个面向对象的中间件平台。它提供了面向对象的远程过程调用、网格计算和发布/订阅功能,并有基于GPL的双许可协议和一个私有许可协议。它支持Linux、Solaris、Windows和Mac OS X等最主要的操作系统,和C++、Java、.NET语言(如C#或Visual Basic)、Objective-C、Python、PHP和Ruby等语言。

分库分表 还有其它的中间件选择吗?一般选择原则是什么?

sharding-JDBC -> shardingsphere -> ..




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 07:21 , Processed in 0.063900 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表