在互联网公司或者一些并发量比较大的项目,虽然有各种项目架构设计、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系列(八)--数据库分库分表的更多相关文章

  1. Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案

    一.前言 在前面的文章Mysql系列四:数据库分库分表基础理论中,已经说过分库分表需要应对的技术难题有如下几个: 1. 分布式全局唯一id 2. 分片规则和策略 3. 跨分片技术问题 4. 跨分片事物 ...

  2. Mysql系列四:数据库分库分表基础理论

    一.数据处理分类 1. 海量数据处理,按照使用场景主要分为两种类型: 联机事务处理(OLTP) 面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果. ...

  3. 转数据库分库分表(sharding)系列(二) 全局主键生成策略

    本文将主要介绍一些常见的全局主键生成策略,然后重点介绍flickr使用的一种非常优秀的全局主键生成方案.关于分库分表(sharding)的拆分策略和实施细则,请参考该系列的前一篇文章:数据库分库分表( ...

  4. 数据库分库分表(sharding)系列【转】

    原文地址:http://www.uml.org.cn/sjjm/201211212.asp数据库分库分表(sharding)系列 目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三 ...

  5. 数据库分库分表(sharding)系列(二) 全局主键生成策略

    本文将主要介绍一些常见的全局主键生成策略,然后重点介绍flickr使用的一种非常优秀的全局主键生成方案.关于分库分表(sharding)的拆分策略和实施细则,请参考该系列的前一篇文章:数据库分库分表( ...

  6. 数据库分库分表(sharding)系列

    数据库分库分表(sharding)系列     目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三) 关于使用框架还是自主开发以及sharding实现层面的考量 (四) 多数据源的 ...

  7. 【转】mysql分库分表,数据库分库分表思路

    原文:https://www.cnblogs.com/butterfly100/p/9034281.html 同类参考:[转]数据库的分库分表基本思想 数据库分库分表思路   一. 数据切分 关系型数 ...

  8. php面试专题---mysql数据库分库分表

    php面试专题---mysql数据库分库分表 一.总结 一句话总结: 通过数据切分技术将一个大的MySQLServer切分成多个小的MySQLServer,既攻克了写入性能瓶颈问题,同一时候也再一次提 ...

  9. 数据库分库分表(sharding)系列(一) 拆分规则

    第一部分:实施策略 数据库分库分表(sharding)实施策略图解 1. 垂直切分垂直切分的依据原则是:将业务紧密,表间关联密切的表划分在一起,例如同一模块的表.结合已经准备好的数据库ER图或领域模型 ...

随机推荐

  1. grep 查看前后几行和参数匹配

    如果在只是想匹配模式的上下几行,grep可以实现.   grep -5 'parttern' inputfile //打印匹配行的前后5行 grep -C 5 'parttern' inputfile ...

  2. mac brew nginx php php-fpm xdebug

    /usr/local/opt/nginx/bin/nginx -v brew services restart nginx sudo /usr/local/sbin/php-fpm --fpm-con ...

  3. JS流程控制语句 反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足。

    反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足. while语句结构: while(判断条件) { 循环语句 } 使用w ...

  4. 制作windows10系统启动U盘,从零开始。

    1.打开百度,搜索windows下载,选个这个点击进去. 2.会看到下图,然后点击立即下载工具按钮. 3.接下来由于网络的原因,可能需要漫长的等待.会下载一个MediaCreationTool1903 ...

  5. 来杭州云栖大会,全面了解企业如何实现云上IT治理

    企业上云的现状与趋势 云计算,如今已经成为了像水和电一般关系到国计民生的国家基础设施.云计算为企业带了前所未有的资源交付效率和运维效率的提升,同时也用全新的技术帮助企业在新的价值网络中创造新的商业赛道 ...

  6. BCB怎么调用DLL中的函数

    推荐你看<BCB编写DLL终极手册>这篇文章如下片段:二. 静态调用 DLL使用 $BCB path\Bin\implib.exe 生成 Lib 文件,加入到工程文件中将该文件拷贝到当前目 ...

  7. echarts高级

    常用,待续... ♣tooltip自动轮播 ♣ 实现数据自动轮播 原理:其实就是timeline,获取某几段(时间)的数据,然后隐藏timeline ♣ legend自动轮播 ♣ 左侧多字出省略号 f ...

  8. SQLServer中使用索引视图

    在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你 ...

  9. WCF进阶:扩展bindingElementExtensions支持对称加密传输

      前面两篇文章WCF进阶:将编码后的字节流压缩传输和WCF 进阶: 对称加密传输都是实现了自定义编码,那两个例子中托管服务或者客户端调用都采用的代码实现,WCF更友好的方式是在app.config或 ...

  10. 不同浏览器Cookie有效期问题

    昨天项目迁移了测试服务器,之后奇怪的问题出现了. IE.谷歌无法登陆,火狐可以登陆. 这个项目先后部署过两个测试服务器.一台正式服务器,登陆都是正常的,这次却突然出现这种奇怪的问题,很是纠结. 通过查 ...