Java中分库分表再相约
分库分表越来越影响系统应用的高可用、高并发问题,下面和分库分表再相约,聊聊mysql环境的分库分表。
- what:什么是分库分表
- why:为什么需要分库分表
- how:如何进行分库分表
- when/where:什么时候/环境考虑分库分表
- problem:分库分表带来的问题
what
分库,就是将一个数据库分成多个数据库,部署到不同的机器。
分表,就是将一个数据表分成多个数据表。
why
数据量越来越大,数据库会出现性能瓶颈。
分库,随着业务量剧增,单个数据库所在机器的磁盘容量可能会撑爆,分成多个数据库,部署到不同机器,解决单个机器的磁盘被撑爆的问题。在高并发的场景下,单个数据库是扛不住大量请求的并发连接的,分成多个数据库,部署到不同机器,分担单个数据库的并发请求压力。
分表,随着数据量增大,sql的查询会越来越慢。如果单表的数据量超过一千万条的话,查询是明显变慢的。mysql的索引一般是B+树结构,数据千万级别的话,B+树的高度会增高,B+树高度一般为1-3层,若超过3层,查询会变慢。
how
分库,可以分为垂直分库和水平分库。
垂直分库,就是根据不同的业务进行拆分,比如将包含用户表、订单表的数据库拆分成用户库、订单库,部署在不同的机器。垂直分库将原来一个单数据库的压力分担到不同的数据库,可以很好应对高并发场景。
水平分库,就是根据不同的策略(如地址、奇偶)分到不同的数据库,每个数据库具有相同的表,水平分库可以有效的缓解单机单库的性能瓶颈和压力。
垂直分表,就是将表中的一些字段拆分到另一张表中。如果单表包含了几十列甚至上百列,每次都select *占用IO资源。垂直分表可以有效降低单机单表的IO资源。
水平分表,就是将表按照某种策略分到不同的表,每个表具有相同的字段,水平分表可以有效的降低单表的数据量。
具体的如何分库分表可以查看之前博客《Java中分库分表粗谈》。
分库分表的策略常用的有range范围、hash去模、range+hash混合。
range范围就是按照从0-1000万划分为一个表,1000-2000万划分为另一个表。也可以按照时间划分。
hash取模就是根据key进行去模拆分到不同的表。
when/where
如果系统处于快速发展期,单机单库成为了性能瓶颈就需要考虑分库了。每天单表新增几十万,查询效率明显变慢时,就需要考虑分库分表了。一般B+树索引高度是2~3层最佳,如果数据量千万级别,可能高度就变4层了,数据量就会明显变慢了。mysql本身并没有对单表的最大记录数进行限制,这个数值取决于操作系统对单个文件的限制,单表的行数上限都是内存的限制。不过业界流传,一般500万数据或单表容量超过2GB就要考虑分表了。
problem
分库分表也会随之带来一些问题。
事务,分库分表后若是两个表在不同的数据库,那么事务失效,需要使用分布式事务。
关联查询,需要分开查询。
排序,需要在各自结果上在程序端进行合并。
分页,需要在各自结果上在程序端进行汇聚再分页。
分布式Id,数据库的主键需要使用分布式Id,如雪花算法生成的Id。
实现分库分表的中间件有很多,可自行选择,也可参考之前博客介绍的sharding-sphere。
Java中分库分表再相约相关推荐
- 收好这份武林秘籍,让你分库分表再无烦恼
互联网发展至今,各个公司企业的数据量都大幅增长,分库分表越来越多的被我们用到,那么我们应该如何针对我们自己的业务场景,对数据进行合理的划分,用最小的代价解决掉性能瓶颈. 1 分库分表的介绍 1.1 什 ...
- java hash 分库分表_分库分表方案
摘自:Java技术栈 一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值. 在业务Service来看就是,可用数据库连接少 ...
- 太强了!这款轻量级的数据库中间件完美解决了SpringBoot中分库分表问题
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:Macky_He blog.csdn.net/Macky_H ...
- Java Spring 分库分表方案概述
目前分库分表的实现上无非就那么几大类实现 分库方案: 方案1.采用类似于oceanbase这样的数据存储,最方法,后期维护也比较方便的方案,但是灵活性上,性能上很难说 方案2.采用开源组件,如apac ...
- 分库分表中间件 Sharding-Sphere
文章目录 一.什么是Sharding-JDBC 发展历程 sharding-jdbc 和 mycat 分布式事务 Apache ServiceComb的分布式事务解决方案 XA分布式事务 基于分布式S ...
- mysql中的分库分表
大表怎么优化?某个表有近千万数据,CRUD比较慢,如何优化?分库分表了是怎么做的?分表分库了有什么问题?有用到中间件么?他们的原理知道么? 文章目录 大表怎么优化 分库分表 垂直分区 垂直分表 水平分 ...
- java面试-MySQL篇分库分表策略
1.数据库的三范式是什么 第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第 ...
- java面试 mysql分库分表_MySQL性能管理及架构设计(三):SQL查询优化、分库分表 - 完结篇...
一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...
- 盘点分库分表中,你一定要避开的那些坑!
例如:单表中出现了,动辄百万甚至千万级别的数据."分表分库"就成为解决上述问题的有效工具. 今天和大家一起探讨:如何进行分表分库以及期间遇到的问题. 为什么会分表分库 数据库数据会 ...
最新文章
- 创新工场有哪些失败项目?不要只看着成功
- 分布式大数据sql查询引擎Presto初识
- 基于FPGA的LED点阵系统开发
- C++运算符重载(友元函数方式)
- Function、Object、Prototype 之间的关系解析
- WP评论系统更换小结(转)
- 《软件建模技术》课程教学大纲
- 网格布局每个网格都能放置一个组件_Android综合试题
- [转载] python 字符串转换long_python整数、字符串、字节串相互转换
- .Net Core之初识及WebApi的简单使用和发布
- linux 内核 addr2line,内核调试 arm-none-linux-gnueabi-addr2line 工具使用
- 英语论文应该怎么查重?
- Pop猫 回收站图标
- 葡萄汽水(Grape soda)
- 零点漂移、零点补偿问题
- android搜索功能以及显示历史纪录带清除按钮
- 数电常见74系列器件及其功能总结(不要再混乱啦,值得收藏)
- NOI 2005 题解
- Makerdown小白使用指南
- 计算机硬件知识试题,计算机硬件基础知识试题.doc
热门文章
- 【cpu概念】物理cpu个数、核数、逻辑cpu数的概念
- java查看cpu核数以及jvm内存
- 神经系统简笔画 结构图,神经系统的组成简笔画
- 设置页布局神器!有了它,开发设置页简直是享受
- 苹果5概念机_vivo 概念手机发布了,未来的手机就长这样
- 2.7 JavaScript 三元表达式
- JS三元表达式多条件写法
- js对象长度与js数组长度
- java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)
- 爱玛“2022追星计划”打造摩登复古风,再掀电动车潮流革命