惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
MyScale Blog
MyScale Blog
U
Unit 42
M
MIT News - Artificial intelligence
小众软件
小众软件
P
Proofpoint News Feed
雷峰网
雷峰网
L
LangChain Blog
S
SegmentFault 最新的问题
腾讯CDC
F
Fortinet All Blogs
A
About on SuperTechFans
WordPress大学
WordPress大学
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
Docker
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
Recent Announcements
Recent Announcements
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog

浮华生

Elasticsearch 检索性能优化 - 浮华生 舆情监控系统综述 - 浮华生 2024 半年度总结 - 浮华生 2023 年终总结 - 浮华生 异地机器组网方案 - 浮华生 Kubernetes 部署 Elasticsearch 和 Kibana - 浮华生 2022 年终总结 - 浮华生 RabbitMQ connection channel 的关系 - 浮华生 Kafka Java 客户端 Producer 原理分析 - 浮华生 RabbitMQ 和 Kafka 应用原理简单对比 - 浮华生 阿里云 OpenSearch 介绍 - 浮华生 Golang Array 和 Slice 区别 - 浮华生 Mac OS 下打造 golang nvim 编程环境之基础配置 - 浮华生 电商搜索技术总结 - 浮华生 电商搜索业务总结 - 浮华生 2021 年终总结 - 浮华生 Cypress 实践总结 - 浮华生 年终总结 - 浮华生 关于我 - 浮华生 使用 cucumber 进行行为驱动开发(BDD) - 浮华生 微服务应用集成 SpringCloud 步骤 - 浮华生 通过一道数值转换题重温计算机补码 - 浮华生 macOS 系统推荐的一些软件 - 浮华生 DevOps 实施规划(持续更新) - 浮华生 rabbitmq 如何提高可靠性并保证消费端幂等 - 浮华生 AMQ Model总结 - 浮华生 结对编程 - 浮华生 RSocket 介绍 - 浮华生 面向对象的理解 - 浮华生 企业平台技术框架 - 浮华生
电商搜索数据同步方案 - 浮华生
浮华生 · 2020-10-10 · via 浮华生

前言

搜索系统主要分为两个部分一个是在线服务、一个是离线服务,在线服务是指排序、打分等靠近用户侧的部分,离线服务负责这篇文章属于离线部分范畴,本篇文章只是提供一个基础的思路,实际使用还需要适当调整和拓展。无论哪种方式都应该保证全量高吞吐、增量低延时的这个原则。

方案

定时任务主动拉取更新

这个方案是最简单最直观的实现方式,通过 SQL 关联查询,全量更新和增量更新通过定时任务去触发。

优点:适合快速开发,且与业务系统代码解耦。

缺点:对数据库压力较大;如果跨数据库关联会增加复杂度;实时性低。

image-20201010150842337

订阅队列异步更新

异步更新常出现在事件驱动的架构中,扣件库存事件、价格变更事件、商品上下架事件等,这种方案需要分布式队列的支持。

优点:实时性高,对数据库压力小。

缺点:需要保证消息的消息队列的可靠性、顺序消费、重复消费等;对非事件驱动架构的业务代码有入侵性。

image-20201010170115099

说明:上图中 product id 是从消息队列拿到变更的商品 id,然后根据 id 去反查业务库中的数据;data 是通过 SQL 拿到的结构化数据,这个步骤在全量更新时也会用到。

使用 Binlog 工具更新

Binlog 是 MysQL 中最重要的日志,它记录了 DDL 和 DML 操作,在 MySQL 主从复制或者数据恢复时会使用到,当然也可以用在同步数据上,由于 Binlog 是二进制文件无法直接使用,市面上有很多成熟的解析工具,目前 Canal 是比较适合国内的业务场景。

优点:与业务系统解耦

缺点:需要引入消息队列和 Binlog 解析中间件,增加了架构的复杂性

image-20201012094015040

总结

上面介绍了搜索的三种数据同步方案,使用者需要根据实际的业务场景进行选择和拓展。

监听 Binlog 这种设计在搜索系统中的使用场景仅限于数据的增量同步,这样能够做到准实时更新,而对于同步更新则需要进行周期性的通过 SQL 或者接口进行更新。

参考链接

https://insights.thoughtworks.cn/application-of-cdc-in-microservices/

https://github.com/wushujames/mysql-cdc-projects/wiki

https://www.cnblogs.com/binghe001/p/13415987.html