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. Effective C++ 随笔(2)

    条款5 了解c++默默编写并调用哪些函数 编译器自动生成的copy 构造函数,copy赋值操作符,析构函数,构造函数,这些都是public和inline的,此处inline的意思是他们的定义都是在头文 ...

  2. 大压力下Redis参数调整要点

    调整以下参数,可以大幅度改善Redis集群的稳定性: 为何大压力下要这样调整? 最重要的原因之一Redis的主从复制,两者复制共享同一线程,虽然是异步复制的,但因为是单线程,所以也十分有限.如果主从间 ...

  3. sql_id VS hash_value

    有没有发现,v$session,v$sql,v$sqlarea,v$sqltext,v$sql_shared_cursor等试图连接的时候经常会用到hash_value,sql_id,但是他们2个之间 ...

  4. Java图形处理

    paint.repaint.update方法   Graphics类.     用于实现组件的画图.包括组件对象,坐标,区域,颜色,字体,画图模式等   Color类     用来封装颜色   Gra ...

  5. phpwind部署问题

    1. 提示"PDO_Mysql 未安装" wamp安装后,首选确保在wamp/php/ext/目录下存在"php_pdo.dll"和"php_pdo_ ...

  6. java读取excel文件(.xls,xlsx,csv)

    前提,maven工程通过poi读写excel文件,需要在pom.xml中配置依赖关系: 在<dependencies>中添加如下代码 <dependency> <grou ...

  7. Maven中的配置文件

    <span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...

  8. 转:mysql触发器

    原文地址:http://www.cnblogs.com/nicholas_f/archive/2009/09/22/1572050.html CREATE TRIGGER <触发器名称>  ...

  9. wordpress和数据库的连接

    1.首先在数据库里创建wordpress数据库 2.在网页上配置WordPress,安装WordPress 如上配置不对,提交时提示了错误,于是我选择了root用户 123456, 3.提交后,连上了 ...

  10. Python自动化开发 - Django基础

    本节内容 一.什么是web框架 二.MVC和MTV视图 三.Django基本命令 四.路由配置系统 五.编写视图 六.Template 七.ORM 一.什么是web框架 对于所有的web应用,本质上其 ...