干货 | 数据为王,携程国际火车票的Sharding-Sphere之路

携程API接口与旅游大数据的结合 通过合理利用携程API接口获取的旅游数据,并结合旅游大数据的分析方法,企业可以深入了解市场动态和消费者需求,制定更加精准的市场策略和产品方案,提升市场竞争力和用户满意度。未来,随着技术的不断进步和应用场景的不断拓展,携程API接口与旅游大数据的结合将在旅游行业中发挥更加重要的作用。携程API接口提供的旅游数据,为旅游大数据的分析提供了有力的支持。携程API接口是携程开放平台提供的一系列应用程序接口,通过这些接口,开发者可以获取携程平台上的旅游数据,包括酒店、机票、旅游线路等各方面的信息。 阅读详情

作者简介

 

瑞华,携程高级后端开发工程师,关注系统架构、分库分表、微服务、高可用等。

一、前言

随着国际火车票业务的高速发展,订单量快速增长,单数据库瓶颈层面的问题逐渐显露,常规的数据库优化已无法达到期望的效果。同时,原先的底层数据库设计,也存在一些历史遗留问题,比如存在部分无用字段、表通过自增主键关联和各个应用直连数据库等问题。

为此,经过讨论后,我们决定对订单库进行分库分表,同时对订单表进行重构,进而从根本上解决这些问题。


二、问题挑战

目标确定后,实践起来可不轻松,出现了很多的问题和挑战。这里列举一些典型问题,大致可以分为两大类:分库分表通用问题、具体业务关联问题。

分库分表通用问题

  • 如何切分,垂直分还是水平分?分片的键,如何选取?

  • 如何根据键值路由到对应库、对应表?

  • 采用什么中间件,代理方式还是中间件的方式?

  • 跨库操作等问题,如跨库事务和跨库关联?

  • 数据扩容问题,后续如何进行扩容?

具体业务关联问题

  • 各个应用直连数据如何解决?

  • 如何进行平滑过渡?

  • 历史数据如何恰当迁移?


三、方案选型


3.1 如何切分

切分方式,一般分为垂直分库、垂直分表、水平分库和水平分表四种,如何选择,一般是根据自己的业务需求决定。

我们的目标是要从根本上解决数据量大、单机性能问题等问题,垂直方式并不能满足需求,所以我们选取了水平分库+水平分表的切分方式。


3.2 分片键选取

一般是根据自己的实际业务,来选择字段来作为分片的键,同时可以结合考虑数据的热点问题 、分布问题。比如订单系统,不能根据国家字段进行分片,否则可能会出现某些国家很多的订单记录,某些国家几乎没有订单记录,进而数据分布不均。相对正确的方式,比如订单类系统,可以选择订单ID;会员系统,可以选择会员ID。


3.3 如何路由

选定了分片的键之后,接下来需要探讨的问题,就是如何路由到具体的数据库和具体的表。以分片键路由到具体某一个数据库为例,常见的路由方式如下:


映射路由

映射路由,即新增一个库,新建一个路由映射表,存储分片键值和对应的库之间的映射关系。比如,键值为 1001,映射到 db01 这个数据库,如下图所示:

映射方式,优点是映射方式可任意调整,扩容简单,但是存在一个比较严重的不足,就是映射库中的映射表的数据量异常巨大。我们本来的目标是要实现分库分表的功能,可是现在,映射库映射表相当于回到了分库分表之前的状态。所以,我们在实践中,没有采取这种方式。


分组路由

分组路由,即对分片的键值,进行分组,每组对应到一个具体的数据库。比如,键值为 1000到2000,则存储到 db01 这个数据库,如下图所示:

分组方式,优点是扩容简单,实现简单,但是也存在一个比较严重的不足,是数据分布热点问题,比如在某一个时间内,分片键值为2001,则在将来一段时间内,所有的数据流量,全部打到某一个库(db02)。这个问题,在互联网环境下,也比较严重,比如在一些促销活动中,订单量会有一个明显的飙升,这时候各个数据库不能达到分摊流量的效果,只有一个库在接收流量,会回到分库分表之前的状态。所以,我们也没有采取这种方式。


哈希路由

哈希路由,即对分片的键值,进行哈希,然后根据哈希结果,对应到一个具体的数据库。比如,键值为 1000,对其取哈希的结果为 01,则存储到 db01 这个数据库,如下图所示:

哈希方式,优点是分布均匀,无热点问题,但是反过来,数据扩容比较麻烦。因为在扩容过程中,需要调整哈希函数,随之带出一个数据迁移问题。互联网环境下,迁移过程中往往不能进行停服,所以就需要类似多库双写等方式进行过渡,比较麻烦。所以,在实践中也没有采取这种方式。


分组哈希路由

分组哈希路由,即对分片的键值,先进行分组,后再进行哈希。如下图所示:

在实践中,我们结合了前面的几种方式,借鉴了他们的优点不足,而采用了此种方式。因为分组方式,能很方便的进行扩容,解决了数据扩容问题;哈希方式,能解决分布相对均匀,无单点数据库热点问题。


3.4 技术中间件

分库分表的中间件选取,在行业内的方案还是比较多的,公司也有自己的实现。根据实现方式的不同,可以分为代理和非代理方式,下面列举了一些业界常见的中间件,如下表(截至于2021-04-08):

我们为什么最终选择了 Sharding-Sphere 呢?主要从这几个因素考虑:


技术环境
  • 我们团队是Java体系下的,对Java中间件有一些偏爱

  • 更偏向于轻量级组件,可以深入研究的组件

  • 可能会需要一些个性定制化


专业程度
  • 取决于中间件由哪个团队进行维护,是否是名师打造,是否是行业标杆

  • 更新迭代频率,最好是更新相对频繁,维护较积极的

  • 流行度问题,偏向于流行度广、社区活跃的中间件

  • 性能问题,性能能满足我们的要求


使用成本
  • 学习成本、入门成本和定制改造成本

  • 弱浸入性,对业务能较少浸入

  • 现有技术栈下的迁移成本,我们当前技术栈是SSM体系下


运维成本
  • 高可用、高稳定性

  • 减少硬件资源,不希望再单独引入一个代理中间件,还要考虑运维成本

  • 丰富的埋点、完善的监控


四、业务实践

在业务实践中,我们经历了从新库新表的设计,分库分表自建代理、服务收口、上游订单应用迁移,历史数据迁移等过程。


4.1 新表模型

为了建立分库分表下的关联关系,和更加合理有效的结构,我们新申请了订单分库分表的几个库,设计了一套全新的表结构。表名以年份结尾、规范化表字段、适当增删了部分字段、不使用自增主键关联,采用业务唯一键进行关联等。

表结构示例如下图:

4.2 服务收口

自建了一个分库分表数据库的服务代理 Dal-Sharding。每一个需要操作订单库的服务,都要通过代理服务进行操作数据库,达到服务的一个收口效果。同时,屏蔽了分库分表的复杂性,规范数据库的基本增删改查方法。

4.3 平滑过渡

应用迁移过程中,为了保证应用的平滑过渡,我们新增了一些同步逻辑,来保证应用的顺利迁移,在应用迁移前后,对应用没有任何影响。未迁移的应用,可以读取到迁移后应用写入的订单数据;迁移后的应用,能读取到未迁移应用写入的订单数据。同时,统一实现了此逻辑,减少各个应用的迁移成本。

新老库双读

顾名思义,就是在读取的时候,两个库可能都要进行读取,即优先读取新库,如果能读到记录,直接返回;否则,再次读取老库记录,并返回结果。

双读的基本过程如下:

新老库双读,保证了应用迁移过程中读取的低成本,上游应用不需要关心数据来源于新的库还是老的库,只要关心数据的读取即可,减少了切换新库和分库分表的逻辑,极大的减少了迁移的工作量。

实践过程中,我们通过切面实现双读逻辑,将双读逻辑放入到切面中进行,减小新库的读取逻辑的侵入,方便后面实现对双读逻辑的移除调整。

同时,新增一些配置,比如可以控制到哪些表需要进行双读,那些表不需要双读等。

新老库双写

新老库双写,就是在写入新库成功后,异步写入到老库中。双写使得新老库都同时存在这些订单数据,尚未迁移通过代理服务操作数据库的应用得以正常的运作。

双写的基本过程如下:

双写其实有较多的方案,比如基于数据库的日志,通过监听解析数据库日志实现同步;也可以通过切面,实现双写;还可以通过定时任务进行同步;另外,结合到我们自己的订单业务,我们还可以通过订单事件(比如创单成功、出票成功、退票成功等),进行双写,同步数据到老库中。

目前,我们经过考虑,没有通过数据库日志来实现,因为这样相当于把逻辑下沉到了数据库层面,从实现上不够灵活,同时,可能还会涉及到一些权限、排期等问题。实践中,我们采取其他三种方式,互补形式,进行双写。异步切面双写,保证了最大的时效性;订单事件,保证了核心节点的一致性;定时任务,保证了最终的一致性。

跟双读一样,我们也支持配置控制到哪些表需要进行双写,那些表不需要双写等。

过渡迁移

有了前面的双读双写作为基础,迁移相对容易实行,我们采取逐个迁移的方式,比如,按照服务、按照渠道和按照供应进行迁移,将迁移工作进行拆解,减少影响面,追求稳健。一般分为三步走方式:

1)第一阶段,先在新对接的供应商中进行迁移新库,因为新上线的供应商,订单量最少,同时哪怕出现了问题,不至于影响到之前的业务。

2)再次迁移量比较少的线上业务,此类订单,有一些量,但是追求稳定,不能因为切换新库而产生影响。所以,将此类业务放到了第二阶段中进行。

3)最后一步是,将量较大的业务,逐渐迁移到新库中,此类业务,需要在在有前面的保证后,方能进行迁移,保证订单的正常进行。


4.4 数据迁移

数据迁移,即将数据,从老库迁移到新库,是新老库切换的一个必经过程。迁移的常规思路,一般是每个表一个个进行迁移,结合业务,我们没有采取此做法,而是从订单维度进行迁移。

举个例子:假如订单库有Order表、OrderStation表、OrderFare表三个表,我们没有采取一个一个表分别进行迁移,而是根据订单号,以每一个订单的信息,进行同步。

大致过程如下:

1)开启一个定时任务,查询订单列表,取得订单号等基本订单信息。

2)根据这个订单号,去分别查询订单的其他信息,取得一个完整的订单信息。

3)校验订单是否已经完成同步,之前完成同步了则直接跳过,否则继续执行下一个订单号。

4)将老库的完整的订单信息,映射成新库的对应的模型。

5)将新的订单信息,同步写入到新库各个表中。

6)继续执行下一个订单号,直到所有的订单号都完全同步结束。


4.5 完成效果

订单库经过一个全新的重构,目前已经在线上稳定运行,效果显著,达到了我们想要的效果。

  • 服务收口,将分库分表逻辑,收口到了一个服务中;

  • 接口统一管理,统一对敏感字段进行加密;

  • 功能灵活,提供丰富的功能,支持定制化;

  • 分库分表路由透明,且基于主流技术,易于上手;

  • 完善的监控,支持到表维度的监控;


五、常见问题总结


5.1 分库分表典型问题

问题1:如何进行跨库操作,关联查询,跨库事务?

回答:对于跨库操作,在订单主流程应用中,我们目前是禁止了比如跨库查询、跨库事务等操作的。对于跨库事务,因为根据订单号、创建年份路由,都是会路由到同一个数据库中,也不会存在跨库事务。同样对于跨库关联查询,也不会存在,往往都是根据订单来进行查询。同时,也可以适当进行冗余,比如存储车站编码的同时,多存储一个车站名称字段。

问题2:如何进行分页查询?

回答:目前在订单主流程应用中的分页查询,我们直接采用了Sharding-JDBC提供的最原始的分页方式,直接按照正常的分页SQL,来进行查询分页即可。理由:主流程订单服务,比如出票系统,往往都是查询前面几页的订单,直接查询即可,不会存在很深的翻页。当然,对于要求较高的分页查询,可以去实现二次查询,来实现更加高效的分页查询。

问题3:如何支持很复杂的统计查询?

回答:专门增加了一个宽表,来满足那些很复杂查询的需求,将常用的查询信息,全部落到此表中,进而可以快速得到这些复杂查询的结果。


5.2 API方法问题

问题:服务收口后,如何满足业务各种不同的查询条件?

回答:我们的API方法,相对固定,一般查询类只有两个方法,根据订单号查询,和根据Condition查询条件进行查询。对于各种不同的查询条件,则通过新增Condition的字段属性来实现,而不会新增各种查询方法。


5.3 均匀问题

问题:在不同group中,数据会存在分布不均匀,存在热点问题?

回答:是的,比如运行5年后,我们拓展成了3个group,每一个group中存在3个库,那么此时,读写最多的应该是第三个group。不过这种分布不均匀问题和热点问题,是可接受的,相当于前面的两个group,可以作为历史归档group,目前主要使用的group为第三个group。

随着业务的发展,你可以进行调配,比如业务发展迅速,那么相对合理的分配,往往不会是每个group是3个库,更可能是应该是,越往后group内的库越多。同时,因为每个group内是存在多个库,与之前的某一个库的热点问题是存在本质差别,而不用担心将单数据库瓶颈问题,可以通过加库来实现扩展。


5.4 Group内路由问题

问题:对于仅根据订单号查询,在group内的路由过程是读取group内所有的表吗?

回答:根据目前的设计,是的。目前是按年份分组,订单号不会存储其他信息,采用携程统一方式生成,也就是如果根据订单号查询,我们并不知道是存在于哪个表,则需要查询group内所有的表。对于此类问题,通常推荐做法是,可以适当增加因子,在订单号中,存储创建年份信息,这样就可以知道对应那个表了;也可以年份适当进行延伸,比如每5年一次分表,那么这样调整后,一个group内的表应该相对很少,可以极大加快查询效能。


5.5 异步双写问题

问题:为什么双写过程,采用了多种方式结合的方式?

回答:首先,切面方式,能最大限度满足订单同步的时效性。但是,在实践过程中,我们发现,异步切面双写,会存在多线程并发问题。因为在老库中,表的关联关系依赖于数据库的自增ID,依赖于表的插入顺序,会存在关联失败的情况。所以,单纯依靠切面同步还不够,还需要更加稳健的方式,即定时任务(订单事件是不可靠消息事件,即可能会存在丢失情况)的方式,来保证数据库的一致性。


参考连接

[1] Sharding-Sphere 概述

https://shardingsphere.apache.org/document/current/cn/overview/

[2] 大众点评订单系统分库分表实践

https://tech.meituan.com/2016/11/18/dianping-order-db-sharding.html

[3] Mycat与ShardingSphere如何选择

https://blog.nxhz1688.com/2021/01/19/mycat-shardingsphere/

[4] 分库分表:如何做到永不迁移数据和避免热点?

https://mp.weixin.qq.com/s/-YNU6wDZ3_lEh7vlsslDfQ

团队招聘信息

我们是携程火车票研发团队,负责火车票业务的开发以及创新。火车票研发在多种交通线路联程联运算法、多种交通工具一站式预定、高并发方向不断地深入探索和创新,持续优化用户体验,提高效率,致力于为全球人民买全球火车票。

 

在火车票研发团队,你可以和众多技术大牛一起,真实地让亿万用户享受你的产品和代码,提升全球旅行者出行体验和幸福指数。

 

如果你也热爱技术,并渴望不断成长,火车票研发团队期待与你一起高速前行。目前我们前端、后台、算法、大数据、测试等技术岗位均有职位。

 

简历投递:tech@trip.com  邮件标题:【姓名】-【携程火车票】-【投递职位】

【推荐阅读】

 “携程技术”公众号

  分享,交流,成长

STM32驱动电磁阀电路设计:从光耦选型到MOSFET驱动的实战解析 本文深入解析了STM32驱动24V电磁阀的完整电路设计,重点探讨了光耦选型与MOSFET驱动两大核心环节。针对电平转换与电气隔离需求,详细对比了EL357N与TLP2310等光耦在CTR、速度及耐压等关键参数上的差异与应用场景。同时,文章提供了MOSFET关键参数解读、驱动电路优化方案(如推挽驱动)以及完整的PCB布局、电源处理与调试避坑指南,旨在帮助工程师构建稳定可靠的工业控制电路。 阅读详情

相关推荐

深度学习|卷积神经网络

介绍卷积神经网络基本理论,包括卷积层、池化层和全连接层,并阐述LeNet卷积神经网络的构建过程。

weixin_58243219的博客 5724

携程火车票API 搞笑版

携程火车票API 1) 请求地址 https://trains.ctrip.com/pages/booking/getTransferList?departureStation=%2525E9%252587%25258D%2525E5%2525BA%252586&arrivalStation=%2525E5%25258C%252597%2525E4%2525BA%2525AC&departDateStr=2020-08-27 2) 调用方式:HTTP get 3) 接口描述:

软件开发 1155

envi5.3处理高分二号影像数据详细过程记录

全文根据此篇文章进行数据处理: tm影像辐射定标_高分二号影像数据预处理及裁剪过程 其他参考: 学习笔记---遥感影像辐射定标与大气校正 利用ENVI自带全球DEM数据计算区域平均高程 高分二号数据处理流程(有高分二号的数据信息) GF2有多光谱和全色两个数据,MSS是多光谱的,PAN是全色的,多光谱的分辨率低,全色的高,需要把这两个数据融合,融合之前需要做定标等处理,获取经纬度。 一、多光谱影像处理 1. 辐射定标 以这个为例: 其他路径\2022.4.2...

ligous的博客 5万+

读写分离与分库分表,涉及sharding-JDBC、sharding-sphere、停机迁移和双写方案、分布式id

读写分离与分库分表,涉及sharding-JDBC、sharding-sphere、停机迁移和双写方案、分布式id

weixin_42985390的博客 2133

YOLOv8改进 - 注意力篇 - 引入CAA注意力机制

YOLOv8改进 - 注意力篇 - 引入CAA注意力机制

浪子L的博客 5223

RK3588平台-ES8388音频驱动调试与设备树配置实战

本文详细解析了在RK3588平台上调试ES8388音频驱动的实战过程。内容涵盖Linux音频驱动的三层架构(Machine、Platform、Codec),并重点提供了设备树(DTS)的完整配置示例,包括I2C节点、声卡节点及音频路由设置。文章还分享了驱动加载验证、amixer调试命令以及常见问题(如无声、变调)的排查思路,旨在帮助开发者快速完成RK3588与ES8388的音频系统集成。

mango的博客 806

【双写迁移方案】实现动态切换实现分库分表

面试题现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?面试官心理分析你看看,你现在已经明白为啥要分库分表了,你也知道常用的分库分表中间件了,你也设计好你们如何分库分表的方案了(水平拆分、垂直拆分、分表),那问题来了,你接下来该怎么把你那个单库单表的系统给迁移到分库分表上去?所以这都是一环扣一环的,就是看你有没有全流程经历过...

独行侠梦的博客 777

python设计俄罗斯方块(附源码)

【代码】python设计俄罗斯方块(附源码)

牧魂的博客 2059

你们公司有做过数据迁移吗,行业中常见的数据迁移方案,了解下,每个人技术人必备的技能

互联网金融行业发生了翻天覆地的变化,相对应的金融科技也在不断的更新和迭代,每次有新的软件系统出炉的时候,就是老的软件系统命运终结的开始,老的项目当然不会束手就擒,它也会做最后的挣扎,当你从它身上迁移用户或者商户的时候,它会给你带来很多麻烦,比如说,它会临时罢工、出现资金损失等等不可忽视的问题,因此,迁移是个大任务,有的时候迁移并不亚于开发一套新系统的难度,甚至可以说是有过之而无不及。 哪些场景需要迁移 我们总结了各种需要迁移的场景。 字段迁移 原来设计的字段大小不能满足现在业务的需求,直接在原表上扩

jackl 4652

Ollama最新快速上手指南:从安装到精通本地AI模型部署

想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。

全世界的博客 2309

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

孤寒者的博客 1万+

ShardingSphere 异构迁移最佳实践:将3.5亿量级的顾客系统 RTO 减少60倍

Apache ShardingSphere 助力当当 3.5 亿用户量级顾客系统重构,由 PHP+SQL Server 技术栈无缝转型为 Java+ShardingSphere+MySQL,性能、可用性及维护性均得到显著提升,是 ShardingSphere 异构迁移最佳实践。1顾客系统背景当当顾客系统主要负责账户的注册、登录、隐私数据维护等功能,历史技术栈为 PHP+S......

ShardingSphere官微 494

【2026年华为暑期实习(AI)-4月29日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要涵盖了机器学习和深度学习中的多个核心概念与技术,包括非负矩阵分解、条件数、MobileNet创新点、LDA降维、大模型评测指标、半精度训练、多任务学习、GPU存储层次、正则化、张量并行等。通过12道单选题和8道多选题的形式,系统性地考察了相关理论原理、应用场景及工程实践要点。题目设计注重概念准确性(如LDA目标函数)、技术细节(如Megatron-LM的并行策略)与实际应用(如FP16训练动机),并包含概率统计(二项分布)和数值计算(微分误差分析)等数学基础内容,全面检验读者对AI领域关键知识的掌握

m0_73659489的博客 142

(二十六)MySQL分库篇:Sharding-Sphere分库分表框架的保姆级教学!

的定位是一款轻量级Java框架,它会以POM依赖的形式嵌入程序,运行期间会和Java应用共享资源,这款框架的本质可以理解成是JDBC的增强版,只不过Java原生的JDBC仅支持单数据源的连接,而Java-ORM框架在执行SQL语句时,会以切面的形式拦截发往数据库的语句,接着根据配置好的数据源、分片规则和路由键,为SQL选择一个目标数据源,然后再发往对应的数据库节点处理。在整个业务系统中对性能损耗极低,但为何后面又会推出呢?因为。

weixin_54542328的博客 2137

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring Boot 分库分表从入门到精通

摘要:本文详细介绍了基于SpringBoot集成ShardingSphere实现分库分表的完整解决方案。主要内容包括:1)分库分表基础概念与策略(水平/垂直分片);2)SpringBoot项目配置与ShardingSphere集成方法;3)分库分表具体实现(实体设计、Repository层、分布式ID生成);4)高级特性如复合分片、读写分离、数据加密等;5)分布式事务管理方案;6)性能优化与监控策略;7)数据迁移与扩容方案;8)常见问题解决方法。文章提供了从开发到生产部署的全流程指导,帮助构建高性能、高可用

油墨香^-^的博客 1204

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ShardingSphere核心解析

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

JavaCodePro的博客 715

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Sharding Sphere

摘要:本文介绍了ShardingSphere分库分表技术,主要包括垂直拆分(按列/业务模块分为垂直分库和垂直分表)和水平拆分(按行分为水平分库和水平分表)。垂直拆分适用于业务模块分离和性能优化,水平拆分则解决大数据量和高并发问题。文中详细展示了ShardingSphere-JDBC的Maven依赖配置,并比较了JDBC与Proxy模式的区别,强调JDBC作为嵌入式驱动适合Java应用,具有更低延迟和更高性能。最后提供了SQL示例说明如何实现各类分库分表策略。

qq_40589140的博客 701

ShardingSphere——水平分表与数据迁移

分库分表相关概念以及利用shardingsphere相关的一些产品我们在线上如何对数据进行迁移

scalad 1万+

ShardingSphere:分布式数据库解决方案

例如,在用户ID作为分片键的情况下,通过计算用户ID的哈希值,将其映射到对应的分片上。例如,在用户ID和时间戳组合作为分片键的情况下,可以先计算用户ID的哈希值,再结合时间戳的值,计算出最终的分片ID。读写分离+分片组合:结合分片策略和读写分离,实现全局数据一致性。

MoneyHacksPro的博客 1060

ShardingSphere-JDBC读写分离(四)

ShardingSphere-jdbc 读写分离

流离岁月的博客 587

ShardingSphere系列01:Shardingjdbc实现分表(含项目实践)

Springboot系列:整合Shardingjdbc实现分表、含项目实践!

Think_and_work的博客 4839

【实战】基于springboot2.7x集成ShardingSphere5.X的分表及自定义分片策略配置

【实战】基于springboot2.7x集成ShardingSphere5.X的分表及自定义分片策略,一步一个坑,记录遇到的所有问题,以及解决问题的思路

qq_41856572的博客 3416

【数据迁移】在线数据迁移 :双写数据库、搬历史数据、切换写入、灰度验证(99.9999%)、删除历史

步骤:双写数据库、搬历史数据、切换写入、灰度验证(99.9999%)、删除历史;  在线数据迁移,是指将正在提供线上服务的数据,从一个地方迁移到另一个地方,整个迁移过程中要求不停机,服务不受影响。根据数据所处层次,可以分为 cache 迁移和存储迁移;根据数据迁移前后的变化,又可以分为平移和转移。 平移是指迁移前后数据组织形式不变,比如 MySQL 从1个实例扩

ronmy的专栏 1万+

双写一致性方案

什么是双写 同一份数据,需要写数据库、写缓存。 双写很难保证强一致性,可以保证最终一致性。 要做到强一致性就需要将所有读写请求用队列串行化,但是性能非常差,降低系统的QPS。 没有完美的方案,用到缓存就会存在不一致的情况,需要根据具体业务权衡得失,选择合适业务的方案。 先更新数据库,再删除缓存(推荐方案) 此方案数据不一致的几率比较低,并且实现简单。 造成数据不一致的情况:在缓存刚好失效时,有线程查询数据库得到旧值,另外一个线程更新数据库并删除缓存后,前面持有旧值的线程将数据存入缓存,造成数据

xzh_blog 3514

数据库双写

更换数据库,数据库双写过渡功能

fan1865221的博客 3036

分库分表中间件shardingSphere

1、支持分类: sharding-jdbc 偏应用 灵活。 sharding-proxy 偏DB,SQL透明。

zhowlay的博客 297
上一篇: 干货 | 前端智能化探索,骨架屏低代码自动生成方案实践
下一篇: 干货 | 弱监督学习框架 Snorkel 在大规模文本数据集"自动标注"任务中的实践
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值