分库分表知识详解与分库分表中间件介绍
为什么需要分库分表:
如果一个网站业务快速发展,那这个网站的流量也会增加。数据的压力也会随着而来。
比如电商系统来说双十一大促对订单数据库的压力很大。TPS十几万并发量,
如果是传统的架构(一主多从),主库容量肯定无法满足这么高的TPS。
业务越来越大,单表数据超出了数据库支持的容量。
持久化磁盘IO,传统的数据库性能瓶颈,产品经理业务必须这么做
改变程序。数据库下刀子切分优化:
1、换数据库》onsql
2、Sql、索引、字段
3、读写分离
4、分库分表
5、分区
什么是分库分表:
即把存于一个库的数据分散到多个库中,把存于一个表的数据分散到多个表中。
一个库一个表 拆分为 N个库N个表
分库分表常见方式:
垂直
通俗的说法叫做“大表拆小表”,拆分是基于关系型数据库中的“列”(字段)进行的。
特点:
1、每个库(表)的结构都不一样
2、每个库(表)的数据都(至少有一列)一样
3、每个库(表)的并集是全量数据
总结:按拆分字段(多表字段拆成少表字段)
优点:
1、拆分后业务清晰(专库专用按业务拆分)
2、实现动静分离、冷热数据分离设计体现。冷库:发布说说信息 热:说说点赞评论数据
3、数据维护简单、按业务不同业务放到不同机器上
缺点:
1、如果单表的数据量大、写读压力大
2、受某种业务来决定、或者被限制。也就是说一个业务往往会影响到数据库的瓶颈(性能问题)
3、部分业务无法关联 join、只能通过java程序接口去调用,提供了开发复杂度。 (商品、订单信息、会员信息)
水平
以某个字段按照一定的规律(取模)将一个表的数据分到多个库中
特点:
水平(横向)分库
1、每个库(表)的结构都一样
2、每个库(表)的数据都不一样
3、每个库(表)的并集是全量数据
总结:按数据(内容)拆分
优点:
1、单库(表)的数据保持在一定的量(减少),有助于性能提高
2、提高了系统的稳定性和负载能力。
3、切分的表的结构相同、程序改造较少
缺点:
1、数据的扩容很有难度维护量大
2、拆分规则很难抽象出来
3、分片事务的一致性的问题部分业务无法关联 join、只能通过java程序接口去调用
分库分表带来的问题:
分库分表:
增加了我们维护成本
分布式事务(跨库事务)
跨库join
分布式全局唯一ID
分库分表算法:
**一、取模(Hash)**通过userid用户表字段值进行123%3=xxxx 数据分散均衡,避免数据热点 一致性hash(扩容需要O(N))扩容难度
二、范围区分(range) 按月 按省 A(0-6)B(7-8)C(9 10)热点数据
三、预定义(list) (100w 1亿 移动互联网)
读写分离:
什么是读写分离:我们一般应用程序访问数据库无非是读取数据、修改数据、插入数据、删除数据 CRUD。
mysql自带binlog
读写分离带来的问题:
**读写分离:**主从同步、数据一致性的问题、网络延迟的问题
**强制路由:**强制去访问master
分库分表的中间件:
Proxy、jdbc两种方式
Proxy(代理层):mycat代理层、atlas(360)mysql-proxy
优点:
1、开发无感知 2、增删节点程序不需要重启 3、跨语言(java 、php)
缺点:
1、性能下降没因为多了一层 2、不支持跨数据库
Jdbc(直连层):shardingsphere(sharding-jdbc)、TDDL(淘宝 部分开源)
优点:
1、性能很好的 2、支持跨数据库jdbc
缺点:
1、增加了开发难度 2、不支持跨语言(java)
分库分表中间件:ShardingSphere
Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。
ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。
https://shardingsphere.apache.org
分库分表知识详解与分库分表中间件介绍相关推荐
- js入门·表单详解一(修改表单属性,修改表单元素值)
实在javascript入门·Document对象入门讲解(访问表单,创建新页,获取页标题) 一文中,我们已经把表单的一些基本访问等弄清楚了,下面我们深入的学下表单的属性以及对表单元素的简单操作! 演 ...
- GOT表和PLT表知识详解
作者:海枫 链接:https://www.zhihu.com/question/21249496/answer/126600437 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- 大数据单机学习环境搭建(5)Hive建表DDL详解
专题:大数据单机学习环境搭建和使用 1. Hive建表简单示例 1.1.Hive建表语句 1.2.表详细信息 1.3.数据展示 2. Hive建表语法详解 3.拓展1:复杂数据分割 4.拓展2:事务表 ...
- Oracle入门(一)之入门级知识详解
转载自 Oracle入门级知识详解 一. Oracle基本介绍 1. 什么时候用Oracle数据库? SQL SERVER 号称百万级数据(一个表的数据),但是其实做多20万条数据 超过20万条数据就 ...
- 最全 VxLAN 知识详解
什么是VXLAN VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization o ...
- 网络知识详解之:网络攻击与安全防护
网络知识详解之:网络攻击与安全防护 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名 ...
- 【转】什么是场效应管(FET)-场效应管(FET)分类、原理、用途等知识详解
什么是场效应管(FET)-场效应管(FET)分类.原理.用途等知识详解 场效应管和双极晶体管不同,它属于仅以电子或空穴中的一种载子动作的晶体管.按照结构.原理可以分为:1.接合型场效应管 2.MOS型 ...
- 【BLE】OTA基础知识详解
[BLE]OTA基础知识详解 一. 概念 1. 缩写 BIM Boot Image Manager , the software bootloader CRC cyclic redundancy ch ...
- ACL——【知识详解+案列+(RACL+VACL+PACL)】详解
目录 一.ACL(知识讲解+简单案列应用): (1)知识详解: (2)简单案列应用: (3)调整ACL 策略(实现ACL策略穿插) (4)以字符串命名的ACL的编写与调用(常用): (5)ACL方向: ...
- MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)
MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过 ...
最新文章
- Dynamic Setting ImageUrl In DataPager
- LeetCode算法题-Minimum Depth of Binary Tree(Java实现)
- mysql qadir_MySQL 及 SQL 注入
- boost::statechart模块实现无效转换测试
- Silverlight 4 Beta开发版带着许多新特性发布
- xx置业有限公司建议篇
- Page object设计模式
- linux强行卸载qt,Linux下卸载QT SDK
- tomcat java垃圾回收_tomcat启动参数配置,内存和垃圾回收
- oracle delete远程表,用脚本实现表的远程准实时同步
- 计算机的基本组成-4-一个程序在计算机上每一步是走了哪些地方实现的
- VS2010中无法嵌入互操作类型“......”,请改用适用的接口的解决方法
- 学校计算机网络管理员面试,网络管理员面试题及答案
- 转换到coff期间_“fatal error lnk1123 转换到coff期间失败”的解决方法
- MPU9250传感器
- PS 制作ICO图标和图片背景透明化
- python 基础学习(小甲鱼)
- latex beamer 空一行_Beamer——基于LaTex的Slides制作
- python 隐藏其他窗口_python控制窗口显示隐藏
- oracle ebs fsg报表,Oracle EBS FSG报表迁移