·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
DZ插件网 门户 网站安全 查看内容

别再分库分表了!这款开源数据库绝对惊艳,太香了!

2024-10-8 17:07| 发布者: Crystαl| 查看: 92532| 评论: 0

摘要: mall学习教程官网:macrozheng.com当我们使用 Mysql数据库到达一定量级以后,性能就会逐步下降,而解决此类问题,常用的手段就是引入数据库中间件进行分库分表处理,比如使用 Mycat、ShadingShpere、tddl,但是这种 ...

别再分库分表了!这款开源数据库绝对惊艳,太香了!3678 作者: 来源: 发布时间:2024-10-8 17:07

mall学习教程官网:macrozheng.com

当我们使用 Mysql数据库到达一定量级以后,性能就会逐步下降,而解决此类问题,常用的手段就是引入数据库中间件进行分库分表处理,比如使用 MycatShadingShperetddl,但是这种都是过去式了,现在使用分布式数据库可以避免分库分表

为什么不建议分库分表呢?


分库分表以后,会面临以下问题
  • 分页问题,例如:使用传统写法,随着页数过大性能会急剧下降
  • 分布式事务问题
  • 数据迁移问题,例如:需要把现有数据通过分配算法导入到所有的分库中
  • 数据扩容问题,分库分表的数据总有一天也会到达极限,需要增大分片
  • 开发模式变化,比如在请求数据时,需要带分片键,否则就会导致所有节点执行
  • 跨库跨表查询问题
  • 业务需要进行一定取舍,由于分库分表的局限性,有些场景下需要业务进行取舍

以上只是列举了一部分问题,为了避免这些问题,可以使用分布式数据库TiDB来处理

TiDB介绍


TiDB 是 PingCAP 公司研发的一款开源分布式关系型数据库,从 2015年 9 月开源,至今已经有9 年时间,可以说已经非常成熟,它是一款同时支持OLTP(在线事务处理)和OLAP(在线分析处理)的融合型分布式数据库产品,具备水平扩缩容,金融级高可用、实时 HTAP(Hybrid Transactional and Analytical Processing)、云原生的分布式数据库,兼容 MySQL 5.7 协议和 MySQL 生态等重要特性,它适合高可用、强一致要求较高、数据规模较大等各种应用场景。

核心特性

  • 金融级高可用
  • 在线水平扩容或者缩容,并且存算分离
  • 云原生的分布式数据库,支持部署在公有云,私有云,混合云中
  • 实时HTAP,提供TIKV行存储引擎和TiFlash列存储引擎
  • 兼容MySQL协议和MySQL生态
  • 分布式事务强一致性
  • 从 MySQL 无缝切换到 TiDB,几乎无需修改代码,迁移成本极低
  • PD在分布式理论CAP方面满足CP,是强一致性的

应用场景

  • 对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高的金融行业属性的场景
  • 对存储容量、可扩展性、并发要求较高的海量数据及高并发的OLTP场景
  • 数据汇聚、二次加工处理的场景

这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot + Vue + uni-app 实现的电商系统(Github标星60K),采用Docker容器化部署,后端支持多模块和微服务架构。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!
  • Boot项目:https://github.com/macrozheng/mall
  • Cloud项目:https://github.com/macrozheng/mall-swarm
  • 视频教程:https://www.macrozheng.com/video/

项目演示:
别再分库分表了!这款开源数据库绝对惊艳,太香了!5024 作者: 来源: 发布时间:2024-10-8 17:07

案例


TiDB 有1500 多家不同行业的企业应用在了生产环境,以下是一些有代表性企业,要想查看更多案例,可以访问TiDB 官网查询

别再分库分表了!这款开源数据库绝对惊艳,太香了!7212 作者: 来源: 发布时间:2024-10-8 17:07

系统架构


别再分库分表了!这款开源数据库绝对惊艳,太香了!6137 作者: 来源: 发布时间:2024-10-8 17:07

TIDB Server


SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接收SQL请求,处理SQL相关的逻辑,并通过PD找到存储计算所需数据的TiKV地址,与TiKV交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(LVS、HAProxy或F5)对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。

PD Server


整个集群的管理模块,其主要工作有三个:
  1. 存储集群的元信息(某个Key存储在那个TiKV节点);
  2. 对TiKV集群进行调度和负载均衡、Leader选举;
  3. 分配全局唯一且递增的事务ID。

PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署3个节点。PD在选举的过程中无法对外提供服务,这个时间大约是3秒。

TIKV Server


别再分库分表了!这款开源数据库绝对惊艳,太香了!2614 作者: 来源: 发布时间:2024-10-8 17:07

TiDB 现在同时支持OLTP 和 OLAP,而TiKV负责存储OLTP数据,从外部看TiKV是一个分布式的提供事务的Key-Value存储引擎。存储数据的基本单位是Region,每个Region负责存储一个Key Range(从StartKey到EndKey的左闭右开区间)的数据,每个TiKV节点会负责多个Region。

TiKV如何做到数据不丢失?


别再分库分表了!这款开源数据库绝对惊艳,太香了!3488 作者: 来源: 发布时间:2024-10-8 17:07

简单理解,就是把数据复制到多台机器上,这样一个节点down 机,其他节点上的副本还能继续提供服务;复杂理解,需要这个数据可靠并且高效复制到其他节点,并且能处理副本失效的情况,那怎么做呢,就是使用 Raft一致性算法

Region 与副本之间通过 Raft 协议来维持数据一致性,任何写请求都只能在 Leader 上写入,并且需要写入多数副本后(默认配置为 3 副本,即所有请求必须至少写入两个副本成功)才会返回客户端写入成功。

分布式事务支持


TiKV 支持分布式事务,我们可以一次性写入多个 key-value 而不必关心这些 key-value 是否处于同一个数据切片 (Region) 上,TiKV 的分布式事务参考了Google 在 BigTable 中使用的事务模型Percolator,具体可以访问论文了解

与MySQL的对比

支持的特性

  • 支持分布式事务,原理是基于Google Percolator,Percolator是基于Bigtable的,所以数据结构直接使用了Bigtable的Tablet。详情可参考https://zhuanlan.zhihu.com/p/39896539
  • 支持锁,TIDB是乐观锁 +MVCC ,MySQL是悲观锁+MVCC,要注意TIDB执行Update、Insert、Delete时不会检查冲突,只有在提交时才会检查写写冲突,所以在业务端执行SQL语句后,要注意检查返回值,即使执行没有出错,提交的时候也可能出错。

不支持的功能特性

  • 不支持存储过程、函数、触发器
  • 自增id只支持在单个TIDB Server的自增,不支持多个TIDB Server的自增。
  • 外键约束
  • 临时表
  • Mysql追踪优化器
  • XA 语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开)

资源使用情况

以下内容参考:https://pingcap.medium.com/an-8x-system-performance-boost-why-we-migrated-from-mysql-to-a-newsql-database-a42570ab765a
TiDB 具有很高的数据压缩比,MySQL 中的 10.8 TB 数据在 TiDB 中变成了 3.2 TB,还是三副本的总数据量。因此,MySQL 与 TiDB 的空间使用比例为 3.4:1。

别再分库分表了!这款开源数据库绝对惊艳,太香了!6466 作者: 来源: 发布时间:2024-10-8 17:07

同等量级,使用2 年以后,资源使用情况
  • MySQL使用32 个节点,而 TiDB 只有 14 个
  • MySql 用了 512 个 CPU 核心,而 TiDB 将仅使用 224 个,不到 MySQL 的一半。
  • MySQL 使用 48 TB 存储空间,而 TiDB 将使用 16 TB,仅为 MySQL 的 1/3。

别再分库分表了!这款开源数据库绝对惊艳,太香了!4813 作者: 来源: 发布时间:2024-10-8 17:07

别再分库分表了!这款开源数据库绝对惊艳,太香了!8664 作者: 来源: 发布时间:2024-10-8 17:07

性能测试

测试报告 1

来源:https://www.percona.com/blog/a-quick-look-into-tidb-performance-on-a-single-server/
五个 ecs 实例,使用了不同配置,以此测试
  • t2.medium:2 个 CPU 核心
  • x1e.xlarge:4 个 CPU 核心
  • r4.4xlarge:16 个 CPU 核心
  • m4.16xlarge:64 个 CPU 核心
  • m5.24xlarge:96 个 CPU 核心

MySQL 中的数据库大小为 70Gb,TiDB 中的数据库大小为 30Gb(压缩)。该表没有二级索引(主键除外)。

测试用例
  1. 简单计数(*):
 select count(*) from ontime;
  1. 简单分组依据
 select count(*), year from ontime group by year order by year;
  1. 用于全表扫描的复杂过滤器
select * from ontime where UniqueCarrier = 'DL' and TailNum = 'N317NB' and FlightNum = '2' and Origin = 'JFK' and Dest = 'FLL' limit 10;
  1. 复杂的分组依据和排序依据查询
select SQL_CALC_FOUND_ROWS
FlightDate, UniqueCarrier as carrier,
FlightNum,
Origin,
Dest
FROM ontime
WHERE
DestState not in ('AK', 'HI', 'PR', 'VI')
and OriginState not in ('AK', 'HI', 'PR', 'VI')
and flightdate > '2015-01-01'
and ArrDelay < 15
and cancelled = 0 and Diverted = 0 
and DivAirportLandings = '0'   
ORDER by DepDelay DESC
LIMIT 10;

下图表示结果(条形表示查询响应时间,越小越好):

别再分库分表了!这款开源数据库绝对惊艳,太香了!7450 作者: 来源: 发布时间:2024-10-8 17:07

系统基准测试


在 m4.16xlarge 实例上使用 Sysbench 进行点选择(意味着通过主键选择一行,线程范围从 1 到 128)(内存限制:无磁盘读取)。结果在这里。条形代表每秒的交易数量,越多越好:

别再分库分表了!这款开源数据库绝对惊艳,太香了!4374 作者: 来源: 发布时间:2024-10-8 17:07

系统测试报告 2

来源:https://www.dcits.com/show-269-4103-1.html

硬件配置


别再分库分表了!这款开源数据库绝对惊艳,太香了!4802 作者: 来源: 发布时间:2024-10-8 17:07

别再分库分表了!这款开源数据库绝对惊艳,太香了!8178 作者: 来源: 发布时间:2024-10-8 17:07

测试场景


别再分库分表了!这款开源数据库绝对惊艳,太香了!6404 作者: 来源: 发布时间:2024-10-8 17:07

测试分两阶段进行,第一阶段测试数据为100万单,第二阶段测试数据为1300万单。在此基础上,使用Jmeter压力测试10万单结果如下:

别再分库分表了!这款开源数据库绝对惊艳,太香了!1066 作者: 来源: 发布时间:2024-10-8 17:07

别再分库分表了!这款开源数据库绝对惊艳,太香了!5577 作者: 来源: 发布时间:2024-10-8 17:07

从测试结果来看,在小数据量mysql性能是好于TiDB,因为 TiDB 是分布式架构,如果小数据量,在网络通讯节点分发一致性等方面花的时间就很多,然后各个节点执行完还要汇总返回,所以开销是比较大的,但是数据量一上来TiDB 优势就体现出来了,因此数据量比较小,没必要使用 TiDB

总结


以上介绍了 TiDB架构,以及它的一些特性,同时也与 mysql 进行了对比,如果贵司的数据量比较大,正在考虑要分库分表,那么完全可以使用它,来避免分库分表,分库分表是一个过渡方案,使用分布式数据库才是终极方案。同时如果贵司的数据量比较小,那么就没必要引入了


Github上标星60K的电商实战项目mall,全套 视频教程(2023最新版) 已更新完毕!全套教程约40小时,共113期,通过这套教程你可以拥有一个涵盖主流Java技术栈的完整项目经验,同时提高自己独立开发一个项目的能力,下面是项目的整体架构图,感兴趣的小伙伴可以点击链接 mall视频教程 加入学习。

别再分库分表了!这款开源数据库绝对惊艳,太香了!7733 作者: 来源: 发布时间:2024-10-8 17:07

整套 视频教程 的内容还是非常完善的,涵盖了mall项目最佳学习路线、整体框架搭建、业务与技术实现全方位解析、线上Docker环境部署、微服务项目学习等内容,具体大纲可以参考下图,你也可以点击链接 mall视频教程 了解更多内容。

别再分库分表了!这款开源数据库绝对惊艳,太香了!4665 作者: 来源: 发布时间:2024-10-8 17:07

推荐阅读

  • 69K Star!这是我见过最强的开源电商系统 !!
  • Github标星60K!一套完整的项目实战教程来了,主流Java技术一网打尽!
  • 看了我项目中购物车、订单、支付一整套设计,同事也开始悄悄模仿了...
  • 订单系统就该这么设计,稳的一批!
  • 支付系统就该这么设计,稳的一批!
  • 权限系统就该这么设计,稳的一批!





上一篇:腾讯设计开放平台深度参与城市礼物创意设计大赛
下一篇:证据长达 62 页,WP Engine 正式起诉 WordPress 公司及创始人.

鲜花

握手

雷人

路过

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.219.81.99,GMT+8, 2025-5-7 04:32 , Processed in 0.175296 second(s), 42 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯
扫一扫添加微信客服
QQ客服返回顶部
返回顶部