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

使用 Canal 实现 MySQL 与 ES 数据同步的技术实践

前言

本文将详细讲解如何使用阿里的 Canal 工具,实现 MySQL 向 ES(Elasticsearch)的数据同步。

数据同步有多种方式,双写同步数据方式因性能慢、存在分布式事务及数据一致性问题、业务耦合度高且难以扩展,不适合采用。而异步同步数据方案中,如阿里的 Canal 和 Debezium 工具等,它们基于 CDC(数据抓取变更),监听 binlog 日志实现同步。相比之下,Debezium 需要集成 Kafka 且需手写消费者代码,系统复杂度较高,因此本文选择使用 Canal 进行数据同步。

一、基础知识

1.1 主从复制原理

MySQL 的主从复制依赖于 binlog,它记录 MySQL 上的所有变化,并以二进制形式保存在磁盘上的二进制日志文件中。主从复制过程是将 binlog 中的数据从主库传输到从库,一般为异步过程。

详细流程如下:

  1. 主库写 binlog:主库的更新 SQL(update、insert、delete)被写入 binlog。
  2. 主库发送 binlog:主库创建一个 log dump 线程,用于发送 binlog 给从库。
  3. 从库写 relay log:从库连接到主节点时,创建一个 IO 线程,请求主库更新的 binlog,并将接收到的 binlog 信息写入 relay log 日志文件。
  4. 从库回放:从库创建一个 SQL 线程,读取 relay log 中的内容,并在从库中回放,实现主从数据一致性。

1.2 Canal 基础

Canal 是一款常用的数据同步工具,基于 Binlog 订阅方式实现,模拟 MySQL Slave 订阅 Binlog 日志,实现 CDC(Change Data Capture),将已提交的更改发送到下游。

主要流程如下:

  1. Canal 服务端向 MySQL 的 master 节点传输 dump 协议
  2. MySQL 的 master 节点接收到 dump 请求后,推送 Binlog 日志给 Canal 服务端,并将 Binlog 对象(原始为 byte 流)解析转成 Json 格式。
  3. Canal 客户端通过 TCP 协议或 MQ 形式监听 Canal 服务端,将数据同步到 ES。

Canal 执行的核心流程中,Binlog Parser 负责 Binlog 的提取、解析和推送,EventSink 负责数据的过滤、路由和加工。

二、软件下载安装

2.1 Java JDK

  • 官网:[https://www.oracle.com/java/technologies/downloads/]
  • 推荐版本:11.0.19 。由于Canal和ES的安装都强依赖JDK,需注意版本选择,不合适的版本可能导致ES安装失败以及Canal同步数据到ES时出现问题。
  • 安装步骤
    1. 下载JDK安装包后,双击运行安装程序。
    2. 在安装向导中,按照提示选择安装路径等配置,一般可使用默认路径,也可自定义合适路径。
    3. 安装完成后,右键点击“此电脑”,选择“属性”,点击“高级系统设置”,在弹出的“系统属性”窗口中,选择“高级”选项卡,点击“环境变量”。
    4. 在“系统变量”中找到“Path”变量,点击“编辑”,新建变量值,将JDK安装目录下的“bin”文件夹路径添加进去(例如:C:\Program Files\Java\jdk - 11.0.19\bin )。
    5. 新建“JAVA_HOME”系统变量,变量值为JDK的安装目录(例如:C:\Program Files\Java\jdk - 11.0.19 )。
    6. 打开命令提示符(CMD),输入“java -version”,若能正确显示JDK版本信息,说明安装配置成功。

2.2 MySQL

  • 下载:前往MySQL官方网站(https://dev.mysql.com/downloads/mysql/ )下载Windows版本的MySQL安装包,可根据系统是32位还是64位选择合适版本。
  • 安装步骤
    1. 运行安装程序,选择“Custom”(自定义)安装类型,点击“Next”。
    2. 在“Product Configuration”中,选择要安装的MySQL组件,一般保持默认勾选的“MySQL Server”等必要组件即可,点击“Next”。
    3. 选择安装路径,可使用默认路径,也可自定义,点击“Next”。
    4. 进入“Type and Networking”配置界面,一般保持默认的“Server Type”(服务器类型)和端口设置(默认3306),点击“Next”。
    5. 在“Authentication Method”(认证方式)中,可选择“Use Legacy Authentication Method (Retain MySQL 5.x Compatibility)”(使用旧版认证方式,保持与MySQL 5.x兼容),设置好root用户密码等信息后点击“Next”。
    6. 确认安装信息无误后,点击“Execute”开始安装,安装完成后点击“Finish”。
  • 开启BinLog
    1. 找到MySQL安装目录下的“my.ini”(如果没有则新建一个)文件,使用文本编辑器打开。
    2. 在文件中添加或修改以下配置:
[mysqld]
log - bin = mysql - bin
server - id = 1
3. 保存文件后,打开“服务”(可通过在“运行”中输入“services.msc”打开 ),找到“MySQL”服务,右键点击选择“重启”。
4. 重启后,可通过登录MySQL命令行(在命令提示符中输入“mysql - uroot - p”,输入密码登录 ),执行“show variables like '%log_bin%';”命令,若“Value”为“ON”,说明BinLog已开启成功。
  • 创建Canal使用账号:登录MySQL命令行,执行以下SQL语句创建账号并赋予权限:
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'localhost' IDENTIFIED BY 'canal';
FLUSH PRIVILEGES;

2.3 Canal

  • 官网:[https://github.com/alibaba/canal/releases]
  • 版本:v1.1.6 ,需下载canal.adapter和canal.deployer两个部分。
    • canal.deployer:相当于canal的服务端,启动它才可以在客户端接收数据库变更信息。
    • canal.adapter:增加客户端数据落地的适配及启动功能(当deployer接收到消息后,会根据不同的目标源做适配,比如是es目标源适配和hbase适配等等)。
  • 安装步骤
    1. 下载后,将canal.deployer和canal.adapter解压到合适的目录(建议目录路径不要包含中文和特殊字符 )。
    2. 对于canal.deployer,进入其解压后的目录,后续配置修改和启动操作在此目录进行。
    3. 对于canal.adapter,同样进入其解压后的目录,后续配置修改和启动操作在此目录进行。

2.4 ES

  • 官网:[https://www.elastic.co/cn/downloads/elasticsearch]
  • 版本:7.17.4
  • 安装步骤
    1. 下载Windows版本的ES安装包(一般为zip格式 ),解压到合适的目录(建议目录路径不要包含中文和特殊字符 )。
    2. 进入解压后的“bin”文件夹,双击“elasticsearch.bat”启动ES。
    3. 启动成功后,打开浏览器,输入“http://localhost:9200/?pretty”,若能看到ES的相关信息返回,说明ES启动成功。

2.5 Kibana

  • 下载网址:[https://www.elastic.co/cn/downloads/past-releases#kibana]
  • 版本:7.14.0
  • 安装步骤
    1. 下载Windows版本的Kibana安装包(一般为zip格式 ),解压到合适的目录(建议目录路径不要包含中文和特殊字符 )。
    2. 进入解压后的“bin”文件夹,双击“kibana.bat”启动Kibana。
    3. 启动成功后,打开浏览器,输入“http://localhost:5601/app/dev_tools#/console”,若能进入Kibana操作界面,说明Kibana启动成功。

2.6 IK分词器

  • 下载网址:[https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.17.2]
  • 版本:v7.17.2
  • 安装步骤
    1. 下载与ES版本对应的IK分词器压缩包,解压得到相关文件。
    2. 在ES安装目录下找到“plugins”文件夹,在其下新建“analysis - ik”文件夹(如果没有 )。
    3. 将解压后的IK分词器文件复制到“analysis - ik”文件夹中。
    4. 重启ES,使IK分词器生效。可通过在Kibana的Dev Tools中执行相关DSL语句测试分词效果,例如:
POST /_analyze
{"analyzer": "ik_max_word","text": "这是一段测试文本"
}

三、Canal 配置

3.1 canal.deployer 配置

修改 conf—>example 文件夹中的 instance.properties 文件,配置监听的数据库信息,主要修改监听 MySQL 的 URL、用户名和密码(默认账号密码为 canal)。

3.2 canal.deployer 启动

在 canal.deployer 中的 bin 文件目录下,执行启动命令 startup.sh(Windows环境执行startup.bat脚本)。启动成功后,可查看启动日志,“start successful”表示已成功启动,并开始监听 MySQL 数据库。

3.3 canal.adapte 配置

  1. Step1:将 adapter 下面的 bootstrap.yml 文件内容全部注释掉,否则会提示表不存在。

  1. Step2:修改 adapter 的 application.yml 配置文件。需注意 mysql 的账号密码是否正确,以及 es 链接是否添加“http://”前缀。

  1. Step3:修改在 application.yml 中配置的目标数据源 es7 文件夹内容。以监听表 article 为例,在 es7 文件夹中创建 article.yml 文件,配置如下:

dataSourceKey :defaultDS #源数据源的key , 对应上面配置的srcDataSources中的值
destination :example #canal的instance或者MQ的topic
groupId :g1 #对应MQ模式下的groupId , 只会同步对应groupId的数据
esMapping :_index :article #es 的索引名称_id :_id #es 的_id, 如果不配置该项必须配置下面的pk项_id则会由es自动分配sql : "SELECT t .idAS _id , t .id, t .user_id, t .article_type , t .title, t .short_title, t .picture,t .summary , t .category_id, t .source, t .source_url, t .offical_stat , t .topping_stat,t .cream_stat, t .`status`, t .deleted, t .create_time, t .update_timeFROM article t "        #sql映射commitBatch :1 #提交批大小
  1. Step4:在 Kibana 中创建 ES 的 article 索引,代码如下:
PUT /article
{"mappings" : {"properties" : {"id" : {"type" : "integer"},"user_id" : {"type" : "integer"},"article_type" : {"type" : "integer"},"title" : {"type" : "text","analyzer": "ik_max_word"},"short_title" : {"type" : "text","analyzer": "ik_max_word"},"picture" : {"type" : "text","analyzer": "ik_max_word"},"summary" : {"type" : "text","analyzer": "ik_max_word"},"category_id" : {"type" : "integer"},"source" : {"type" : "integer"},"source_url" : {}}}
}

3.4 canal.adapte 启动

启动后查看启动日志,若没有报错且启动了 8081 端口,则表示启动成功,此时可进行操作。

四、数据同步实战

4.1 全量同步

启动 adapter 后,可使用源码中提供的接口进行全量数据同步,执行同步命令后,会提示导入的数据条数。

curl http://127.0.0.1:8081/etl/es7/article.yml -X POST

4.2 增量同步

当在 MySQL 中进行 update、delete 和 insert 操作时,ES 中的数据会相应变化。例如,进行修改操作后,查看 ES 查询结果,可验证数据已成功更改。

五、总结

通过本文,我们详细了解了使用 Canal 实现 MySQL 到 ES 数据同步的全过程,包括基础知识、软件安装、Canal 配置以及全量和增量数据同步实战。希望这些内容能为大家在实际项目中应用该技术提供帮助。如果项目中遇到类似场景,基本可以直接参考本文的方法进行操作。

以上就是本次技术分享的全部内容,希望对大家有所帮助!

相关文章:

使用 Canal 实现 MySQL 与 ES 数据同步的技术实践

前言 本文将详细讲解如何使用阿里的 Canal 工具,实现 MySQL 向 ES(Elasticsearch)的数据同步。 数据同步有多种方式,双写同步数据方式因性能慢、存在分布式事务及数据一致性问题、业务耦合度高且难以扩展,不适合采用…...

《实战AI智能体》什么是 Scrum 项目管理及为什么需要它

Scrum 项目管理是一种敏捷项目管理方法,强调团队合作、迭代开发和客户参与。它的核心概念包括 Scrum 团队、产品待办事项列表、Sprint、每日站立会议、Sprint 回顾会议等。Scrum 团队由产品负责人、Scrum 主管和开发团队组成,他们共同负责项目的规划、执行和交付: 产品待办事…...

智能硬件开发革命:低代码平台+物联网

物联网和低代码开发 初识物联网 物联网的概念 20 世纪末,随着计算机网络和通信技术的兴起,互联网开始走进并融入人们的生活。传统互联网通常以人作为主体,数据的产生和传输都在人的控制下进行,数据的应用结果也在具体的人身上得…...

「合诚」携手企企通共建新材料和健康产业采购数智化新生态

在科技革命与产业变革深度融合的时代背景下,新材料与健康产业正迎来数字化、智能化的快速发展。 技术突破与消费升级的双重驱动,推动着行业不断创新,同时也对企业的供应链管理提出了更高要求。 1、合诚:聚焦新材料与健康产业&am…...

ansible角色

一、角色 role 本质上就是目录 /etc/ansible/roles 1、创建角色 tree查看目录结构 在同一个角色中,相互引用文件、操作时,不需要添加任何路径 删除角色,将角色目录中的角色文件删除 案例:部署zabbix agent 执行角色...

WHAT - React 元素接收的 ref 详解

目录 1. ref 的基本概念2. 如何使用 ref2.1 基本用法2.2 类组件使用 createRef 3. forwardRef 转发 ref4. ref 的应用场景5. ref 和函数组件总结 在 React 中,ref(引用)用于访问 DOM 元素或类组件实例。它允许我们直接与元素进行交互&#xf…...

数字游戏(继Day 10)

主体: #include<stdio.h> #include<time.h> #include<stdlib.h>#include"mygetch.h"#define MAX 51 //定义测试字母的最大长度void help() {printf("\n****************************************");printf("\n*输入过程中无法退出…...

react 中将生成二维码保存到相册

需求&#xff1a;生成二维码&#xff0c;能保存到相册 框架用的 react 所以直接 qrcode.react 插件&#xff0c;然后直接用插件生成二维码&#xff0c;这里一定要写 renderAs{‘svg’} 属性&#xff0c;否则会报错&#xff0c;这里为什么会报错&#xff1f;&#xff1f;&#…...

React-05React中props属性(传递数据),propTypes校验,类式与函数式组件props的使用

1.类式组件props基本数据读取与解构运算符传递 <script type"text/babel">// 创建组件class PersonalInfo extends React.Component {render() {// 读取props属性 并读取值console.log(props,this.props);return(<ul><li>姓名&#xff1a;{this.p…...

export default function?在react中在前面还是后面呢?

好的&#xff01;我将通过几个具体场景的代码示例&#xff0c;展示不同 export default 使用方式的适用情况&#xff0c;并给出推荐实践。 场景 1&#xff1a;基础组件&#xff08;推荐直接导出&#xff09; 适用情况&#xff1a;简单组件&#xff0c;无需额外处理 // 方式A:…...

红米手机输入正确密码也无法解锁的问题的可尝试解决方法

文章目录 问题现象官方途径没看到有能给解决的可尝试解决方法&#xff08;汇总小红书成功解决方法&#xff0c;但从回复来看&#xff0c;多为成功的个例&#xff0c;整体而言希望不大&#xff09;重启/强制重启尝试之前的密码等待一晚上后再次尝试输入密码&#xff0c;包括重启…...

优选算法系列(6.模拟)

一.替换所有的问号&#xff08;easy&#xff09; 题目链接&#xff1a;1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 纯模拟。从前往后遍历整个字符串&#xff0c;找到问号之后&#xff0c;就用 a ~ z 的每⼀个字符去尝试替换即可。 代码…...

罗技K860键盘

罗技蓝牙键盘的顶部功能键F1-F12的原本功能 单击罗技键盘的功能键时&#xff0c;默认响应的是键盘上面显示的快进、调节音量等功能。改变回F1~F12原本功能&#xff0c;同时按下 fn和esc组合键...

⭐算法OJ⭐数据流的中位数【最小堆】Find Median from Data Stream

最小堆 最小堆是一种特殊的完全二叉树数据结构。 基本定义 堆性质&#xff1a;每个节点的值都小于或等于其子节点的值&#xff08;根节点是最小值&#xff09;完全二叉树性质&#xff1a;除了最底层外&#xff0c;其他层的节点都是满的&#xff0c;且最底层的节点都靠左排列…...

node-modules-inspector 使用以及 node_modules可视化 依赖关联关系快速分析

node-modules-inspector 使用以及 node_modules可视化 依赖关联关系快速分析 node-modules-inspector 简介 node-modules-inspector 是一个用于分析和可视化 node_modules 依赖关系的工具&#xff0c;主要功能包括&#xff1a; 依赖可视化&#xff1a;以交互式图表展示项目的依…...

python自动登录远程设备的几种方式(华为设备)

其实登录远程设备&#xff08;交换机路由器&#xff09;的方式无非就是通过SSH或者是Telnet这两个协议&#xff0c;当然最主要的还是SSH&#xff0c;这里主要讲的是通过这两个协议登录远程设备的几个方式 拓扑 本文都是用的这个拓扑&#xff0c;主要通过编写python脚本来登录其…...

【android bluetooth 框架分析 01】【关键线程 1】【关键线程介绍】

1. 为什么学习蓝牙协议栈之前&#xff0c;必须先梳理清楚这几大线程&#xff1f; 为什么 学习协议栈之前 最好是要先梳理清楚 关键线程 bt_stack_manager_threadbt_jni_threadbt_main_threadbt_a2dp_sink_worker_thread 1.1 蓝牙协议栈是典型的“多线程异步系统” 蓝牙协议…...

LDAP高效数据同步:Syncrepl复制模式实战指南

#作者&#xff1a;朱雷 文章目录 一、Syncrepl 复制简介1.1. 什么是复制模式1.2. 什么是 syncrepl同步复制 二、Ldap环境部署三、配置复制类型3.1. 提供者端配置3.2. 消费者端配置3.3.启动服务3.4.测试同步是否生效 四、总结 一、Syncrepl 复制简介 1.1. 什么是复制模式 Ope…...

SeeGround: See and Ground for Zero-Shot Open-Vocabulary 3D Visual Grounding

CVPR 2025 核心问题与动机 问题背景&#xff1a;3D视觉定位&#xff08;3DVG&#xff09;要求根据文本描述在3D场景中定位目标物体&#xff0c;是增强现实、机器人导航等应用的关键技术。传统方法依赖标注的3D数据集和预定义类别&#xff0c;限制了其在开放场景中的扩展性。现…...

深入理解Spring IoCDI

1. 引言&#xff1a;为什么需要IoC和DI&#xff1f; 传统开发方式的耦合性问题 在传统开发中&#xff0c;对象通常通过 new 关键字直接创建&#xff0c;例如&#xff1a; // 直接依赖具体实现类 UserService userService new UserServiceImpl(); OrderService orderService…...

NO.78十六届蓝桥杯备战|数据结构-并查集|双亲表示法|初始化|查询|合并|判断|亲戚|Lake Counting|程序自动分析(C++)

双亲表⽰法 接下来要学习到的并查集&#xff0c;本质上就是⽤双亲表⽰法实现的森林。因此&#xff0c;我们先认识⼀下双亲表⽰法。 在学习树这个数据结构的时&#xff0c;讲到树的存储⽅式有很多种&#xff1a;孩⼦表⽰法&#xff0c;双亲表⽰法、孩⼦双亲表⽰法以及孩⼦兄弟表…...

20250407-组件v-model

基本用法 v-model 可以在组件上使用以实现双向绑定。 首先看下 v-model 在原生元素上的用法&#xff1a; <input v-model"searchText" /> 在代码背后&#xff0c;模板编译器会对 v-model 进行更冗长的等价展开。因此上面的代码其实等价于下面这段&#xff…...

oracle 存储体系结构

oracle 存储体系结构 参考&#xff1a; Logical Storage Structures (oracle.com)...

晋城市电子健康证上传照片尺寸要求及手机拍照制作方法

晋城市餐饮从业人员健康证电子照片上传有着明确的技术规范。根据"晋城市从业人员电子健康证明服务平台"要求&#xff0c;照片尺寸应为358像素&#xff08;宽&#xff09;441像素&#xff08;高&#xff09;&#xff0c;这一比例符合标准证件照的规格。照片底色可选择…...

STL c++ list——模拟实现

结点类的模拟实现 list是一个带头双向循环链表 因需要实现一个节点类&#xff0c;其中包含哨兵位&#xff08;用来标识位置&#xff09;&#xff0c;节点信息&#xff08;val数据&#xff0c;prev后指针&#xff0c;next后指针&#xff09; template<class T> struct …...

【ES系列】Elasticsearch从入门到精通保姆级教程 | 启篇

🔥 本系列将带你从零开始学习Elasticsearch,通过保姆级教程,手把手教你掌握这个强大的搜索与分析引擎。无论你是完全的新手,还是想系统学习ES的开发者,这个系列都能满足你的需求。 📚博主匠心之作,强推专栏: JAVA集合专栏 【夜话集】JVM知识专栏数据库sql理论与实战【…...

图解Java运行机制-JVM、JRE、JDK区别

以下是Java运行机制及JVM、JRE、JDK区别的图解与说明&#xff1a; --- ### 一、Java程序运行机制 1. **编写与编译** Java源文件&#xff08;.java&#xff09;通过**JDK中的编译器&#xff08;javac&#xff09;**编译为字节码文件&#xff08;.class&#xff09;&#xff…...

UML类图综合实验三补档

1.使用简单工厂模式模拟女娲(Nvwa)造人(Person)&#xff0c;如果传入参数“M”&#xff0c;则返回一个Man对象&#xff0c;如果传入参数“W”&#xff0c;则返回一个Woman对象&#xff0c;用Java语言实现该场景。现需要增加一个新的Robot类&#xff0c;如果传入参数“R”&#…...

OpenHarmony子系统开发 - DFX(八)

OpenHarmony子系统开发 - DFX&#xff08;八&#xff09; 八、Faultlogger开发指导 概述 功能简介 Faultlogger是OpenHarmony为开发者提供的一个维测日志框架&#xff0c;能够为应用、元能力、系统服务进程崩溃故障提供统一检测、日志采集、日志存储、日志上报功能&#xf…...

C# virtual 和 abstract 详解

简介 在 C# 中&#xff0c;virtual 和 abstract 关键字都用于面向对象编程中的继承和多态&#xff0c;它们主要用于方法、属性和事件的定义&#xff0c;但在用法上存在一些重要的区别。 virtual 关键字 virtual 表示可重写的方法&#xff0c;但可以提供默认实现&#xff0c;…...

红宝书第三十二讲:零基础学会模块打包器:Webpack、Parcel、Rollup

红宝书第三十二讲&#xff1a;零基础学会模块打包器&#xff1a;Webpack、Parcel、Rollup 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、模块打包器是什么&#xff1f; 把分散的HTML/CSS/JS文件 组合成浏览…...

DeepSeek 在金融领域的应用解决方案

DeepSeek 在金融领域的应用解决方案 一、背景 随着人工智能技术的快速发展&#xff0c;DeepSeek 作为一款国产大模型&#xff0c;凭借其强大的语义理解、逻辑推理和多模态处理能力&#xff0c;在金融行业迅速崭露头角。金融行业作为经济的核心&#xff0c;面临着激烈的市场竞…...

linux 处理2个文件的差集

命令 grep -Fvxf 文件1 文件2 -F 将模式视为固定字符串&#xff0c;而非正则表达式。 -v 反向匹配&#xff0c;输出不匹配的行。 -x 精确匹配整行&#xff0c;避免部分匹配。 -f 文件1 从文件1中读取模式。 示例 执行命令 grep -Fvxf a1.txt a2.txt...

vue3中pinia基本使用

一、安装以及引入 安装&#xff1a;npm install piniamain.js文件&#xff1a; import { createApp } from "vue"; import { createPinia } from "pinia"; import App from "./App.vue";const pinia createPinia() const app createApp(App)…...

“乐企“平台如何重构业财税票全流程生态?

2025年&#xff0c;国家税务总局持续推进的"便民办税春风行动"再次推进数字化服务升级&#xff0c;其中"乐企"平台作为税务信息化的重要载体&#xff0c;持续优化数电票服务能力&#xff0c;为企业提供更高效、更规范的税务管理支持。在这一背景下&#xf…...

JVM内存模型

JVM内存模型 JVM&#xff08;Java Virtual Machine&#xff09;内存模型是 Java 程序在运行时&#xff0c;JVM 为其分配的内存结构&#xff0c;它定义了 Java 程序如何在内存中存储数据和如何进行线程之间的通信。JVM 内存模型是为了支持高效的多线程执行和垃圾回收机制。 一…...

LeetCode热题100记录-【二分查找】

二分查找 35.搜索插入位置 思考&#xff1a;二分查找先判定边界条件 记录&#xff1a;不需要二刷 class Solution {public int searchInsert(int[] nums, int target) {int left 0,right nums.length-1;if(nums[right] < target){return right1;}if(nums[left] > tar…...

科普:原始数据是特征向量么?

一、输入向量 x \mathbf{x} x是特征向量 机器学习算法公式中的输入向量 x \mathbf{x} x通常要求是特征向量。原因如下&#xff1a; 从算法原理角度&#xff1a;机器学习算法旨在通过对输入数据的学习来建立模型&#xff0c;以实现对未知数据的预测或分类等任务。特征向量是对…...

echarts地图添加涟漪波纹点位

1.完整代码 chartsOption: {tooltip: {trigger: "item",formatter: this.initTooltip,triggerOn: "mousemove",borderColor: "#fff",backgroundColor: "rgba(216, 227, 244, 1)",extraCssText: "border-radius: 14px;", //…...

Linux(十三)fork + exec进程创建

一、进程创建 在了解进程创建的步骤前&#xff0c;让我们先通过实例观察一下。大家可以跟小编一起&#xff0c;在终端中执行3次ps -f命令&#xff0c;观察一下。 通过上图&#xff0c;我们可以发现&#xff0c;3次ps -f的父进程&#xff08;PPID&#xff09;都是一样的&#xf…...

集合计算高级函数

说明 过滤 遍历一个集合并从中获取满足指定条件的元素组成一个新的集合转化/映射&#xff08;map&#xff09;将集合中的每一个元素映射到某一个函数扁平化 扁平化映射 注&#xff1a;flatMap 相当于先进行 map 操作&#xff0c;在进行 flatten 操作集合中的每个元素的子元素映…...

鼎讯信通 便携式雷达信号干扰模拟器:打造实战化电磁环境的新利器

在现代战争中&#xff0c;电磁环境的复杂性直接影响着雷达装备的性能和作战效果。面对敌方日益精进的电子战手段&#xff0c;如何提升雷达设备的抗干扰能力&#xff0c;确保其在实战环境中的稳定性和可靠性&#xff0c;已成为各国军队和科研机构的重要课题。 为此&#xff0c;…...

避开养生误区,拥抱健康生活

在追求健康的道路上&#xff0c;我们常常会陷入一些养生误区&#xff0c;不仅无法达到预期效果&#xff0c;还可能损害身体健康。只有拨云见日&#xff0c;认清这些误区&#xff0c;采取正确的养生方式&#xff0c;才能真正拥抱健康生活。​ 很多人认为&#xff0c;保健品吃得…...

解码ChatBI技术形态:独立对话框、插件式与IM集成模式的技术优劣

ChatBI的形态之争 随着大语言模型&#xff08;LLM&#xff09;技术的成熟&#xff0c;**对话式商业智能&#xff08;ChatBI&#xff09;**正成为企业数据分析的新范式。然而&#xff0c;不同的技术形态直接影响ChatBI的落地效果——独立对话框、插件式助手、IM集成机器人&…...

rockylinux 8 9 升级到指定版本

rockylinux 8 update 指定版本 rockylinux 历史版 所有版本rockylinux 最新版 所有版本vault历史版 pub最新版(https://dl.rockylinux.org)地址后面增加不同名称 echo "delete repos" rm -rf /etc/yum.repos.d/*echo "new rockylinux repo" cat <<EO…...

一文详解OpenCV环境搭建:Ubuntu20.4使用CLion配置OpenCV开发环境

在计算机视觉和图像处理领域&#xff0c;OpenCV 是一个不可或缺的工具。其为开发者提供了一系列广泛的算法和实用工具&#xff0c;支持多种编程语言&#xff0c;并且可以在多个平台上运行。对于希望在其项目中集成先进视觉功能的开发者来说&#xff0c;掌握如何配置和使用OpenC…...

Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(四)

Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;四&#xff09; 对 Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;三&#xff09;-CSDN博客 进行完善&#xff0c;注意完善 …...

01-JVM 内存模型与 GC 原理

JVM 内存模型与 GC 原理解析 本文将从 JVM 内存模型入手&#xff0c;深入剖析各个区域的作用、GC 的运行机制与常见算法&#xff0c;并结合源码与面试思维&#xff0c;带你掌握 JVM 的底层世界。 一、JVM 内存模型&#xff08;Java Memory Model&#xff09; JVM 将内存划分为…...

Docker--Docker镜像制作的注意事项

Docker 镜像制作 dockerfiles的指令讲解 链接 CMD和ENTRYPOINT CMD 和 ENTRYPOINT 是 Dockerfile 中用于指定容器启动时运行命令的两个指令。它们在功能上有一些相似之处&#xff0c;但也存在重要区别。 在编辑Dockerfile时&#xff0c;ENTRYPOINT或者CMD命令会自动覆盖之前…...

AI:支持向量机(SVM)

支持向量机(SVM)理论基础详解:从零开始的完全指南 一、SVM的核心思想:直观理解 1.1 什么是分类问题? 想象你在玩一个游戏:桌上有红色和蓝色的球,你需要画一条线把它们分开。这条线就是分类边界。SVM的目标是找到一条最优分界线,使得这条线到最近的红色球和蓝色球的距…...