1、什么是分库分表

  所谓的分库分表就是数据的分片(Sharding)。

2、为什么需要分库分表

  因为随着公司的业务越来越大,对于现成单机单个应用瓶颈问题,对数据持久化硬盘如何进行扩容。

  可以从4个方面就行考虑:

  1、表的设计要符合业务需求

  2、sql语句的优化

  3、读写分离

  4、分库分表

3、什么是读写分离

  将操作的sql语句到指定的库中操作,达到读写分开操作不同的数据库。

  数据库的角色:主库(master,就是写库),从库(slave,就是读库)。

  读写分离对insert、update、delete语句的操作走主库,select语句走从库,(所谓的crud操作)

  应用:对于读多写少业务对从库的压力比较大,对于写多读少业务对主库压力比较大。

  读写分离java开源框架分类:

    客户端(应用层):TDDL、Sharding-jdbc

    这里讲解Sharding-jdbc:

    

    特点:

      优点:1、程序自动完成,数据源方便管理;2、不需要维护、因为没有中间件;3、理论支持任何数据库(sql标准)

      缺点:1、存在代码入侵性;2、加大开发成本;3、不能做到动态添加数据源,添加数据源还需要重启程序;4、程序开发完后,运维人员参与不了

    中间件(代理层 proxy):mysql proxy、mycat、altas(360开发的)

    

    特点:

      优点:1、数据添加不会影响到程序;2、应用层不需管理数据库层方面,由代理层去管理;3、添加数据源不需要重启程序

       缺点:1、程序依赖的中间件,提高维护工作;2、容易出现高可用问题;3、中间件导致切换数据库变的困难;2、增加了proxy,程序性能下降

4、什么是分库分表

  分库分表其实是基于读写分离上面提出的方案(也就是目前关系型数据库终极解决方案)。

  读写分离:当数据写很大的时候,(例如:双十一 天猫、京东下单时写的数据很大)master写的压力大的问题以及公司随着业务增大之后产生瓶颈问题,需要数据分片来解决。

  分库分表:目前数据库终极解决方案:解决高并发、数据分片。

  分库(表)类型:

    垂直:

      将一个比较多字段的表拆分成多个小表,将不同字段放到不同的小表中,降低单表(单库)大小的目的来提高性能。

      通俗:大表拆小表,拆分是基于关系型数据库表的列(字段)来进行。

      特点:每个表(库)的结构都不一样

            每个表(库)的列数据至少有一列是一样的

            每个表(库)并集是整个数据库的全量数据

            每个表(库)数据量一样(不会变):例如(user-info字段 + user-basse字段 = user的全字段)

       水平:

      某个字段按照一定规律进行拆分,将一个表的数据分到多个表(库)中。

      降低表的数据量,优化查询数据量的方式来提高性能。例如:(user1(数据) + user2 (数据) = user全部数据)

      特点:每个表(库)的结构一样

            每个表(库)数据量不一样。(要是一样只能说太恰好了,但是不可以存在一样的数据)

            每个表(库)的并集是整个数据库(表)全量数据。

5、分库分表常见的算法:

  1、Hash(取模):通过表的一列字段进行hash取出code值来区分的。

  2、Range(范围):按年份、按时间、按某值等。

  3、List预定义:事先定于好。

6、分库分表之后带来什么问题

  1、查询数据结果集合需要查询多个库,比较麻烦。

  2、sql语句需要修改,将之前没分库分表的语句需要重新修改,比较麻烦。

  3、分布式事务

  4、全局唯一性id,之前哪些只增的id都不管用,水平拆分后的表,多个表之间的id不能使用自增,需要一个唯一全局id。

7、如何设计一个永远都不需要迁移的方案?

  

Sharding-jdbc(一)分库分表理解的更多相关文章

  1. Sharding Sphere的分库分表

    什么是 ShardingSphere? 1.一套开源的分布式数据库中间件解决方案 2.有三个产品:Sharding-JDBC 和 Sharding-Proxy 3.定位为关系型数据库中间件,合理在分布 ...

  2. mysql数据库分库分表shardingjdbc

    分库分表理解 分库分表应用于互联网的两个场景;大量数据和高并发,通常策略有两种:垂直分库,水平拆分 垂直拆分:是根据业务将一个库拆分为多个库,将一个表拆分为多个表,例如:将不常用的字段和经常访问的字段 ...

  3. 分库分表后跨分片查询与Elastic Search

    携程酒店订单Elastic Search实战:http://www.lvesu.com/blog/main/cms-610.html 为什么分库分表后不建议跨分片查询:https://www.jian ...

  4. 【大数据和云计算技术社区】分库分表技术演进&最佳实践笔记

    1.需求背景 移动互联网时代,海量的用户每天产生海量的数量,这些海量数据远不是一张表能Hold住的.比如 用户表:支付宝8亿,微信10亿.CITIC对公140万,对私8700万. 订单表:美团每天几千 ...

  5. java 取模运算% 实则取余 简述 例子 应用在数据库分库分表

    java 取模运算%  实则取余 简述 例子 应用在数据库分库分表 取模运算 求模运算与求余运算不同.“模”是“Mod”的音译,模运算多应用于程序编写中. Mod的含义为求余.模运算在数论和程序设计中 ...

  6. 分库分表技术演进&最佳实践

    每个优秀的程序员和架构师都应该掌握分库分表,这是我的观点. 移动互联网时代,海量的用户每天产生海量的数量,比如: 用户表 订单表 交易流水表 以支付宝用户为例,8亿:微信用户更是10亿.订单表更夸张, ...

  7. Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 进行分库分表

    Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 进行分库分表 交易所流水表的单表数据量已经过亿,选用Sharding-JDBC进行分库分表.MyBatis-P ...

  8. 分库分表利器之Sharding Sphere(深度好文,看过的人都说好)

    Sharding-Sphere Sharding-JDBC 最早是当当网内部使用的一款分库分表框架,到2017年的时候才开始对外开源,这几年在大量社区贡献者的不断迭代下,功能也逐渐完善,现已更名为 S ...

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

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

随机推荐

  1. centos7,配置nginx服务器

    安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc.openssl-devel.pcre-devel和zlib-d ...

  2. 关于写css文件需要注意的事项

    通常在项目中,我们尽量不要把style样式写在html中,而是使用外部.css文件的形式添加样式.在编写.css文件时,一定一定一定要注意,不要在一个css语句中写同级class名字,否则会出错,找不 ...

  3. 手把手教Electron+vue的使用

    .现如今前端框架数不胜数,尤其是angular.vue吸引一大批前端开发者,在这个高新技术快速崛起的时代,自然少不了各种框架的结合使用.接下来是介绍electron+vue的结合使用. 2.Elect ...

  4. linux 查询搜索文件指令

    一.which(寻找[执行档]) 二.whereis(由一些特定的目录中寻找文件文件名) 三.locate/updatedb 四.find 个人记录方便自用

  5. 如何打包maven项目

    start 步骤1:项目右键-->Run As-->Maven clean 步骤2:Run As-->Maven install end

  6. hihocoder 二分·二分答案【二分搜索,最大化最小值】 (bfs)

    题目 这道题做了几个小时了都没有做出来,首先是题意搞了半天都没有弄懂,难道真的是因为我不打游戏所以连题都读不懂了? 反正今天是弄不懂了,过几天再来看看... 题意:一个人从1点出发到T点去打boss, ...

  7. AutoCompleteTextView 简单用法

    http://blog.csdn.net/i_lovefish/article/details/17337999

  8. MCU编程_基础

    包含头文件符号的区别 有这样的包含头文件语句 #include <reg52.h> #include"reg52.h" 两者区别在于: <>:编译器先进入软 ...

  9. 使用HAProxy实现sql server读库的负载均衡

    前置条件 使用sqlserver的发布订阅功能实现读写分离,并创建多个读库. 本文的负载均衡是针对多个读库而言的. 测试环境 vmware 10 64位 windows server 2008 R2 ...

  10. NLog配置JsonLayout中文输出为unicode问题

    日志输出现要改为json格式,网上查询layout配置为JsonLayout就可以了,结果发现输出中文为unicode编码,看很多文章说配置encode="false"就可以了,结 ...