海口专业网站搭建厂,架设网站需要什么,东莞有哪些做推广的网站,北京制作小程序本文介绍下当前常见的场景之一#xff1a;Mysql数据同步Elasticsearch的实现方案#xff0c;这里以电商为例#xff0c;其实所有相关搜索内容都可以使用此方案。 对于搜索#xff0c;应该是所有APP必备的基础功能#xff0c;不同时期有不同的解决方案#xff0c;本次重点…本文介绍下当前常见的场景之一Mysql数据同步Elasticsearch的实现方案这里以电商为例其实所有相关搜索内容都可以使用此方案。 对于搜索应该是所有APP必备的基础功能不同时期有不同的解决方案本次重点讲解Elasticsearch。
那么对于运营系统将商品上架后数据肯定是要写入DB的这个DB我们直接假设为Mysql那么mysql中的数据是如何同步到Elasticsearch呢这也是本文我们重点讨论的问题。 1.同步双写
这是能想到的最直接的方式在写入MySQL直接也同步往ES里写一份数据。 总结 2.异步双写
我们也很容易想到异步双写的办法上架商品的时候先把商品数据丢进MQ为了解耦合我们一般会拆分一个搜索服务由搜索服务去订阅商品变动的消息来完成同步。 前面说的一些数据需要聚合处理成类似宽表的结构怎么办呢例如商品库的商品品类、spu、sku表是分开的但是查询是跨维度的在ES里再聚合一次效率就低一些最好就是把商品的数据给聚合起来在ES里以类似大宽表的形式存储这样一来查询效率就高一些。 对于多维度查询条件这种其实没什么好办法基本上还是得搜索服务直接查库或者远程调用再查询一遍商品的数据库就是所谓的回查。 总结: 3.定时任务
假如我们要快速搞搞数据量有没那么大怎么办呢定时任务也可以。 定时任务这种情况最麻烦的一点是频率不好选频率高的话会非自然地形成业务的波峰导致存储的CPU、内存占用波峰式上升频率低的话实时性比较差而且也有波峰的情况。
总结: 4.数据订阅
这是目前最流行的就是数据订阅做到了用户完全无感知系统完全自动处理。
MySQL通过binlog订阅实现主从同步各路数据订阅框架比如canal就依据这个原理将client组件伪装成从库来实现数据订阅。 我们以应用最广泛的canal为例canal通过canal-adapter支持多种适配器其中就有ES适配器通过一些配置启动之后就可以直接把MySQL数据同步到ES这个过程是零代码的。 需要特别注意使用canal看起来很美好帮我们把同步的事情都干了但其实还是要写代码。为什么呢
前面提到的多张表数据聚合canal的支持没那么好所以还是得回查。这时候用canal-adapter就不合适了需要自己实现canal-client监听和聚合数据将数据写入ES 这种看起来和异步双写比较像但是第一降低了商品服务的耦合第二数据的实时性更好。
总结: 至于数据订阅框架的选型目前的组件较多这里不再做更多介绍如有兴趣大家可以搜索CDC(Change Data Capture)进行更多的扩展和了解。