分库分表技术及技术方案
一、分库分表的必要性
分库分表技术的使用,主要是数据库产生了瓶颈,如单库的并发访问或单表的查询都超出了阈值。对系统使用造成一定的影响,不得已而产生的技术。
通过分库分表技术来解决此类问题,但正因为使用此技术,会产生ACID一系列的问题,各类中间件解决此类问题各有各的优势。
提示:如场景无必要,千万不要使用分库分表。
二、分库分表的思路
1、垂直区分
垂直分库:从业务角度,一个库分成多个库,如把订单和用户信息分成两个库来存储。这样的好处就是可以微服务了。每块的业务单独部署,互不影响,通过接口去调用。
图1 单库到多库
垂直分表:把大表分成多个小表,如热点数据和非热点数据分开,提高查询速度。
2、水平区分
水平分表:同一业务如数据量大了以后,根据一定的规则分为不同的表进行存储。
图2 单表到多表
水平分库:如订单分成多个库存储,分解服务器压力。
以上一般来说,垂直分库和水平分表用的会多些。
三、分库分表的原理分析
分库分表常用的方案:Hash取模方案和range范围方案;
路由算法为最主要的算法,指得是把路由的Key按照指定的算法进行存放;
1、Hash取模方案
根据取余分配到不同的表里。要根据实际情况确认模的大小。此方案由于平均分配,不存在热点问题,但数据迁移很复杂。
图3 hash方案
2、Range范围方案
range根据范围进行划分,如日期,大小。此方案不存在数据迁移,但存在热点问题。
图4 range方案
四、分库分表的技术选型
1、技术选型
解决方案主要分为4种:MySQL的分区技术、NoSql、NewSQL、MySQL的分库分表。
(1)mysql分区技术:把一张表存放在不同存储文件。由于无法负载,使用较少。
(2)NoSQL(如MongoDB):如是订单等比较重要数据,强关联关系,需约束一致性,不太适应。
(3)NewSql(具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性):如TiDB可满足需求。
(4)MySQL的分库分表:如使用mysql,此种方案为主流方式。
2、中间件
解决此类问题的中间件主要为:Proxy模式、Client模式。
(1)Proxy模式
把SQL组合、数据库路由、执行结果合并等功能全部存放在一个代理服务中,而与分库分表相关的处理逻辑全部存放在另外的服务中,这种设计模式的优点是对业务代码无侵入,业务只需要关注自身的业务逻辑即可。
图5 proxy模式
(2)Client模式
把分库分表相关逻辑存放在客户端,一版客户端的应用会引用一个jar,然后再jar中处理SQL组合、数据库路由、执行结果合并等相关功能。
图6 client模式
(3)中间件的比较
图7 中间件
由于Client模式少了一层,运维方便,相对来说容易些。
五、分库分表的实践
根据容量(当前容量和增长量)评估分库或分表个数 -> 选key(均匀)-> 分表规则(hash或range等)-> 执行(一般双写)-> 扩容问题(尽量减少数据的移动)。
在这里我们选用中间件share-jdbc。
1、引入maven依赖 io.shardingsphere sharding-jdbc-core ${latest.release.version}
2、spring boot规则配置
行表达式标识符可以使用${...}或$->{...},但前者与Spring本身的属性文件占位符冲突,因此在Spring环境中使用行表达式标识符建议使用$->{...}。sharding.jdbc.datasource.names=ds0,ds1 sharding.jdbc.datasource.ds0.type=org.apache.commons.dbcp.BasicDataSource sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0 sharding.jdbc.datasource.ds0.username=root sharding.jdbc.datasource.ds0.password= sharding.jdbc.datasource.ds1.type=org.apache.commons.dbcp.BasicDataSource sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1 sharding.jdbc.datasource.ds1.username=root sharding.jdbc.datasource.ds1.password= sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order$->{0..1} sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order$->{order_id % 2} sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds$->{0..1}.t_order_item$->{0..1} sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item$->{order_id % 2} sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id sharding.jdbc.config.sharding.binding-tables=t_order,t_order_item sharding.jdbc.config.sharding.broadcast-tables=t_config sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2}
3、创建DataSource
通过ShardingDataSourceFactory工厂和规则配置对象获取ShardingDataSource,ShardingDataSource实现自JDBC的标准接口DataSource。然后即可通过DataSource选择使用原生JDBC开发,或者使用JPA, MyBatis等ORM工具。setDataSource(targetDataSources, DataSourceType.SHARDING.name(), "shardingDataSource");
唐小鱼穿高开叉裙,光脚上树,路人称对其好感全无不得不说如今的网红圈实在是太热闹了,似乎只要对自己足够自信就能加入到网红这个行列中来。不过想成为网红虽然容易,但想要在网红圈中长久地发展下去,确实还需要在各方面好好考量。有的人依靠
2023春夏四大时装周4站13场,超模刘冰冰再创佳绩10月4日,2023春夏巴黎时装周落下帷幕。本季2023春夏时装周终于重回正轨,呈现出久违的蓬勃生机。从纽约出发,经伦敦米兰,到最后的巴黎,本季的四大时装周正式画上了圆满的句点。随
国安耻辱之败,却要广州城队为此买单久古2022年足协杯第二轮国安01不敌泾川文汇之战的余波,是一个经典的蝴蝶效应。获胜者狂欢的同时,中超的另一支球队广州城却遭殃了,很可能心在滴血!赛后至今,舆论对国安非常不利。除了
苹果安卓机拿什么和iPhone斗?8Gen2还不如A16昨天,高通正式推出了旗下最新移动CPU芯片骁龙8Gen2,发布会上公布的各项数据那是相当强悍,安卓手机厂商看得口水直流,纷纷紧跟着表态自己是8Gen2首批搭载厂商,想要衡量一款芯片
比特币的周期规律1。什么是比特币比特币是由网名中本聪的加密算法工程师于2008年创造的一个互联网软件,全称为一种点对点的电子现金系统。这是一个网络记账软件。若干台电脑安装这个软件以后,运行这个软件
2大国产CPU厂商的X86授权,能被英特尔取消么?众所周知,目前在PC领域,X86架构是当之无愧的王者,占了全球90以上的份额。X86架构为何这么牛?一方面是因为它是复杂指令集,在执行PC操作时,有一定的优势。二是X86架构,绑定
人民财评保持信心,推动消费市场恢复增长来源人民网观点频道原创稿据国家统计局消息,今年110月份,社会消费品零售总额360575亿元,基本生活类商品销售和网上零售较快增长。限额以上单位粮油食品类饮料类商品零售额分别增长9
浪淘沙世界杯将至,非法网赌再燃火苗!有赌球网站标榜自己为官方认证四年一度的卡塔尔世界杯即将来临,当球员们在赛场挥洒汗水时,激动的球迷观众也会在心中暗暗下注预判比赛结果,但下注如若涉及金钱赌博则变了味新黄河记者注意到,每逢大型球赛,都有不法分子利
感情到最后,拼的是这两个字点上方听一禅第1953次和你说晚安文一禅主播一禅每个人在生命中会遇到谁,在前世就早有定数。在漫漫的轮回之路上,总会有那么一个人,看一眼就惊艳了余生。这一生所有的遇见,其实早已命中注
飞机上有三样东西是免费的,乘客不要求,空姐一般不会提出现今,我们出行有多种可选择的交通工具,比如汽车火车高铁飞机等。这些交通出行方式在极大方便着我们的生活,无论是在出行时间还是距离上,都在给乘客提供着出行保障。但是,如果跨省或者出国,
为什么有的人很有本事,但却没有草根挣钱多中醫疑難病證指南作者鄔學芳2022。11。16日本事就是能力,能力应该涵盖心能与体能。如果双管齐下,从政与艺业争钱都是如鱼得水,岂能会争不到钱呢?如果争不到钱的话,那可能这个人没有