一、分库分表种类

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. at91 uart driver for vxworks

    /* at91UART.c - AT91RM9200 serial driver */ /* Copyright 2003-2004 Coordinate Co., Ltd. */ /* Copyri ...

  2. 网页抓取信息(php正則表達式、php操作excel)

    1.问题描写叙述 实现对固定网页上自己须要的信息抓取,以表格形式存储. 我是拿wustoj上的一个排行榜来练习的,地址:wustoj 2.思路 网页自己就简单学习了一下php,刚好用它来做点事情吧,我 ...

  3. sql row_number 用法

    自己研究了一下RowNum ,发现这样的分页挺清晰的 --第几页,一页多少行declare @PageIndex int,@PageMax intset @PageIndex =1set @PageM ...

  4. PHP多进程编程(一)

    虽然PHP 中,多进程用的比较的少.但是毕竟可能是会用到了.我最近就遇到这样一个问题,用户提交几百个url以后,要读出这个url 中的标题. 当然,你不希望用户等待的太久,10s 钟应该给出个答案.但 ...

  5. TF Boys (TensorFlow Boys ) 养成记(三): TensorFlow 变量共享

    上次说到了 TensorFlow 从文件读取数据,这次我们来谈一谈变量共享的问题. 为什么要共享变量?我举个简单的例子:例如,当我们研究生成对抗网络GAN的时候,判别器的任务是,如果接收到的是生成器生 ...

  6. 原生YII2 增删改查的一些操作(非ActiveRecord)

    1.添加数据 如下,使用insert方法:t_admin_user为数据表名..其他的是属性.. $num = Yii::$app->db->createCommand()->ins ...

  7. Eclipse & Visual Studio

    VS中的解决方案 vs Eclipse中的workspace Maven包管理 vs  Nuget类库管理 build path  vs

  8. C#中动态调用DLL动态链接库

    其中要使用两个未公开的Win32 API函数来存取控制台窗口,这就需要使用动态调用的方法,动态调用中使用的Windows API函数主要有三个,即:Loadlibrary,GetProcAddress ...

  9. cocos中lua使用shader实例

    local prog = cc.GLProgram:create("res/shader/light2d.vsh","res/shader/light2d.fsh&quo ...

  10. box-sizing在什么情况下会失效

    众所周知,box-sizing是将w3c盒模型与IE盒模型相互转换的利器,但是有时候也会失效,那么在什么情况下回失效呢,MD在没设置高度的时候回失效的透透的,所以一定记得需要转换的时候设置个高度!!!