当前位置: 首页 > news >正文

搜索功能技术方案

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

 

相关文章:

搜索功能技术方案

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

硬件体系架构的学习

硬件体系架构的学习 RISC全称Reduced Instruction Set Compute,精简指令集计算机; CISC全称Complex Instruction Set Computers,复杂指令集计算机。 SOC片上系统概念 System on Chip,简称Soc,也即片上系统。从狭义…...

【与C++的邂逅】--- C++的IO流

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 与C的邂逅 本篇博客我们来了解C中io流的相关知识。 🏠 C语言输入输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 sc…...

【C++ Primer Plus习题】16.8

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include <set> #includ…...

基于stm32的四旋翼无人机控制系统设计系统设计与实现

文章目录 前言资料获取设计介绍功能介绍设计程序 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业…...

【原理图PCB专题】案例:原理图设计检查为什么要检查全局网络?

本案例发生在新人的PCB设计文件中,当然就算硬件老人们,其实只要不注意也很容易出现这种全局网络乱用的问题。 如下所示是给新人的接口参考图纸,要求使用嘉立创绘制16个相同的接口做一个工装板。同时还要增加单片机实现切换控制功能。可以看到座子的24个管脚中使用到了3.3V、…...

Java 之 IO流

一、IO流概述 在计算机编程中&#xff0c;IO流&#xff08;Input/Output Stream&#xff09;是处理设备间数据传输的关键技术。简单来说&#xff0c;IO流就是以流的方式进行输入输出&#xff0c;数据被当作无结构的字节序或字符序列来处理。在Java等编程语言中&#xff0c;IO流…...

计算机毕业设计 健身房管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件 日历期间、年期间、月期间及时分期间组件在不同的应用场景中发挥着重要的作用。这些组件通常用于表单、应用程序或网站中&#xff0c;以方便用户输入和选择特定的日期和时间范围。以下是这些组件的主要作用&a…...

GAMES101(10~11节,几何)

Geometry implicit隐式几何表示&#xff1a; 函数f(x,y,z)&#xff1a; 根据函数fn描述几何&#xff0c;遍历所有空间内 的点&#xff0c;如果带入xyz到函数f(x,y,z)结果0那就绘制这个点 如果xyz求值结果>0表示在几何外&#xff0c;0在表面,<0在几何内 构造几何csg(…...

家电制造的隐形守护者:矫平机确保材料完美无瑕

在家电制造业中&#xff0c;产品的美观和耐用性是消费者选择的关键因素。然而&#xff0c;在生产过程中&#xff0c;材料的翘曲问题往往成为影响产品质量的隐形杀手。幸运的是&#xff0c;矫平机的出现&#xff0c;为家电制造商提供了一个有效的解决方案&#xff0c;确保每一件…...

软件设计师考纲及笔记

1. 计算机系统知识&#xff08;分值占比&#xff1a;10%&#xff0c;重要程度&#xff1a;★★★★☆&#xff09; 1.1 计算机系统基础 计算机组成&#xff1a; 中央处理器&#xff08;CPU&#xff09;&#xff1a;计算机的核心部件&#xff0c;执行指令并处理数据。内存&…...

基于SpringCloud的微服务框架

1. 服务架构演变 1.1 单体架构 开发部署方便&#xff0c;维护扩展难。 1.2 垂直分割 将应用拆分成多个垂直部分&#xff0c;每一部分负责一组相关功能。 1.3 SOA&#xff08;Service-Oriented Architecture&#xff09; 面向服务的架构&#xff0c;引入了服务的概念。通过…...

C++速通LeetCode简单第19题-只出现一次的数字

方法一&#xff1a;暴力求解&#xff0c;排序后两个两个比较&#xff0c;两者不同时前者为答案&#xff1a; class Solution { public:int singleNumber(vector<int>& nums) {if(nums.size() 1) return nums[0];list<int> l;int ans 0;for(int i 0;i< n…...

AutoSar AP中Proxy Class中Methods描述的总结

☞ 返回总目录 5.3.6 Methods&#xff08;方法&#xff09; Proxy Class 与方法包装类 代理类与方法成员&#xff1a;对于远程服务的每种方法&#xff0c;Proxy Class 包含特定于该方法的包装类成员。例如示例中有 Calibrate、Adjust 和 LogCurrentState 三种方法对应的成员。…...

如何在本地计算机中打开远程服务器的Jupyter notebook

1. 在你的本地计算机上打开终端。 2. 使用SSH命令创建一个隧道&#xff1a; ssh -L 8888:localhost:8888 your_usernameyour_server_ip 这里&#xff0c;your_username 是你的服务器用户名&#xff0c;your_server_ip 是你的服务器IP地址。 其中&#xff0c;-L 8888:localhos…...

实习项目|苍穹外卖|day11

Apache ECharts 前端技术。 营业额统计 还是比较简单的。 用户统计 订单统计 以上所有需求。难点在于对时间类的处理&#xff1a; // 接收格式 GetMapping("/turnoverStatistics")ApiOperation("营业额统计")public Result<TurnoverReportVO>…...

easy_cloudantivirus

0x00前言 必须安装在virtualbox 攻击机&#xff1a;kali 靶机 easy_cloudantivirus 链接&#xff1a; https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/ 0x01信息搜集 经过测试发现靶场IP为192.168.56.106 进一部对IP搜集信息 发现8080端口youhttp服务。…...

python中Web API 框架

Python 中有几个非常流行的 Web API 框架&#xff0c;它们让你可以轻松地构建和部署高效的 Web API。下面我将为你介绍几个最受欢迎的 Python Web API 框架&#xff0c;及其使用方法和特点。 1. FastAPI FastAPI 是一个现代、快速&#xff08;非常高性能&#xff09;的 Web 框…...

Linux(6)--CentOS目录

文章目录 1. 根目录2. cd目录切换命令3. CentOS目录介绍4. pwd命令介绍5. ls命令介绍5.1 ls5.2 ls -a5.3 ls -l 1. 根目录 Windows电脑的根目录是计算机(我的电脑)&#xff0c;然后C盘、D盘。 Linux系统的根目录是/&#xff0c;我们可以使用cd /进入根目录&#xff0c;然后使…...

火绒误删explorer.exe导致Win10黑屏?保姆级修复指南(含安全模式+注册表操作)

火绒误删explorer.exe导致Win10黑屏的全面解决方案 当Windows 10系统突然陷入黑屏状态&#xff0c;只剩鼠标指针孤独地在屏幕上闪烁&#xff0c;这种体验对任何用户来说都堪称噩梦。特别是当发现罪魁祸首竟是日常依赖的安全软件火绒时&#xff0c;更让人措手不及。本文将系统性…...

LPC11U24内部EEPROM原理与高可靠写入实践

1. LPC11U24 内部EEPROM技术深度解析与工程实践指南LPC11U24是NXP&#xff08;恩智浦&#xff09;推出的基于ARM Cortex-M0内核的低成本、低功耗32位微控制器&#xff0c;广泛应用于工业控制、消费电子和物联网终端节点。其片上集成的1024字节内部EEPROM&#xff08;Electrical…...

OpenClaw飞书机器人实战:QwQ-32B驱动自动化问答系统

OpenClaw飞书机器人实战&#xff1a;QwQ-32B驱动自动化问答系统 1. 为什么选择OpenClaw飞书QwQ-32B组合&#xff1f; 去年冬天&#xff0c;我被一个重复性工作折磨得够呛——每天要处理几十条飞书消息&#xff0c;提取会议要点、整理待办事项、回复常见问题。直到发现OpenCla…...

智能家庭网络系统新选择:iStoreOS打造高效家庭网络与存储中心

智能家庭网络系统新选择&#xff1a;iStoreOS打造高效家庭网络与存储中心 【免费下载链接】istoreos 提供一个人人会用的的路由、NAS系统 &#xff08;目前活跃的分支是 istoreos-22.03&#xff09; 项目地址: https://gitcode.com/gh_mirrors/is/istoreos 家庭网络卡顿…...

告别编译烦恼:在Ubuntu 22.04上快速验证OpenCV 3.4.15安装的几种方法

告别编译烦恼&#xff1a;在Ubuntu 22.04上快速验证OpenCV 3.4.15安装的几种方法 刚完成OpenCV编译安装的开发者常会遇到这样的困惑&#xff1a;终端显示"100% Built target"后&#xff0c;如何确认这个耗费数小时编译的计算机视觉库真的能正常工作&#xff1f;本文将…...

如何用Binance Trade Bot实现加密货币交易自动化?从配置到运行的完整路径

如何用Binance Trade Bot实现加密货币交易自动化&#xff1f;从配置到运行的完整路径 【免费下载链接】binance-trade-bot Automated cryptocurrency trading bot 项目地址: https://gitcode.com/gh_mirrors/bi/binance-trade-bot 在加密货币交易领域&#xff0c;手动操…...

别再只盯着代码了!手把手教你读懂Cartographer的PGM和YAML地图文件(附Notepad++实操)

从二进制到坐标系&#xff1a;Cartographer地图文件深度解析与实战调参指南 当你第一次打开Cartographer生成的.pgm和.yaml文件时&#xff0c;是否感觉像在解读某种外星密码&#xff1f;那些数字和参数背后&#xff0c;藏着机器人如何理解世界的秘密。本文将带你像侦探一样拆解…...

ACE协议实战:如何通过AxDOMAIN信号优化多核SoC的缓存一致性?

ACE协议实战&#xff1a;AxDOMAIN信号在多核SoC缓存一致性中的深度优化 1. 多核SoC缓存一致性的工程挑战 在现代嵌入式系统设计中&#xff0c;多核处理器架构已成为提升性能的主流方案。当我们把多个ARM Cortex-A系列核心集成到同一芯片时&#xff0c;缓存一致性管理立即成为系…...

开源六轴机械臂从零构建指南:低成本DIY方案与实战应用

开源六轴机械臂从零构建指南&#xff1a;低成本DIY方案与实战应用 【免费下载链接】Faze4-Robotic-arm All files for 6 axis robot arm with cycloidal gearboxes . 项目地址: https://gitcode.com/gh_mirrors/fa/Faze4-Robotic-arm 开源六轴机械臂技术正以前所未有的速…...

罗氏线圈COMSOL建模与电磁模拟仿真

罗氏线圈comsol建模&#xff0c;电磁模拟仿真罗氏线圈这玩意儿在电磁测量里算是老演员了&#xff0c;今天咱们用COMSOL给它整活建模。先别急着开软件&#xff0c;核心思路得理清楚——这空心环状结构本质上就是个积分器&#xff0c;靠的是交变磁场在环形路径上感应出的电动势。…...