ShardingSphere的项目应用

 1. 事情的起因

最近,随着业务的发展,我们的项目面临着日益增长的数据挑战。系统使用的数据库是mysql,每天的增量差不多在百万左右,由于没有进行分库分表,以前设置的单表保存已经越发不能满足需求,所以想维持表的性能,甲方考虑对这些大数据量的表进行分表操作,同时也采用读写分离,将业务上的读写操作分开,提高系统性能。

项目团队接到了这个任务后,迅速召开了需求分析会议,深入探讨了技术可行性、业务需求、潜在风险以及架构选型。我们的目标是找到一个既能满足当前需求,又能为未来扩展留出空间的解决方案。

技术方案探讨

分表策略的抉择

我们评估了垂直分表和水平分表两种方案。垂直分表虽然可以减少单表的数据量,但需要将表中不同的字段拆分到不同的表中的操作,对现有系统会造成一定的冲击和潜在的维护成本,所以我们选择了更为稳妥的水平分表策略,将表中的数据按规则拆分到多个表中,分散数据量。

当然,项目组也有人推荐使用分库操作。但由于甲方经费受限等原因,这个提案只经过短短数秒就被Pass了,没有激起水花。

读写分离的共识

对于读写分离,团队倒是没啥争议点。MySQL的主从复制机制就可以为我们提供了现成的解决方案,且简化了配置过程。

业务需求的细化

确定分表分库的对象

我们明确了业务需求,确定哪些表需要进行分表分库,哪些操作需要读写分离。并根据业务特点设计了分表规则,如按时间戳、地域或ID等维度进行数据拆分。


数据迁移的策略

对于现有数据的迁移,我们制定了详细的迁移计划和步骤,确保数据的平滑过渡和最小化业务中断。

风险评定

数据一致性的保障

分表分库后,确保数据一致性成为我们面临的首要挑战。我们讨论了多种策略,以确保数据的准确性和完整性。

分布式事务的处理

跨库事务处理复杂。我们评估了多种分布式事务解决方案,以应对可能出现的事务管理问题。

查询逻辑的优化

分表分库后,查询可能需要跨多个表或库进行。我们需要对查询逻辑进行优化,以提高查询效率和响应速度。

技术选型与实施

分表分库中间件的比较

在MyCat和ShardingSphere之间,我们进行了深入的比较。两者都能够实现分表分库、读写分离,满足这次的任务需求。MyCat以其成熟度和易用性获得了团队的认可,但ShardingSphere以其灵活性和对复杂事务的支持,最终赢得了我们的青睐。

ShardingSphere是一个分布式数据库中间件,提供了分库分表、读写分离、分布式事务等多种功能,可以与Spring、SpringBoot等主流框架无缝整合,灵活性更高,特别适合对灵活性和扩展性有较高需求,或需要处理复杂的分布式事务的项目。

 

2. 项目实践:ShardingSphere在分布式数据库中的应用

在项目使用ShardingSphere之前,根据ShardingSphere的官方文档,我们可以获得一些基本信息

ShardingSphere概览

Apache ShardingSphere 是一款分布式的数据库生态系统,可以将任意数据库转换为分布式数据库,它提供了一系列的分布式数据库解决方案,包括数据分片(Sharding)、读写分离(Read-Write Splitting)、数据加密(Data Encryption)、分布式事务    、数据迁移    等功能。ShardingSphere 的目标是帮助用户轻松地管理和扩展他们的数据库,同时保持高可用性和高性能。

核心组件
  • Sharding-JDBC:一个轻量级的 Java 框架,提供 JDBC 接口的分布式数据库支持。
  • Sharding-Proxy:一个透明的数据库代理,支持 MySQL 和 PostgreSQL 协议,可以将单机数据库转换为分布式数据库。
  • Sharding-Sidecar:一个基于 Kubernetes 的云原生数据库代理。
主要特性
  • 灵活性:支持多种分片策略和自定义分片算法。
  • 透明性:对应用层透明,应用无需修改代码即可使用。
  • 扩展性:支持水平扩展,能够处理大规模数据和高并发请求。
  • 兼容性:支持多种数据库,包括 MySQL、PostgreSQL、Oracle 等。

ShardingSphere在项目各阶段的应用分析

本项目为分布式系统,ShardingSphere 的应用贯穿了从需求分析到系统上线的全过程,具体分为以下五个关键阶段:

需求分析阶段
  • 虽然在一开始就已经简单分析,但还是需要单独有个阶段细化业务需求,以保证需求准确无误。
  • 确定系统的数据量、访问量和业务需求。
  • 明确数据分片的维度和策略。
开发阶段
  • 根据需求分析的结果,配置ShardingSphere的分片规则和读写分离、数据加密等操作。
  • 使用 Sharding-JDBC,将其集成到应用的 JDBC 层,通过配置数据源和分片规则来实现。
  • 开发人员需要编写代码来集成ShardingSphere,并确保应用程序能够正确地与分片数据库进行交互。
  • 开发自定义的分片算法,并将其集成到ShardingSphere中。
测试阶段
  • 进行单元测试,确保每个分片逻辑和数据库读写操作都能正确执行。

  • 进行集成测试,验证整个系统在分片环境下的性能和稳定性。

  • 进行负载测试,模拟高并发情况,确保系统能够处理大量数据和请求。

部署阶段
  • 将应用部署到生产环境,并监控 ShardingSphere 和数据库的性能。
  • 配置生产环境的数据库和网络,确保所有分片节点能够正常通信。
  • 监控系统的初始运行情况,确保没有配置错误或性能问题。
数据迁移阶段
  • 如果项目需要从非

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL left join、right join以及inner join的区别 ?

LEFT JOIN(左连接)、RIGHT JOIN(右连接)和INNER JOIN(内连接)是SQL中用于连接两个或多个表以检索数据的重要操作。它们之间的主要区别在于如何处理那些在连接条件下没有匹配的行。下面通过具体的例子来说明…

扫地机器人如何解决安全性与隐私保护

扫地机器人在解决安全性与隐私保护方面,需要从多个角度入手,包括产品设计、技术实现、用户教育以及法律法规遵守等方面。以下是具体的解决方案: 一、安全性解决方案 1.提升避障能力:使用先进的传感器技术,如激光雷达、…

JavaScript switch 语句

JavaScript switch 语句 JavaScript 中的 switch 语句是一种多分支选择结构,用于根据变量的值执行不同的代码块。它提供了一种简洁的方式来替代多个 if...else 语句,特别是在处理多个条件时。 基本语法 switch (expression) {case value1:// 代码块 1…

微信小程序实现省市区级联选择组件

微信小程序实现省市区级联选择组件 首先&#xff0c;创建一个新的组件&#xff0c;命名为 area-picker。 在 area-picker.wxml 文件中添加以下代码&#xff1a; <view class"area-picker"><picker mode"multiSelector" bindchange"onPick…

C++基础篇(2)

目录 前言 1.缺省参数 2.函数重载 2.1函数重载的基本规则 ​编辑2.2注意事项 2.3 重载解析&#xff08;Overload Resolution&#xff09;--补充内容 3.引用 3.1引用的概念和定义 3.2引用的特性 3.3引用的使用 3.4const引用 4.指针和引用的关系 结束语 前言 上节小编…

PlantUML 教程:绘制时序图

绘制时序图是 PlantUML 的一个强大功能&#xff0c;下面是详细的 PlantUML 时序图教程&#xff0c;帮助你理解如何使用它来创建清晰的时序图。 基本概念 时序图&#xff08;Sequence Diagram&#xff09;用于展示对象之间的交互以及它们之间的消息传递顺序。它主要由以下元素…

感应灯光画纯电路开源版本

前言 之前那版灯光画用的从垃圾佬淘的电路板拼出来的&#xff0c;功能不全&#xff0c;显示效果不太好而且无法固定到相框上&#xff0c;这次改版用的嘉立创smt&#xff0c;贴了5片板子&#xff08;19元&#xff09;&#xff0c;功能上的改进是加了无极触摸调光、添加了黄白两…

简易图书管理系统——MYsql+Javase+JDBC

目录 前言 数据表的建立 操作包各个类的实现 增加类 删除类 展示类 借阅与归还类 前言 书接上文 JDBC编程的学习——MYsql版本-CSDN博客 本期我们通过对先前图书管理系统进行改造,是它的数据能保存在数据库中 完整代码我已经保存在github中,能不能给个星呢!!!! call…

debian固定ip

debian固定ip 前言 安装好的Debian系统后&#xff0c;为了确保每次登陆的ip不变&#xff0c;需要固定 方法 命令如下 ip addr | grep inet因为有有线网和无线网 2 种连接方式&#xff0c;因此需要区别。 其中 enp 的是有线&#xff0c;wlp 的是无线 查看网关 IP 命令如下 …

互联网末法时代的一些思考

这篇文章也是临时起意&#xff0c;很长一段时间没写个人思考类的文章&#xff0c;主要原因也是时间完全不够用。随着年龄的增长&#xff0c;看待问题的视角也逐渐发生变化&#xff0c;例如从关注现象到关注动机&#xff0c;从关注结果到关注起因&#xff0c;2021年的时代我曾经…

java面向对象进阶篇--static

一、前言 java进阶篇已经开始了&#xff0c;先从面向对象开始&#xff0c;由于时间原因今天就只更新了static部分&#xff0c;内容上特别详细&#xff0c;一些特别的注意事项也在反复的提醒大家。 温馨提示一下&#xff0c;往后的java篇会越来越难&#xff0c;希望大家能够坚…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

运维检查:mysql表自增id是否快要用完

数据库表中最大自增ID用完会报错。判断是否接近或达到自增ID类型的最大值&#xff1a;‌ 对于MySQL中的自增ID&#xff0c;‌如果使用的是int类型&#xff0c;‌其无符号&#xff08;‌unsigned&#xff09;‌的最大值可以达到2^32 - 1&#xff0c;‌即4294967295。‌如果使用的…

python编程:从入门到实践(第三版) 笔记

文章目录 资源网站:https://www.ituring.com.cn/book/3038配置VSCode推荐资源网站推荐资源网址 资源网站:https://www.ituring.com.cn/book/3038 配置VSCode 推荐资源网站 推荐资源网址 英文版主页&#xff1a; https://ehmatthes.github.io/pcc_3e 中文版主页&#xff1a; h…

上市公司企业共同机构所有权数据、机构交叉持股数据(2005-2023)

数据来源&#xff1a;基础数据来源于上市公司企业年报 时间跨度&#xff1a;2005-2023年 数据范围&#xff1a;企业层面 数据指标&#xff1a; 参考《中国工业经济》杜勇&#xff08;2021&#xff09;老师的做法&#xff0c;从 3 个维度构造指标反映上市公司共同机构所有权&…

Vue和Element UI 路由跳转

在Vue.js中&#xff0c;使用Vue Router可以方便地实现页面之间的路由跳转。Element UI是一个基于Vue 2.0的桌面端组件库&#xff0c;它本身并不直接提供路由跳转的功能&#xff0c;但你可以在使用Element UI的Vue项目中结合Vue Router来实现这一功能。 以下是一个基于Vue和Ele…

Proxyman for Mac v5.6.1 抓包调试工具

Mac分享吧 文章目录 效果一、下载软件二、功能三、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 四、运行测试1、打开软件 安装完成&#xff01;&#xff01;&#xff01; 效果 一…

【华为OD笔试】2024D卷命题规律解读【分析300+场OD笔试考点总结】

可上 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1441了解算法冲刺训练&#xff08;备注【CSDN】否则不通过&#xff09; 文章目录 相关推荐阅读华为OD笔试2024D卷命题规律解读华为OD算法/大厂面试高频题算法练习冲刺训练 相关推荐阅读 【华为OD笔试】2024D卷机考套题…

C# Opencv实现本地以图搜图

地址&#xff1a;冯腾飞/本地以图搜图

Java面试八股之Redis哨兵机制

Redis哨兵机制 Redis Sentinel&#xff08;哨兵&#xff09;模式是一种高可用解决方案&#xff0c;用于监控和自动故障转移Redis主从集群。以下是对哨兵模式详细过程的描述&#xff1a; 1. 初始化与配置 部署哨兵节点&#xff1a;在不同的服务器上部署一个或多个Redis Sentin…