MySQL系列(八)--数据库分库分表
在互联网公司或者一些并发量比较大的项目,虽然有各种项目架构设计、NoSQL、MQ、ES等解决比较高的并发访问,但是对于数据库来说,压力
还是太大,这时候即使数据库架构、表结构、索引等都设计的很好了,但是还是扛不住的,主从复制通过读写分离缓解读负载。但是像淘宝这种项目,
单一数据库肯定是不行的,为了解决这个问题,就可以使用分库分表
PS:这是一篇学习博客,本人没实操过,适合作为入门了解或者面试,如果深入了解,请自行百度大佬的文章
分库分表的方式:
1、把一个实例的多个数据库拆分到不同的实例,这个实例可能是数据库集群

优缺点:
操作简单
但是如果写压力存在某个库,这样拆分还是无法解决问题
2、把一个库中的表拆分到不同的数据库
例如:把一个库中的订单表、商品表、购物车表分别拆分到不同的数据库

3、水平拆分
在前面两种情况无法解决的情况下,就要使用水平拆分
对一个库中的相关表进行水平拆分到不同实例的数据库,进行分片处理

分片处理是最后的方案,能在之前解决问题,就不要分片,分片之后会带来很多问题,也会变得复杂
分片前的准备:
分区键决定了分区后的性能,如何选择分区键:
1、分区键要能尽量避免跨分片查询的发生
2、分区键要尽可能使各个分片中的数据平均
如何存储不需要分片的表:
1、每个分片存储一份相同的数据,数据量不大且很少更新的表
2、使用额外的节点同一存储
如何在节点上部署分片:
每个分片使用单一数据库,且数据库名相同
将多个分片表存储在一个数据库中,在表名后加上分片号后缀
在一个节点中部署多个数据库,每个数据库包含一个分片
如何分配分片中的数据:
按照分区键的Hash值取模来获取分片数据
按照分区键的范围来分配分片数据,一般日期类型可以使用这种
使用分区键和分片的映射表来分配分片数据
如何生成全局ID:
使用auto_increment_increment(和分片数量一致)和auto_increment_offset参数,只适用于一个节点保存一个分片的场景
使用全局节点生成ID,先获取全局节点ID,再通过分区函数插入到对应的分片中,但是这个全局节点可能成为性能瓶颈
在Redis中创建全局ID,最优选择
可以通过工具OneProxy来进行数据库分片,本来想要手动操作的,但是发现oneProxy官网没了。。。
MySQL系列(八)--数据库分库分表的更多相关文章
- Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案
一.前言 在前面的文章Mysql系列四:数据库分库分表基础理论中,已经说过分库分表需要应对的技术难题有如下几个: 1. 分布式全局唯一id 2. 分片规则和策略 3. 跨分片技术问题 4. 跨分片事物 ...
- Mysql系列四:数据库分库分表基础理论
一.数据处理分类 1. 海量数据处理,按照使用场景主要分为两种类型: 联机事务处理(OLTP) 面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果. ...
- 转数据库分库分表(sharding)系列(二) 全局主键生成策略
本文将主要介绍一些常见的全局主键生成策略,然后重点介绍flickr使用的一种非常优秀的全局主键生成方案.关于分库分表(sharding)的拆分策略和实施细则,请参考该系列的前一篇文章:数据库分库分表( ...
- 数据库分库分表(sharding)系列【转】
原文地址:http://www.uml.org.cn/sjjm/201211212.asp数据库分库分表(sharding)系列 目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三 ...
- 数据库分库分表(sharding)系列(二) 全局主键生成策略
本文将主要介绍一些常见的全局主键生成策略,然后重点介绍flickr使用的一种非常优秀的全局主键生成方案.关于分库分表(sharding)的拆分策略和实施细则,请参考该系列的前一篇文章:数据库分库分表( ...
- 数据库分库分表(sharding)系列
数据库分库分表(sharding)系列 目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三) 关于使用框架还是自主开发以及sharding实现层面的考量 (四) 多数据源的 ...
- 【转】mysql分库分表,数据库分库分表思路
原文:https://www.cnblogs.com/butterfly100/p/9034281.html 同类参考:[转]数据库的分库分表基本思想 数据库分库分表思路 一. 数据切分 关系型数 ...
- php面试专题---mysql数据库分库分表
php面试专题---mysql数据库分库分表 一.总结 一句话总结: 通过数据切分技术将一个大的MySQLServer切分成多个小的MySQLServer,既攻克了写入性能瓶颈问题,同一时候也再一次提 ...
- 数据库分库分表(sharding)系列(一) 拆分规则
第一部分:实施策略 数据库分库分表(sharding)实施策略图解 1. 垂直切分垂直切分的依据原则是:将业务紧密,表间关联密切的表划分在一起,例如同一模块的表.结合已经准备好的数据库ER图或领域模型 ...
随机推荐
- Amazon DynamoDB
- JS流程控制语句 反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足。
反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足. while语句结构: while(判断条件) { 循环语句 } 使用w ...
- php非法输入数据类型
1.空白输入 2.超长输入(如大于256个字符) 3.特殊字符(如·!@#¥%……&*()—=|.:‘:<>;'"<>?.,) 4.控制字符(如\r\n等) ...
- Leetcode166. Fraction to Recurring Decimal分数到小数
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入: numerator ...
- 函数的作用域、作用域链以及return关键字
1.作用域 全局作用域:在函数外部使用var关键字定义的变量 局部作用域:在函数内部使用var关键字定义的变量 特点 (1)局部变量无法直接影响全局变量 (2)在局部作用域中可以使用全局作用 ...
- 如何在 Apache Flink 中使用 Python API?
本文根据 Apache Flink 系列直播课程整理而成,由 Apache Flink PMC,阿里巴巴高级技术专家 孙金城 分享.重点为大家介绍 Flink Python API 的现状及未来规划, ...
- kafka数据分区的四种策略
kafka的数据的分区 探究的是kafka的数据生产出来之后究竟落到了哪一个分区里面去了 第一种分区策略:给定了分区号,直接将数据发送到指定的分区里面去 第二种分区策略:没有给定分区号,给定数据的ke ...
- 使用Native API 创建进程
使用 Native API 创建进程 最近几个星期一直在研究这个题目.因为关于方面的资料比较多(可以看下面的参考文章),所以开始时以为很快就结束了.谁知道真正动起手来才发现有很多要考虑的地方,不过还好 ...
- SpringBoot学习笔记(五):SpringBoot集成lombok工具、SpringBoot集成Shiro安全框架
SpringBoot集成lombok工具 什么是lombok? 自动生成setget方法,构造函数,打印日志 官网:http://projectlombok.org/features/index. 平 ...
- PAT甲级——A1067 Sort with Swap(0, i)
Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order ...