MySQL数据同步Elasticsearch的方案有哪些

商品检索

大家应该都在各种电商网站检索过商品,检索商品一般都是通过什么实现呢?搜索引擎Elasticsearch。

那么问题来了,商品上架,数据一般写入到MySQL的数据库中,那么用于检索的数据又是怎么同步到Elasticsearch的呢?

MySQL数据同步Elasticsearch的方案有哪些

MySQL同步ES

1.同步双写

这是能想到的最直接的方式,在写入MySQL,直接也同步往ES里写一份数据。

MySQL数据同步Elasticsearch的方案有哪些

同步双写

对于这种方式:

优点:实现简单

缺点:

业务耦合,商品的管理中耦合大量数据同步代码

影响性能,写入两个存储,响应时间变长

不便扩展:搜索可能有一些个性化需求,需要对数据进行聚合,这种方式不便实现

2.异步双写

我们也很容易想到异步双写的办法,上架商品的时候,先把商品数据丢进MQ,为了解耦合,我们一般会拆分一个搜索服务,由搜索服务去订阅商品变动的消息,来完成同步。

MySQL数据同步Elasticsearch的方案有哪些

异步双写

前面说的,一些数据需要聚合处理成类似宽表的结构怎么办呢?例如商品库的商品品类、spu、sku表是分开的,但是查询是跨维度的,在ES里再聚合一次效率就低一些,最好就是把商品的数据给聚合起来,在ES里以类似大宽表的形式存储,这样一来查询效率就高一些。

多维度多条件查询

这种其实没什么好办法,基本上还是得搜索服务直接查库,或者远程调用,再查询一遍商品的数据库,就是所谓的回查。

MySQL数据同步Elasticsearch的方案有哪些

回查完成聚合

这种方式:

优点:

解耦合,商品服务无需关注数据同步

实时性较好,使用MQ,正常情况下,同步完成在秒级

缺点:

引入了新的组件和服务,增加了复杂度

3.定时任务

假如我们要快速搞搞,数据量有没那么大,怎么办呢?定时任务也可以。

MySQL数据同步Elasticsearch的方案有哪些

定时任务

定时任务,最麻烦的一点是频率不好选,频率高的话,会非自然地形成业务的波峰,导致存储的CPU、内存占用波峰式上升,频率低的话实时性比较差,而且也有波峰的情况。

这种方式:

优点:实现比较简单

缺点:

实时性难以保证

对存储压力较大

4.数据订阅

还有一种方式,就是最时兴的数据订阅。

MySQL通过binlog订阅实现主从同步,各路数据订阅框架比如canal就依据这个原理,将client组件伪装成从库,来实现数据订阅。

MySQL数据同步Elasticsearch的方案有哪些

MySQL主从同步

我们以应用最广泛的canal为例,canal通过canal-adapter,支持多种适配器,其中就有ES适配器,通过一些配置,启动之后,就可以直接把MySQL数据同步到ES,这个过程是零代码的。

MySQL数据同步Elasticsearch的方案有哪些

canal同步数据

虽然我们听从老板的建议,使用canal进行同步工作,但实际上我们还是需要编写代码。为什么呢?

由于canal的支持有限,前文提到的多张表数据聚合仍需通过回查方式实现。这时候用canal-adapter就不合适了,需要自己实现canal-client,监听和聚合数据,写入ES:

MySQL数据同步Elasticsearch的方案有哪些

数据订阅+回查

这种看起来和异步双写比较像,但是第一降低了商品服务的耦合,第二数据的实时性更好。

所以使用数据订阅:

优点:

业务入侵较少

实时性较好

至于数据订阅框架的选型,主流的大体上是这些:

Cancal Maxwell Python-Mysql-Rplication

开源方阿里巴巴Zendesk社区开发语言JavaJavaPython活跃度活跃活跃活跃高可用支持支持不支持客户端Java/Go/PHP/Python/Rust无Python消息落地Kafka/RocketMQ 等Kafka/RabbitNQ/Redis 等自定义消息格式自定义JSON自定义文档详略详细详细详细Boostrap不支持支持不支持

MySQL同步到其他数据存储,如HBase,基本上都是采用相似的几种方法。

以上就是MySQL数据同步Elasticsearch的方案有哪些的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/148814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
剪映电脑版如何调整音频轨道 剪映专业版多音轨混音技巧
上一篇 2025年12月2日 22:10:21
Ubuntu下MySQL的’Access denied for user ‘root’@’localhost’ (usi
下一篇 2025年12月2日 22:10:25

相关推荐

  • PHP:高效检查多维数组中是否存在重复的嵌套项

    本文将探讨如何在 php 中有效检查一个多维数组是否已包含具有相同嵌套项的元素。针对 `in_array()` 函数在处理复杂数组时的局限性,我们将介绍通过迭代和直接比较嵌套子数组的方法,确保在添加新数据前避免重复,从而维护数据结构的唯一性和完整性。 在 PHP 开发中,我们经常需要处理包含复杂数据…

    2026年8月28日
    100
  • 如何在mysql中理解事务一致性和隔离性

    一致性要求事务前后数据保持完整约束,如转账必须同步更新;隔离性控制并发事务互不干扰,MySQL提供四种级别,通过MVCC等机制平衡一致性与性能。 在MySQL中,事务的一致性和隔离性是ACID特性的两个核心部分。它们共同保障数据在并发操作下依然准确、可靠。理解这两个概念,关键在于明白它们各自的作用以…

    2026年8月28日
    200
  • 电脑提示缺少“api-ms-win-core-path-l1-1-0.dll”的4种解决方案

    电脑提示缺少“api-ms-win-core-path-l1-1-0.dll”的4种解决方案电脑提示缺少“api-ms-win-core-path-l1-1-0.dll”的4种解决方案电脑提示缺少“api-ms-win-core-path-l1-1-0.dll”的4种解决方案电脑提示缺少“api-ms-win-core-path-l1-1-0.dll”的4种解决方案

    当你在电脑上启动某些软件或游戏时,突然弹出提示:“缺少 api-ms-win-core-path-l1-1-0.dll 文件,程序无法启动”,这确实令人困扰。这通常是由于系统所需的运行库文件丢失或损坏所引起的。别担心,遇到此类问题无需慌张。本文将为你提供4种实用的解决方案,帮你快速修复缺失的 dll…

    2026年8月28日 用户投稿
    000
  • 如何在Yii中实现软删除(Soft Delete)?

    在yii框架中实现软删除可以通过在模型中添加is_deleted字段,并重写beforedelete和find方法来实现。1. 在模型中添加is_deleted字段。2. 重写beforedelete方法,将is_deleted设为true并保存。3. 修改find方法,默认只返回未删除的记录。软删…

    2026年8月28日
    100
  • laravel表单请求(Form Request)如何使用_Laravel表单请求Form Request使用方法

    Laravel的Form Request用于分离验证与授权逻辑。1. 使用artisan命令生成请求类;2. 在authorize中设置权限,rules中定义规则;3. 可自定义messages错误信息;4. 控制器直接注入使用,自动验证;5. 可通过prepareForValidation预处理数…

    2026年8月28日
    000
  • 跨微服务数据库查询效率低怎么办?

    优化跨微服务数据库查询效率的策略 本文探讨一个Java微服务架构下,跨数据库查询效率低下的问题。微服务A和B分别连接不同的数据库,且不在同一台服务器上。微服务B需要获取微服务A中未导入到自身数据库的人员信息。当前方案是:先从微服务B数据库获取已导入人员ID列表,然后在微服务A使用select * f…

    2026年8月28日
    000
  • 使用Workerman实现WebSocket服务

    使用workerman实现websocket服务的步骤包括:1) 使用简洁的api快速搭建websocket服务器,只需几行代码;2) 处理连接建立、消息接收和连接关闭的回调函数;3) 优化连接管理、消息处理和错误处理;4) 注意资源管理和垃圾回收,以提升性能。 你想知道如何使用Workerman实…

    2026年8月28日
    000
  • 小心二手Swtich2 买回来可能变砖

    除了硬件质量问题之外,想要入手二手任天堂switch 2的玩家们还需留意因网络服务封锁而导致主机无法正常使用的情况。尽管这些限制措施是任天堂为了打击盗版和防止主机被破解所采取的手段,但也引发了关于switch 2长期使用性的担忧。 近日一位Reddit用户分享了自己的经历,他在沃尔玛以低于市场价50…

    2026年8月28日
    000
  • 小米手机Android 16更新名单/日期曝光 覆盖多款旗舰

    小米继谷歌之后,成为首家向用户推送android 16稳定版更新的手机厂商。该更新基于hyperos 2.3系统,小米15系列已在全球范围内率先收到此次升级。据cnmo了解,海外媒体近日曝光了小米设备适配android 16的计划。 虽然小米尚未正式发布完整的支持机型列表,但从以往更新策略来看,预计…

    2026年8月28日
    000
  • MySQL数据库版本升级与兼容性处理_平滑过渡与风险规避实战

    MySQL数据库版本升级与兼容性处理_平滑过渡与风险规避实战MySQL数据库版本升级与兼容性处理_平滑过渡与风险规避实战MySQL数据库版本升级与兼容性处理_平滑过渡与风险规避实战MySQL数据库版本升级与兼容性处理_平滑过渡与风险规避实战

    mysql数据库版本升级需精密规划与执行,核心在于预见性与可控性。第一步明确升级动因与目标版本特性,如性能、安全、功能变化及兼容性问题。第二步构建高度相似的测试环境,导入生产数据并执行全面测试。第三步制定备份与回滚策略,结合逻辑与物理备份并验证其可用性。第四步执行升级,采用主从切换等策略最小化停机时…

    2026年8月28日 用户投稿
    100
  • 《巫师4》开发商:我们在虚幻5引擎里加入的新技术有利于整个行业

    cd projekt red正在采用虚幻5.6引擎来打造《巫师4》,而该工作室坚信他们在引擎中引入的新技术将对整个游戏行业产生积极影响。 在接受GamesRadar采访时,《巫师4》的工程制作负责人Jan Hermanowicz表示,虽然目前谈论《巫师4》的具体内容还为时过早,更不用说后续作品如《巫…

    2026年8月27日
    100
  • 由于兼容性问题,部分设备无法安装win10 1903

    若您尝试于搭载不兼容驱动及软件的设备上安装windows 10 2019年5月更新(版本号1903),更新可能无法正常显示,而更新助手软件则会发出关于不兼容软件的警告。因兼容性问题,部分设备可能被阻止执行windows 10 2019年5月更新的安装操作。 此类情况可能涉及特定版本的英特尔驱动程序、…

    2026年8月27日
    100
  • 海棠书屋热门小说地址网_海棠书屋无广告免费言情小说入口

    海棠书屋热门小说地址网是https://www.haitangshuwu.com,该平台收录大量言情、玄幻、悬疑等类型小说,支持多种筛选方式与个性化阅读设置,提供流畅且无广告的阅读体验。 海棠书屋热门小说地址网在哪里?这是不少书迷朋友都关注的,接下来由PHP小编为大家带来海棠书屋无广告免费言情小说入…

    2026年8月27日
    200
  • Laravel应用常见安全威胁和防护措施

    laravel应用中常见的安全威胁包括sql注入、跨站脚本攻击(xss)、跨站请求伪造(csrf)和文件上传漏洞。防护措施包括:1. 使用eloquent orm和query builder进行参数化查询,避免sql注入。2. 对用户输入进行验证和过滤,确保输出安全,防止xss攻击。3. 在表单和a…

    2026年8月27日
    100
  • MySQL UUID查询结果重复了,怎么回事?

    mysql uuid 查询结果重复问题排查及解决方法 在使用MySQL数据库时,UUID(Universally Unique Identifier)通常被用于生成唯一标识符。然而,有时会出现令人费解的UUID重复现象。本文将分析一个用户遇到的MySQL UUID重复问题,并提供可能的解决方案。 问…

    2026年8月27日
    500
  • 微信小程序后端API开发指南

    开发微信小程序的后端api需要以下步骤:1. 熟悉restful api设计模式和相关技术;2. 设计简洁明了的api接口;3. 确保api的安全性;4. 处理并发请求和优化api性能;5. 实施api版本控制。 开发微信小程序的后端API,这可不是一件简单的事儿啊!但别担心,我会带你一步步揭开这层…

    2026年8月27日
    100
  • Redis高并发计数缓存失效:如何确保一小时超时设置生效?

    Redis缓存失效及高并发下的解决方案 在高并发环境下,使用Redis进行计数缓存时,常常遇到超时设置失效的情况。例如,设定Redis缓存一小时超时,用于限制第三方接口一小时内的调用次数,但部分Redis实例却未能按预期超时,导致缓存数据永久保存。本文分析此问题并提供解决方案。 问题:第三方接口频繁…

    2026年8月27日
    200
  • 千岛小说官方站点入口 千岛小说官网直达链接

    千岛小说官方站点入口是https://www.qiandaoshu.com/,该平台提供全网书籍检索、多线路书源及个性化阅读设置,并支持跨设备数据同步与本地文档导入功能。 千岛小说官方站点入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来千岛小说官网直达链接,感兴趣的网友一起随小编来瞧瞧…

    2026年8月27日
    500
  • Laravel与社交媒体登录(OAuth)集成

    在laravel框架中集成社交媒体登录可以通过使用laravel socialite包来实现。1.安装socialite包:使用composer require laravel/socialite。2.配置服务提供者和别名:在config/app.php中添加相关配置。3.设置api凭证:在.env…

    2026年8月27日
    100
  • Shiro框架下用户AccessToken混淆:如何排查并解决token冲突问题?

    Shiro框架AccessToken冲突问题分析与解决方案 一个基于Spring、Shiro、Redis和MySQL 8的系统近期出现用户AccessToken冲突:用户A登录后,获取到的用户信息却是用户B的。此问题即使清除缓存后依然复现,严重影响系统稳定性。本文将深入分析问题根源并提供有效解决方案…

    2026年8月27日
    100

发表回复

登录后才能评论
关注微信