一、分库分表种类

1、垂直拆分

在考虑数据拆分的时候,一般情况下,应该先考虑垂直拆分。垂直可以理解为分出来的库表结构是互相独立各不相同的、

- 如果有多个业务,每个业务直接关联性不大,那么就可以把每个业务拆分为独立的实例、库或表。

- 如果在一个库里面有多张表,那么可以把每张表拆分到不同的实例上。

- 如果你有一张表,但这个表里的字段很多,每个字段都有不同的含义,例如user表里面有姓名、生日、地址等,那么可以把每个字段独立出来拆分为一张新表。

2、水平拆分

水平拆分是针对一张表来说的。在经过垂直拆分之后,如果数据量依然很大,那么可以通过某种算法进行水平拆分。拆分后具有多张相同表结构的表,每张表存储一部分数据。

二、分库分表原则

1、原则1:能不分就不分

MySQL是关系型数据库,数据库表之间的关系从一定角度映射了业务逻辑。任何分库分表的行为都会提升业务逻辑的复杂度,数据库除了承载数据的存储和访问外,协助业务更好地实现需求和逻辑也是其重要的工作之一。分库分表会带来数据的合并、查询、更新条件的分离,以及事物的分离等多种后果,业务实现的复杂度往往会翻倍或指数级上升。所以在分表分库之前,应先升级硬盘、内存、CPU、网络、版本、读写分离、负载均衡及SQL语句优化。

2、原则2:数据量太大,正常的运维影响业务访问

正常运维主要包括:

- 数据库的备份

- 数据表的修改

- 热点数据

3、原则3:表设计不合理

- 某个表字段不断被update,压力非常大

- 某个表字段存在TEXT或BLOB字段

4、原则4:某些数据表出现了无穷增长的情况

各种评论、消息、日志记录表现为不可控的增长,此时可按用户、时间、用途等进行水平拆分。

MySQL优化(一):MySQL分库分表的更多相关文章

  1. 【MySQL】数据库(分库分表)中间件对比

    分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm. 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后的表 ...

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

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

  3. Mycat数据库中间件对Mysql读写分离和分库分表配置

    Mycat是一个开源的分布式数据库系统,不同于oracle和mysql,Mycat并没有存储引擎,但是Mycat实现了mysql协议,前段用户可以把它当做一个Proxy.其核心功能是分表分库,即将一个 ...

  4. 3.Mysql集群------Mycat分库分表

    前言: 分库分表,在本节里是水平切分,就是多个数据库里包含的表是一模一样的. 只是把字段散列的分到不同的库中. 实践: 1.修改schema.xml 这里是在同一台服务器上建立了4个数据库db1,db ...

  5. MySQL:互联网公司常用分库分表方案汇总!

    转载别人 一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用 ...

  6. MySQL:互联网公司常用分库分表方案汇总!

    一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...

  7. MySQL系列(八)--数据库分库分表

    在互联网公司或者一些并发量比较大的项目,虽然有各种项目架构设计.NoSQL.MQ.ES等解决比较高的并发访问,但是对于数据库来说,压力 还是太大,这时候即使数据库架构.表结构.索引等都设计的很好了,但 ...

  8. 数据字符集mysql主从数据库,分库分表等笔记

    文章结束给大家来个程序员笑话:[M] 1.mysql的目录:在rpm或者yum安装时:/var/lib/mysql  在编译安装时默许目录:/usr/local/mysql 2.用rpm包安装的MyS ...

  9. MySQL主从复制&读写分离&分库分表

    MySQL主从复制 MySQL的主从复制只能保证主机对外提供服务,从机是不提供服务的,只是在后台为主机进行备份数据 首先我们说说主从复制的原理,这个是必须要理解的玩意儿: 理解: MySQL之间的数据 ...

  10. 【MySQL】如何解决分库分表遇到的自增主键的问题?

    雪花算法 Redis生成主键

随机推荐

  1. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...

  2. C++按行读取和写入文件

    按行读取: 假设有一个文本文件,如下所示: 1 2 32 3 43 4 55 6 77 8 9 文件名为split.txt 目的:按照行读取数据,并一个个的显示出来. 代码如下: #include & ...

  3. ubuntu 按键替换 Control_R to Left

    ubuntu 按键替换 Control_R to Left 1 查看当前键盘布局 $xmodmap -pke keycode 105 = Control_R NoSymbol Control_Rkey ...

  4. 30Mybatis_mybatis和spring整合-原始dao开发

    这篇文章很重要, 第一步:我们讲一下整合的思路: 我们以前要用Mybatis是需要sqlMapConfig.xml(这个配置文件需要配置dataource,以及mapper.xml文件.)sqlMap ...

  5. 第二百五十七节,Tornado框架-路由映射,逻辑处理,文件归类配置

    Tornado框架-路由映射,逻辑处理,文件归类配置 Tornado框架 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起 ...

  6. POJ 3181 Dollar Dayz 01全然背包问题

    01全然背包问题. 主要是求有多少种组合.二维dp做的人多了,这里使用一维dp就能够了. 一维的转换方程:dp[j] = dp[j-i] + dp[j];当中i代表重量,j代表当前背包容量. 意思就是 ...

  7. hrbustoj 1305:多边形(计算几何,极角排序练习)

    多边形 Time Limit: 1000 MS     Memory Limit: 65536 K Total Submit: 113(42 users)   Total Accepted: 51(3 ...

  8. react-native新导航组件react-navigation详解

    http://blog.csdn.net/sinat_17775997/article/details/70176688

  9. jquery获取设置input值

    $("#input").val("123"),注意val()这个函数$("#input").val("123"),//给 ...

  10. android classloader双亲托付模式

    概述 ClassLoader的双亲托付模式:classloader 按级别分为三个级别:最上级 : bootstrap classLoader(根类载入器) : 中间级:extension class ...