做同城特价的网站有哪些,无代码开发平台永久免费,怎么制作网站教程步骤,宁波网站推广优化联系电话目录 1 服务搜索1.1 需求分析1.2 技术方案1.2.1 使用Elasticsearch进行全文检索#xff08;为什么数据没有那么多还要用ES#xff1f;#xff09;1.2.2 索引同步方案1.2.2.1 Canal介绍1.2.2.1 Canal工作原理 1 服务搜索
1.1 需求分析
服务搜索的入口有两处#xff1a; 在… 目录 1 服务搜索1.1 需求分析1.2 技术方案1.2.1 使用Elasticsearch进行全文检索为什么数据没有那么多还要用ES1.2.2 索引同步方案1.2.2.1 Canal介绍1.2.2.1 Canal工作原理 1 服务搜索
1.1 需求分析
服务搜索的入口有两处 在门户最上端的搜索入口对服务信息进行搜索。 在门户最下方点击“全部服务”进入全部服务界面。 如下图 点击服务分类查询分类下的服务。
1.2 技术方案
1.2.1 使用Elasticsearch进行全文检索为什么数据没有那么多还要用ES
根据需求分析对服务进行搜索除了根据服务类型查询其下的服务以外还需要根据关键字去搜索与关键字匹配的服务 通过关键字去匹配服务的哪些信息呢比如输入关键字“家庭保洁”它会去匹配服务相关的信息比如服务类型的名称、服务项的名称甚至根据需要也可能去匹配服务介绍的信息只要与“家庭保洁”相关的服务都会展示出来。如下效果 这里最关键的是根据关键字去匹配使用数据库的like搜索能否实现呢 上图的搜索效果是一种全文检索方式在搜索“家庭保洁”关键字时会对关键字先分词分为“家庭”和“保洁”再根据分好的词去匹配索引库中的服务类型的名称、服务项的名称、服务项的描述等字段。Like搜索不具有分词功能它不是一种全文检索的方式。
用Mysql不行吗行但是c端用户肯定访问量很大这样做会增加数据库压力
如果要实现全文检索且对接口性能有一定的要求最常用的是Elasticsearch本项目使用ES完成服务搜索功能的开发。 复习下
1.2.2 索引同步方案
如果要使用ES去搜索服务信息需要提前对服务信息在ES中创建索引运营端在管理服务时是将服务信息保存在数据库如何对数据库中的服务信息去创建索引保证数据库中的信息与ES的索引信息同步呢本节对索引同步的方案进行分析与确定。 想到同步最简单的就是 在服务项的增删改查Service方法中添加维护ES索引的代码。 在区域服务的增删改查Service方法中添加维护ES索引的代码。 例如下边的代码
public Serve onSale(Long id){//操作serve表//添加向ES创建索引的代码
}上边的代码存在分布式事务比如向ES写成功了由于网络问题抛出网络超时异常最终数据库操作回滚了ES操作没有回滚数据库的数据和ES中的索引不一致。所以肯定不用这种同步的方法那就用异步。
使用CanalMQ
1.2.2.1 Canal介绍
Canal是什么 Canal可与很多数据源进行对接将数据由MySQL同步到ES、MQ、DB等各个数据源。 官方文档https://github.com/alibaba/canal/wiki
1.2.2.1 Canal工作原理
理解Canal的工作原理需要首先要知道MySQL主从数据同步的原理
MySQL主从集群由MySQL主服务器(master)和MySQL从服务器(slave)组成MySQL主从数据同步是一种数据库复制技术进行写数据会先向主服务器写写成功后将数据同步到从服务器流程如下
1、主服务器将所有写操作INSERT、UPDATE、DELETE以二进制日志binlog的形式记录下来。 2、从服务器连接到主服务器发送dump 协议,请求获取主服务器上的binlog日志。 MySQL的dump协议是MySQL复制协议中的一部分。 3、MySQL master 收到 dump 请求开始推送 binary log 给 slave 4、从服务器解析日志根据日志内容更新从服务器的数据库完成从服务器的数据保持与主服务器同步。
那么回到原来的话题Canal在整个过程充当什么角色呢
1、Canal模拟 MySQL slave 的交互协议伪装自己为 MySQL slave 向 MySQL master 发送dump 协议 MySQL的dump协议是MySQL复制协议中的一部分。 2、MySQL master 收到 dump 请求开始推送 binary log 给 slave (即 canal ) 。一旦连接建立成功Canal会一直等待并监听来自MySQL主服务器的binlog事件流当有新的数据库变更发生时MySQL master主服务器发送binlog事件流给Canal。 3、Canal会及时接收并解析这些变更事件并解析 binary log 通过以上流程可知Canal和MySQL master主服务器之间建立了长连接。
简单来所就是Canal充当从节点监听mysql并获取mysql的binlog日志之后解析这个binlog日志
本方案需要借助Canal和消息队列具体实现方案如下 通过上边的技术分析下边对本项目服务搜索方案进行总结。 本项目使用Elasticsearch实现服务的搜索功能使用CanalMQ完成服务信息与ES索引同步。 如下图 流程如下 运营人员对服务信息进行增删改操作MySQL记录binlog日志。 Canal定时读取binlog 解析出增加、修改、删除数据的记录。 Canal将修改记录发送到MQ。 同步程序监听MQ收到增加、修改、删除数据的记录请求ES创建、修改、删除索引。 C端用户请求服务搜索接口从ES中搜索服务信息。