分库分表技术选型

分库分表利器:Sharding-JDBC、TDDL、Mycat选择与应用 Sharding-JDBC是由当当网开源的一款轻量级Java框架,它不改变应用的JDBC和Spring Data JPA编程方式,而是作为一个JDBC层面的代理,实现了数据源的自动切换和分片逻辑。Sharding-JDBC支持复杂的SQL语句,包括分页、排序、聚合函数等,同时提供了一套完整的分库分表解决方案,包括数据路由、读写分离、分布式事务、数据加密等。:适合阿里巴巴生态内的应用,或者有计划向阿里云迁移的企业,它提供了更为丰富的功能和优化策略,但可能需要更深入的学习和配置。 阅读详情

1、为什么分库分表

数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。

2、分库分表的实施策略

分库分表有垂直切分和水平切分两种。

  • 垂直切分,即将表按照功能模块、关系密切程度划分出来,部署到不同的库上。
  • 水平切分,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。

应该使用哪一种方式来实施数据库分库分表,这要看数据库中数据量的瓶颈所在,并综合项目的业务类型进行考虑。
如果数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、低耦合,那么规则简单明了、容易实施的垂直切分必是首选。
而如果数据库中的表并不多,但单表的数据量很大、或数据热度很高,这种情况之下就应该选择水平切分,水平切分比垂直切分要复杂一些,它将原本逻辑上属于一体的数据进行了物理分割,除了在分割时要对分割的粒度做好评估,考虑数据平均和负载平均,后期也将对项目人员及应用程序产生额外的数据管理负担。

面对数据递增,解决方案通常是分库分表,冷热数据分离

垂直拆分——主要是字段的拆分

水平拆分——表结构不变,数据分表

3、分库分表中间件

Mycat

官网 http://www.mycat.io

mycat是一个中间件代理层,对研发无感知

  • 一个彻底开源的,面向企业应用开发的大数据库集群

  • 支持事务、ACID、可以替代MySQL的加强版数据库

  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群

  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server

  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

  • 一个新颖的数据库中间件产品

优点:
1、开发无感知
2、增删节点程序不需要重启
3、跨语言
缺点:
1、性能下降没因为多了一层
2、对于复杂的sql支持不是很好

MyCat经典实用场景

单纯的读写分离,此时配置最为简单,支持读写分离,主从切换

分表分库,对于超过1000 万的表进行分片,最大支持1000 亿的单表分片

多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化

报表系统,借助于Mycat的分表能力,处理大规模报表的统计

替代Hbase,分析大数据作为海量数据实时查询的一种简单有效方案,比如100 亿条频繁查询的记录需要在3 秒内查询出来结果,
除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat 可能是最简单有效的选择

mycat的使用对研发是无感知的,但是运维成本较大,涉及到一些概念

逻辑库(sehema),逻辑表(table),配置分片(dataNode),配置物理库分片映射(dataHost)

在这里插入图片描述

我们需要了解一点,集中式的Proxy其实现非常复杂,这要从MySQL处理SQL语句的原理说起,因为不是本文要论述的重点,因此只是简单的提及几点:

SQL语句要被Parser解析成抽象语法树

SQL要被优化器解析出执行计划

SQL语句完成解析后,发给存储引擎

只要有解析的过程,其性能损耗就是比较可观的,我们也可以认为这是一种重量级的解决方案。

Sharding-Jdbc

官网 http://shardingsphere.apache.org/index_zh.html

定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

  • 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。

  • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。

  • 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。

优点:
1、性能很好的
2、支持跨数据库jdbc
缺点:
1、增加了开发难度
2、不支持跨语言(java)

ShardingJdbc是ShardingSphere中关于jdbc增强方式的一种,而且ShardingSphere已经孵化为apache顶级项目

每一个服务都持有一个Sharing-JDBC,这个JDBC以Jar包的形式提供,基本上可以认为是一个增强版的jdbc驱动,需要一些分库分表的配置,业务开发人员不需要去对代码进行任何的修改。可以很轻松的移植到SpringBoot,ORM等框架上

但是这个结构也不是完美的,每一个服务持有一个proxy意味着会在MySQL服务端新建大量的连接,维持连接会增加MySQL服务器的负载,虽然这种负载提升一般无法察觉。

sharding-jdbc中涉及到基础概念

逻辑表、真实表、数据节点——每张真实表

逻辑表

即水平拆分的表的总称。比如订单业务会被拆分成t_order0,t_order1两张表,但是他们同属于一个逻辑表:t_order

绑定表

分片规则一直的主表和子表。比如还是上面的t_order表,其分片键是order_id,其子表t_order_item的分片键也是order_id。在规则配置时将两个表配置成绑定关系,就不会在查询时出现笛卡尔积。

广播表

有一些表是没有分片的必要的,比如省份信息表,全国也就30多条数据,这种表在每一个节点上都是一样的,这种表叫做广播表。

简单来说

1)mycat是一个中间件的第三方应用,sharding-jdbc是一个jar包

2)使用mycat时不需要改代码,而使用sharding-jdbc时需要修改代码

4、关于分表策略通常分为三种

  • 取模

  • 范围分表-通常是时间

  • 城市-有明显业务特征的分表

时间范围策略通常用于冷热数据分离,例如美团限查近3个月的订单,量体比较大,而且历史数据使用相对较少

城市这种分表策略,类似于多租户的概念,业务处理场景一样,但是数据独立

分库分表技术方案选型 本文探讨了世面上常见的分库分表技术方案,包括Mycat、ShardingSphereJDBC、阿里tddl、OceanBase、PolarDB的基本原理,以及各方案实际应用中的优劣势。 阅读详情

相关推荐

分库分表中间件技术选型总结

之前工作做了下分库分表的技术选型,对现有的中间件进行了一番总结。最开始想用mycat的,毕竟名气大,但查阅了文档和结构,发现下面的分库分表面对的3个问题无法解决。最后选择使用sharding-jdbc,在jdbc层面做库表关联,更底层些。年后该框架作者去了京东,有单独的团队维护。分库分表面对的3个问题:    1.事务一致性:比如更新10张表,最后一张失败,怎样保证事务。    2.字典表问题:一...

bai020的博客 5399

MyCat和Sharding-JDBC的联系与区别

总结 ---- - `sharding-jdbc`作为一个组件集成在应用内,而`mycat`则作为一个独立的应用需要单独部署。 - 从架构上看sharding-jdbc更符合分布式架构的设计,直连数据库,没有中间应用,理论性能是最高的。 - 从耦合性来看,`sharding-jdbc`需要集成在应用内,`集成到代码里`,使得开发成本相对较高;而`mycat`大致上是无损开发,不需要怎么修改代码,交给mycat去托管,分库分表等代码无需太多关注。

★【World Of Moshow 郑锴】★ 1万+

分库分表算法方案与技术选型(一)算法方案

本文主要描述分库分表的算法方案、按什么规则划分。循序渐进比较目前出现的几种规则方式,最后第五种增量迁移方案是我设想和推荐的方式。后续章再讲述技术选型和分库分表后带来的问题。 背景 随着业务量递增,数据量递增,一个表将会存下大量数据,在一个表有一千万行数据时,通过sql优化、提升机器性能还能承受。为了未来长远角度应在一定程度时进行分库分表,如出现数据库性能瓶颈、增加字段时需要耗时比较长的时间的情况下...

地藏Kelvin的博客 1468

分库分表——基本概念以及shardingJdbc和Mycat对比

1、什么是分库分表 就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。 2、为什么分库分表 数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的...

漫漫长途,终有回转;余味苦涩,终有回甘 2万+

分库分表框架深度对决:ShardingSphere、MyCAT、Vitess,技术选型不再迷路!

对于大多数中国企业级应用,ShardingSphere是目前最平衡、最稳妥的选择。它既提供了丰富的功能满足复杂需求,又有活跃的社区支持快速解决问题。更重要的是,它的双模式架构(JDBC/Proxy)让你可以根据不同场景灵活选择。最后送给大家一句话:“技术选型不是选择最优秀的,而是选择最适合团队和业务现状的。你的项目是否也遇到了分库分表的挑战?欢迎在评论区分享你的经验和困惑!Apache ShardingSphere官方文档关注我,获取更多分布式系统实战经验分享作者简介。

marsjin的专栏 813

ShardingSphere 5.x 系列【3】分库分表中间件技术选型

在使用分库分表时,已经有成熟的开源解决方案,接下来我们进行相关技术选型。首先MyCat不考虑,被吹的太过,基本属于没人维护状态,听说该项目现在只是用来引流,加群付费,营销卖课。Vitess国外开源,生态良好,更新频繁,但是只支持MySql,对于现在国内某些有数据库要求的产品来说,不太友好。不是大型公司开源类的,不用考虑,现在经济形势这么差,谁也说不好能走多久,而且大部分都是给商用引流。大厂开源类的,不用考虑,基本都是他们不玩了,然后拿出来乐呵乐呵的。所以最后,只有一个选择,就是,背靠Apache。

记录知识、锤炼自我 2119

分库分表详细讲解及技术选型

分库分表是应对数据库性能瓶颈的常见方案,主要包括垂直拆分和水平拆分两种方式。垂直拆分按业务模块划分数据库或表结构,水平拆分则通过hash取模、range范围等方式分散数据到不同节点。分库解决高并发连接问题,分表处理单表数据量过大的性能瓶颈。但分库分表会带来事务、跨库关联、排序分页等挑战,需配合分布式ID方案(如雪花算法)使用。技术选型上,Sharding-JDBC等中间件可简化实现。总体而言,分库分表能有效提升系统扩展性,但需权衡复杂度与业务需求。

m0_37706622的博客 809

catia之车灯设计——灯玻加厚之后(单层灯玻、多层灯玻的设计)

加厚完A面后如果主机厂没有给其他的面我们该怎么做?

qq_19829077的博客 1304

海量数据分库分表方案(二)技术选型与sharding-jdbc实现

上一章已经讲述分库分表算法选型,本章主要讲述分库分表技术选型 文中关联上一章,若下文出现提及其时,可以点击 分库分表算法方案与技术选型(一) 主要讲述 框架比较 sharding-jdbc、zdal 代码实现样例,如需源码可在后文中查看 主键生成策略 可以按需阅读文章 常见框架 除了原生JDBC,网上常见分库分表框架有: 当当网 sharding-jdbc alibaba.cobar ...

地藏Kelvin 1074

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取 一、Sentinel-2简单介绍 哨兵-2系列卫星的主要载荷多光谱成像仪拥有13个谱段,从可见光到近红外再到短波红外,空间分辨率从10m到60m,能实现全所未有的陆地海洋监测水平。其幅宽高达290KM,且A、B双星组合,覆盖能力比美国Landsat8卫星强很多。目前哨兵-2A和哨兵-2B已经实现了5天的重访时间,即使在之前仅有单颗卫星时,...

weixin_44143671的博客 2万+

YOLO模型使用jupyterlab的方式进行预测/推理(示例)

首先相信很多使用过python的人都或多或少地了解过这个应用。是一个开源Web应用程序,可让用户创建和共享包含实时代码、公式、可视化和叙述文本的文档。用途包括:数据清理和转换、数值模拟、统计建模、等等。而Jupyter Lab则是Jupyter的下一代笔记本界面。是一个基于Web的交互式开发环境,用于Jupyter notebook、代码和数据。非常灵活,可支持数据科学、科学计算和机器学习领域的广泛工作。是可扩展和模块化的,其可编写插件来添加新组件并与现有组件相集成。

ocean00008899的博客 902

银行背景下分库分表技术选型

业务持续增长带来的单表数据量过大,必然影响到数据库的读写性能,那到底要不要分库分表呢?阿里巴巴P3C规范给出一个推荐:【推荐】单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分...

架构师小秘圈 588

在win10-wsl2(ubuntu)中安装jlink

在 官方下载linux版本的deb包拷贝到ubuntu的/home目录下(其他目录也可以),进行安装然后提示很多依赖缺失的错误,此时执行自动安装需要的依赖包再次重新安装就可以啦查看是否安装成功,输入JLink 再按下两次Table键,是否如下所示这样表示安装成功了。

yaq_30401的博客 3138

毕设学习日志--33.性能优化 分库分表 - 核心概念技术选型Sharding JDBC 实战

Sharding JDBC 是一个开源的分布式数据库中间件,它可以在 Java 应用程序和数据库之间提供分库分表的功能。Sharding JDBC 以 Jar 包的形式提供服务,无需额外部署,对应用程序的侵入性非常小,只需要在应用程序中添加相应的配置即可实现分库分表。

m0_72056325的博客 735

华为OD机考双机位C卷 - 评委评分 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 评委评分 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1750

YOLOv11改进 | 检测头篇 | 利用动态蛇形卷积DySnakeConv改进yolov11分割检测头(全网独家首发,Segment)

本文给大家带来的最新改进机制是一种我进行优化的专用于分割的检测头,在分割的过程中,最困难的无非就是边缘的检测,动态蛇形卷积(Dynamic Snake Convolution)通过自适应地聚焦于细长和迂回的局部结构,准确地捕捉管状结构的特征。这种卷积方法的核心思想是,通过动态形状的卷积核来增强感知能力,针对管状结构的特征提取进行优化,所以将这个卷积针对于YOLOv11的分割头进行融合是非常合适的,当然本文的检测头也支持用于目标检测,但是我将其设计出来是主要为了分割的读者使用的。

Snu77的博客 3430

MySQL 实现分库分表详解

分库分表方案是对关系型数据库数据存储和访问机制的一种补充。分库:将一个库的数据拆分到多个相同的库中,访问的时候访问一个库;分表:把一个表的数据放到多个表中,操作对应的某个表就行。

深入Java世界:探索编程之美与技术深度 894

二维光子晶体禁带的遗传优化算法实现

二维光子晶体禁带的遗传优化算法MATLAB源代码 光子晶体中因周期性结构而存在的频率禁带称为光子禁带,光子禁带的存在是光子晶体具有广泛应用前景的重要原因。 禁带越大,可控光的频带也越宽,因此如何设计合适的晶体结构以获得大的光子禁带一直是研究和应用的重点与热点。 给大家讲解在平面波展开法的基础上,使用遗传算法寻找具有最大光子禁带的二维光子晶体结构。 %-------------------------------------------------------------------------- % Ph

m0_53407570的博客 583

mysql分库分表技术选型时需要注意的点

首先需要明确的一些概念和问题: 原先:一个库一张表,即db和table。水平拆分之后:多个库多张表,即 { db1,db2,db3,… } 和 { table1,table2,table3,… },假设现在有物理机器 { server1,server2,server3,… },那么这三者之间的对应分配关系是?是一对多还是一对一? 在中间件看来,shard指的是db这个维度? 中间件目前对sq...

jeffrey11223的博客 768

【人工智能】架构师必读:大模型时代的意图识别 (Intent Recognition) 四大技术流派与实践指南

意图识别没有“银弹”,选择哪种方案取决于具体的业务需求、数据积累以及成本预算。如果追求极简与低成本,BERT 是不二之选。如果业务极其复杂且依赖上下文,RAG 或 Agent 模式更合适。如果追求极致的稳定与效果,基于 LLM 的微调 + Function Calling 是目前的行业最佳实践。参考资源:基于 LLM 的意图识别解决方案(Embedding 相关课程章节)

奶爸的编程之路,也就一周冷个三天 702

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

分库分表 vs 分布式数据库:技术选型实战指南

实际案例中,某电商平台从分库分表迁移到TiDB后,订单查询响应时间从800ms降至120ms。相比之下,TiDB的PD调度器能自动平衡数据分布,运维人力减少60%。分库分表初期成本低,但隐性成本随规模增长:某社交APP在用户破亿后,每年分片扩容成本增加300%。而分布式数据库原生支持ACID,如OceanBase的Paxos协议能保证金融级一致性,但会牺牲约15%-20%的吞吐量。实际使用发现,平台预置的分布式事务示例能帮助理解2PC与TCC的区别,比本地搭建环境节省80%时间。

GarnetFalcon73的博客 577

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

基于SpringCloudAlibaba的微服务分库分表架构设计

胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四维口袋KVP最具价值技术专家,技术领域专家团成员,2021电子工业出版社年度优秀作者,获得2023电子工业出版技术成长领路人称号,荣获2024年电子工业出版社博文视点20周年荣誉专家称号。

huxian1234的专栏 1766

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

分库分表实现-技术选型

一:常见框架 Sharding,tddl,mycat,mysql-proxy,atlas 二:分类 1.jdbc直连层: sharding(当当跳槽到京东),tddl(淘宝): 部分开源... 2.proxy代理层: mycat(开源社区),mysql-proxy(mysql官方),atlas 360(基于mysql-proxy) 对比: 代理层是需要走网络请求的,直连层相比代理层来讲性能有很明显的优势.我在这里是有个疑问的,直连层性能很明显是高于代理层的,那为啥代理层这些框架还有存在的意义呢?我专

乂夜秋风的博客 487
上一篇: vue-video.js-videojs-markers给视频进度条标记
下一篇: 微服务架构技术选型
_zxue
博客等级 码龄8年 4593粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_zxue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值