搜索功能的技术方案

MySQL数据同步到ElasticSearch

最近的创业项目涉及到搜索功能,显然,尽管MySQL有模糊查询的功能,但是它并不适合用来实现搜索功能,所以一般需要使用到ES,它常常被用来进行大数据搜索,也支持分词。

同步双写方案

以前我在大学时候也写过,但是使用的是同步双写的方案:即在写入MySQL的同时又写入ElasticSearch
image
但是这样有个问题,耦合度太高,而且当ES服务出现问题时,会导致整个接口不可用,另外,由于是同步双写,会增大接口响应时长。不过由于当时是在大学期间写的项目,因此这种缺点我当时并不在意。但是现在是商业的创业项目,因此这种方式显然不可采用。

定时任务

使用定时任务的方式,可以定期从MySQL同步数据到ES中,但是缺点就是实时性差,不可采用
image

数据订阅

比较流行的技术方案是通过MySQL的binlog功能,订阅数据变动,包括增加、删除、修改操作,都可以实时同步到ES中
image

配置canal的过程也有些坎坷,这里吐槽一下,官方文档有点拉跨。下载1.1.6后,运行报错,说我没有adapter_config表。于是我下载1.1.5版本运行,结果又报错说
com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource
查阅了issue发现是包冲突:https://github.com/alibaba/canal/issues/3486
但是adapter又能正常运行,于是我暂时没有管这个报错。结果我一天的噩梦就来了,当MySQL数据变动时,日志能够正常产生,但是ES无法同步
image
在反复排查配置无误后,已经是一天的时间过去。。。。
于是我最终还是开始了解决issue-3486这个问题,我本机没有安装maven,所以我找到了别的办法:https://www.cnblogs.com/sportsky/p/16536264.html
通过替换jar包的方式,我解决了issue-3486,于是一切恢复了正常。。。。

特此记录一天的经历

posted @ 2023-04-15 21:35  ABKing  阅读(50)  评论(0编辑  收藏  举报