搜索功能技术方案

news2024/9/20 14:54:48

1. 背景与需求分析

门户平台需要实现对服务信息的高效查询,包括通过关键字搜索服务以及基于地理位置进行服务搜索。面对未来可能的数据增长和性能需求,选择使用 Elasticsearch 来替代 MySQL 的全文检索功能。这一选择的背景与需求可以总结为以下几点:

  • 关键字查询:用户可能需要通过服务的名称、描述、分类等信息进行关键字搜索,且搜索性能对用户体验至关重要。MySQL 提供了有限的全文检索能力,但在大数据量、高并发下的性能不如专门的搜索引擎。

  • 地理位置查询:系统要求支持基于用户地理位置的服务搜索,Elasticsearch 的 geo 查询功能专门用于解决此类地理坐标相关的查询,MySQL 在这方面的支持较为有限。

  • 数据增长预期:虽然当前数据量较小,但考虑到未来服务数据的增长(可能从几千条增长到几万或几十万条),需要一个能够横向扩展、应对海量数据的搜索解决方案。

  • 查询实时性与并发性能:门户系统的用户访问量较大,尤其是面向 C 端用户,要求搜索查询不仅需要高效,还要在数据更新后能及时反映变化。因此,对索引同步的实时性和查询性能有较高要求。

基于以上需求,采用了 Elasticsearch 作为搜索引擎,同时引入了 Canal + MQ 方案以实现索引的实时同步。

2. 技术方案设计

2.1 Elasticsearch 全文检索与地理位置查询

Elasticsearch 是一个分布式搜索引擎,基于 Lucene 构建,提供强大的全文检索、结构化查询和地理位置查询功能。选择它的原因包括:

  • 高效全文检索:基于倒排索引的数据结构,Elasticsearch 能够快速处理海量文本数据,支持各种查询方式(如模糊匹配、同义词匹配等)。

  • 地理位置查询:Elasticsearch 内置支持地理位置查询,能够高效处理基于地理坐标的距离计算和范围过滤查询,特别适用于服务场景中需要根据用户当前位置进行服务推荐的需求。

  • 分布式架构:Elasticsearch 通过分片和副本机制实现了良好的水平扩展能力,能够应对未来的数据增长和高并发查询。

2.2 Canal + MQ 实现索引同步

为了确保 Elasticsearch 的索引与数据库保持一致,项目采用了 Canal + MQ 的方式进行数据同步。

Canal会定时读取数据库的binlog日志,解析出增加、修改及删除的数据内容并将其写入MQ。

同步程序监听MQ,收到消息后根据消息内容请求ES同步索引数据。

  • Canal 的作用:Canal 是阿里巴巴开源的一款工具,专门用于解析 MySQL 的 binlog 日志,模拟 MySQL 从库的增量数据同步。在项目中,Canal 会实时监听数据库的增、删、改操作,并解析出具体的操作数据。

  • MQ 的作用:Canal 将解析后的数据变动事件(如新增、修改、删除操作)以消息的形式推送到消息队列(MQ)。MQ 起到了缓冲作用,确保系统的消息异步处理能力。当数据库发生大量数据变动时,消息可以在队列中被有序处理,避免 Elasticsearch 的索引更新被短时间内大量请求压垮。

  • 数据同步逻辑:监听到 MQ 中的消息后,系统中的同步程序会根据消息内容决定对 Elasticsearch 的操作:

    • 对新增的数据进行索引添加。
    • 对修改的数据进行索引更新。
    • 对删除的数据进行索引移除。

这种异步处理机制大大提高了系统的稳定性和扩展性,尤其是在高并发和高频率数据变更的场景下,能够有效减轻数据库的负担。

2.3 Canal简介

2.3.1 Canal是什么

canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,对数据进行同步,如下图:

8b167739093f4228850a13d301ce4259.png

Canal可与很多数据源进行对接,将数据由MySQL同步到ES、MQ、DB等各个数据源。

Canal的意思是水道/管道/沟渠,它相当于一个数据管道,通过解析MySQL的binlog日志完成数据同步工作。

官方文档:https://github.com/alibaba/canal/wiki

2.3.2 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、从服务器解析日志,根据日志内容更新从服务器的数据库,完成从服务器的数据保持与主服务器同步。

78775c8a09754555a35e630096248c72.png

2.3.3 Canal实现数据同步的原理

Canal伪装成从服务器,向主服务器发送dump 协议。

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主服务器之间建立了长连接。

b41d9756c52d4121a2fe93a0d033c76b.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对标世界一流!望繁信科技受邀参加2023企业财务数智化转型论坛

2023年7月21日,由中国CFO发展中心联合浙江省总会计师协会、南京审计大学会计学院、安徽财经大学会计学院举办的“2023企业财务数智化转型论坛(长三角站)”在上海隆重举办。论坛现场座无虚席,全天候、多维度的话题探讨为广大CFO呈现…

[WEBPWN]BaseCTF week1 题解(新手友好教程版)

WEB A Dark Room 这道题的考点是查看网页源代码 网页源代码这里看到的是网页的html css js在用户浏览器上执行的代码 有时候很多铭感信息,或者关键信息。 查看网页源代码的几种方式 1 右键点击查看网页源代码 2 F12 3 Ctrl U 快捷键 HTTP是什么 HTTP&#x…

车路云一体化系统中的数据交互内容

车路云与相关支撑平台的数据交互是构建智能交通系统的重要组成部分,它涉及到车辆、道路基础设施(路侧单元RSU)与云端平台及其相关支撑平台之间的复杂信息流通与协同工作。以下是对这一过程的详细解析: 一、数据交互的组成部分 车…

DMDRS学习

DMDRS学习 产品介绍 达梦数据复制软件(简称DMDRS)是一种用于同构数据库、异构数据库以及各种数据管理系统之间的数据复制软件。DMDRS采用模块化的设计,通过灵活配置不同的功能模块,实现多功能的数据复制服务,以满足多…

Java虚拟机 - 实战篇

一、内存调优 1. 什么是内存泄漏 (1)内存溢出和内存泄漏 2. 监控Java内存的常用工具 (1)Top命令 (2)VisualVM (3)Arthas (4)Prometheus Grafana &#xff…

人工智能--模型评估指标

背景 1、分类回归模型的评估指标 分类模型的目标是将输入数据分配到一个离散类别中,常见的评估指标如下: 准确率 (Accuracy) 解释:表示模型预测正确的样本占总样本的比例。适用于类分布平衡的情况,但在类别不平衡时表现不佳。…

十张图“拿捏”MySQL中B+树的生成过程

hello,我是大都督周瑜,这篇文章带你用十张图“拿捏”MySQL中B树的生成过程。 更多干货技术文章、面试题,欢迎关注我的公众号:IT周瑜 当MySQL接收到一条以下SQL时,表示要从t1表中查询数据: select * from t…

基于java+springboot+vue实现的林业产品推荐系统(文末源码+Lw)135

基于SpringBootVue的实现的林业产品推荐系统(源码数据库万字Lun文流程图ER图结构图演示视频软件包) 系统功能: 林业产品推荐系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。 并按照软件设计开发流程进行…

新书宣传:《量子安全:信息保护新纪元》

《量子安全:信息保护新纪元》 前言本书的看点本书的目录结语 前言 你好! 这是我第一次发布类广告的博文,目的也很单纯,希望以作者的身份介绍一下自己出版的图书——《量子安全:信息保护新纪元》。此书于2024年7月出版…

【go】pprof 性能分析

前言 go pprof是 Go 语言提供的性能分析工具。它可以帮助开发者分析 Go 程序的性能问题,包括 CPU 使用情况、内存分配情况、阻塞情况等。 主要功能 CPU 性能分析 go pprof可以对程序的 CPU 使用情况进行分析。它通过在一定时间内对程序的执行进行采样&#xff0…

17个常见的电子邮件营销错误及避免方法

我们都在邮件营销中犯过错误。你点击发送,然后感到一阵沉重的感觉。你搞砸了,现在全世界都能看到你的错误。这就像把一封信放在瓶子里扔进无边的互联网海洋,你无法把它收回来。 有些邮件营销错误显而易见,可能会让你所有的努力化…

Redis学习Day3——项目工程开发`

扩展阅读推荐: 黑马程序员Redis入门到实战教程_哔哩哔哩_bilibili 使用git命令行将本地仓库代码上传到gitee/github远程仓库-CSDN博客 一、项目介绍及其初始化 学习Redis的过程,我们还将遇到各种实际问题,例如缓存击穿、雪崩、热Key等问题&…

想将桌面移动到D盘,但是不小心将D盘整个改成桌面的快捷方式了的解决办法

本帖为经验分享,因而附带了解释。 着急的uu请直接按照红色(蓝色)加粗标号直接操作! 目录 一、问题描述 二、问题出现的原因 三、解决方法 一、问题描述 想将桌面移动到D盘,但是不小心将D盘整个改成桌面的快捷方式。…

老旧电力系统安全隐患增加 该如何预防电气线路老化等因素引发的电气火灾呢?

为应对我国电气火灾事故频发的挑战,安科瑞电气股份有限公司开发了AcrelCloud-6000安全用电管理云平台。这一平台依托移动互联网和云计算技术,结合物联网传感器,将办公楼、学校、医院、工厂、体育场馆、宾馆及福利院等人员密集场所的电气安全数…

爬虫--基于python的旅游网站数据分析与可视化实现---附源码78517

摘要 在数字化时代,旅游网站积累了大量用户数据,这些数据中蕴藏着丰富的信息和价值。为了更好地理解用户行为、优化旅游服务体验和提高业务运营效率,对旅游网站数据进行深度挖掘和可视化展示显得尤为重要。本文借助Python编程语言&#xff0c…

前端Excel热成像数据展示及插值算法

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏:《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️生活的理想,就是为了理想的生活! 目录 📘 前言 📘一、热成像数…

最受欢迎的10款电脑监控软件大揭秘,员工电脑监控软件真心推荐

随着科技的迅猛发展,越来越多的企业和个人开始关注电脑监控软件的使用。这类软件能够帮助企业管理者更好地了解员工的工作状况,提升工作效率,并确保公司数据安全;个人用户也可以利用这些软件监控电脑活动,保护家人尤其…

电源自动测试系统有哪些原理和优势?

‌电源自动测试系统是一种自动测试设备,用于对各类电源模块进行功能和性能测试。它采用模块化设计,构建了一个方便快捷、功能齐全的电源测试平台,便于后续的检修和维护,减少对企业生产和测试的影响。 电源自动测试系统的工作原理和…

区块链学习笔记3--以太坊

智能合约:跑在以太坊系统中的代码合同,其实质是一段代码。目前已经存在180多万个智能合约。 智能合约能表达:规则明确,不受主观因素影响的业务。 智能合约能表达:规则不轻易修改的业务 如果业务的规则经常变化&#x…

2025第九届数字信号处理国际会议(ICDSP 2025)将在成都召开!

第九届数字信号处理国际会议(ICDSP 2025)将于2025年2月21-23日在成都召开。ICDSP 2025大会由西南交通大学和西华大学联合主办, 并得到各地高校和机构的技术支持。大会旨在邀请众多国内外学者及产业研发人员齐聚一堂,共同探讨数字信号处理领域…