Mysql 数据同步到 ES 的技术方案选型和思考

ES 的几个显著特点,能有效补足 MySQL 在企业级数据操作场景的缺陷

文本搜索能力:ES 是基于倒排索引实现的搜索系统,配合多样的分词器,在文本模糊匹配搜索上表现得比较好,业务场景广泛。

多维筛选性能好:亿级规模数据使用宽表预构建(消除 join),配合全字段索引,使 ES 在多维筛选能力上具备压倒性优势,加上文本搜索能力,独此一家。

开源和商业并行:ES 开源生态非常活跃,具备大量的用户群体,同时其内后也有独立的商业公司支持,而这让用户根据自身特点有了更加多样、渐进的选择。

为什么是数据迁移同步方式?

稳定性好:迁移同步对主数据库的操作主要是进行数据和日志的顺序读取,同时并发小,对主数据库稳定性影响较小(较多的下游订阅可能在网络层面存在影响,一般用消息解决)。另外日志(Binlog/WAL/Redo 等)可重放特质,让下游丢数据的可能性大大减小(处理好幂等的情况下)

业务解耦:一般而言主数据库更多承载事务型操作,而下游数据系统承载运营等层面的业务。

业务侵入小:数据迁移同步对业务无侵入,双端对接标准数据库(源),可以便利地找到开源、商业、云等各个方向的成熟解决方案或产品。

业务适配性好:某些数据迁移同步产品能够嵌入业务逻辑,让下游获取到更加贴近业务的数据,从而让数据服务更加有效和便捷。

数据迁移同步模型选择

订阅消费

image.png

优点

堆积能力:由于引入了消息队列,所以整个链路是具备变更数据的堆积能力的。假设变更数据消费的比较慢,MySQL 本地较老的 binlog 文件由于磁盘空间的不足而被删除时,消息队列的数据依然存在,数据同步依然可以进行。

数据分发能力:引入消息队列后可以支持多方订阅。如果下游多个应用都依赖源端的变更数据,可以订阅同一份 topic 即可。

数据加工能力:由于变更数据是由下游消费者订阅,因此订阅后可以灵活的做一些数据加工。例如从外部调用微服务接口或者反查一些数据来做数据加工都是比较方便的。

缺点

运维成本相对较高:包含了较多的组件和应用,运维保障相对复杂。

稳定性风险较高:一环出问题会导致整个数据同步链路的稳定性收到影响。而且排查和定位问题也会比较困难。

端对端直连

image.png

优点

低延迟:端对端的直接同步,链路较短,延迟低

稳定性好:链路组件少,出问题概率较低,定位排查均比较容易。适合对数据精确性高的严苛场景。

功能拓展性强:对端写入消息系统,模拟订阅模式,可拓展性强

运维部署检点:链路组件少,部署运维更简单

数据迁移同步模型选择总结

如果没有众多的下游数据订阅,建议采用直连模式。数据同步链路往往置于在线业务中,随着业务规模以及重要性逐渐加大,链路稳定性更为重要些。

另外端到端模式只要支持对端数据源为消息中间件,可立即实现订阅模式,数据加工能力在某些数据迁移同步产品上可通过上传业务代码运行的方式解决。

数据架构在满足业务需求的同时,简洁和清晰能够让系统更加易于维护和排查,当遇到链路每天同步大量数据、偶尔丢几条需要排查,或同步链路卡住不同步等情况,端对端方式往往体现出相当大的优势。

MySQL 关联表在 ES 上的设计

关系型数据库中的表 join 关系在 ES 可以用几种数据类型来表达,包括 objected,nested,join 三种。

objected

object 类型可以存储嵌套结构。

优点:表示主 field 和 object 内部 field 之间的一对多关系,支持 doc 的 join 查询。由于所有查询时依赖的关联数据也都在一个文档内,避免了 ES 内部的 join,查询效率较高。

缺点:一对多关系只能保留一层,多于一层的会被打平,会丢失嵌套 field 内部的关联关系。

nested

nested 类型可以存储嵌套结构,表示一对多关系,是 object 类型的拓展。

优点

不会出现 object 的缺点,整个嵌套关系是完整维护的,子文档内部关联关系保存是完整的

关联数据通过实现上自然关联到主文档上,搜索时性能较好(相对于 join)

缺点

一个 nested field 只能属于一个主文档

在 nested 类型中,子文档和主文档之间强绑定,主文档更新的时候会强制更新子文档。在写多读少的场景,新能开销较大。

child 文档的查询必须通过父文档再找到子文档

子文档频繁修改的话会影响别的子文档和父文档,因为本质上在 lucene 实现上是父文档下的冗余存档

join

join 类型可以配置父子文档,通过父子文档来实现一对多的能力,一个索引只能建一个。相比 nested 类型,该类型更加灵活。父子文档之间通过 parentId 来关联,实际实现上他们就是独立的文档。

优点

子文档更新不影响父文档和其他子文档

一个子文档可以单独搜索

一个文档在作为子文档时可以自己选择属于哪个父文档。通过 relation 可以指定不同的 join 列

缺点

需要建个全局序数,用于服务于父子文档的关联关系,这个会影响搜索性能

join 和 nested 类型比较

join 适合写多读少场景,更加适合关注索引性能的场景。这意味着更新的生效会更快,但是搜索时的开销也相对大些

nested 适合读多写少的场景,更加关注搜索的性能

去规范化实现

下面将介绍几种数据同步去规范化的几种方式:

主表冗余数据

业务侧将一些查询时需要的关系数据提前冗余在源表的一个字段中。

image.png

优点:处理模式能应对各种一对多的关联关系,对数据同步工具的功能要求低,配置简单,只需要支持单同步到 ES 即可。

缺点

索引、搜索性能非最佳:提供给 ES 的不是构建好的宽表数据。这种实现方式会有索引、搜索性能方面的额外开销,不是性能最佳的实现方式。

业务系统入侵:业务系统写主数据的时候需要额外写入信息。

主数据库表冗余过多数据:关系型数据库表冗余了过多其他表的信息,可能存在存储和性能开销。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

程序员代码面试指南 IT名企算法与数据结构题目最优解

这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

image.png

《TCP-IP协议组(第4版)》

本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

image.png

Java开发手册(嵩山版)

这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

image.png

MySQL 8从入门到精通

本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

image.png

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

image.png

JAVA核心知识点+1000道 互联网Java工程师面试题

image.png

image.png

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

image.png
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
心知识点+1000道 互联网Java工程师面试题**

[外链图片转存中…(img-SLItUsnQ-1712176405265)]

[外链图片转存中…(img-MFgNDVly-1712176405265)]

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

[外链图片转存中…(img-TEYZk22p-1712176405266)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值