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. 01-Javascript简介

    Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) JavaScript的组成 Java ...

  2. Reorder the Books -- hdu -- 5500

    http://acm.hdu.edu.cn/showproblem.php?pid=5500 Reorder the Books Time Limit: 4000/2000 MS (Java/Othe ...

  3. kepware http接口 php

    读取某变量的值(HttpRequest <?php $request = new HttpRequest(); $request->setUrl('http://127.0.0.1:393 ...

  4. bootstrap2.2相关文档

    本节课我们主要学习一下 Bootstrap表单和图片功能,通过内置的 CSS定义,显示各种丰富的效果. 一.表单 Bootstrap提供了一些丰富的表单样式供开发者使用. 1.基本格式 //实现基本的 ...

  5. firefox浏览器testclient测试接口

  6. 没那么难,谈CSS的设计模式

    没那么难,谈CSS的设计模式 来源: 灵感的小窝  发布时间: 2016-09-09 16:46  阅读: 8949 次  推荐: 27   原文链接   [收藏]   什么是设计模式? 曾有人调侃, ...

  7. 程序员、技术领导、管理者各有烦恼,你占了几条?ZZ

    Q1: 作为学生,你学习 SE的烦恼有哪些? http://blog.jobbole.com/101840/

  8. python 操作mysql数据库之模拟购物系统登录及购物

    python 操作mysql数据库之模拟购物系统登录及购物,功能包含普通用户.管理员登录,查看商品.购买商品.添加商品,用户充值等. mysql 数据库shop 表结构创建如下: create TAB ...

  9. C#中类的属性的获取

    /// <summary> /// 将多个实体转换成一个DataTable /// </summary> /// <typeparam name="T" ...

  10. 5. ASP.NET MVC 中的Areas【区域】是什么

    [PS返回上一篇:-->4.ASP.NET MVC 5.0 视图之模型绑定] 从ASP.NET MVC 2.0开始,微软就提供了一个新特性:Areas[区域].Areas仅仅是用来将大型程序拆分 ...