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

MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解

MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解

  • 前言
  • 一、MySQL + Elasticsearch的背景与需求
    • 1.1 为什么要使用Elasticsearch(ES)?
    • 1.2 为什么MySQL在某些场景下不足以满足需求?
    • 1.3 MySQL + Elasticsearch结合的必要性
  • 二、MySQL + Elasticsearch的典型使用场景
    • 2.1 全文搜索与复杂查询
    • 2.2 实时数据分析
    • 2.3 大数据处理与高并发查询
  • 三、MySQL + Elasticsearch的优势与架构设计
    • 3.1 为什么不单独使用 MySQL 或 Elasticsearch?
      • 3.1.1 单独使用 MySQL 的不足
      • 3.1.2 单独使用 Elasticsearch 的不足
    • 3.2 MySQL + Elasticsearch的优势
      • 3.2.1 性能与灵活性兼顾
      • 3.2.2 可扩展性强
      • 3.2.3 架构解耦与数据同步
      • 3.2.4 实时分析与快速迭代
  • 四、存储方案全景对比
  • 五、高可用、高可靠与安全设计
    • 5.1 MySQL 高可用
    • 5.2 Elasticsearch 高可用
    • 5.3 安全可靠
  • 六、结合使用MySQL与Elasticsearch的存储与查询示例
    • 6.1 Elasticsearch用于模糊搜索
    • 6.2 MySQL用于精确分类条件查询
    • 6.3 结合MySQL与Elasticsearch进行查询流程


前言

在现代企业级应用中,数据存储和检索是核心环节,尤其是涉及到大量数据存储和查询时,如何选择合适的存储系统成为了开发者和架构师的重要课题。MySQLElasticsearch(ES)是两种广泛使用的数据库系统,它们各自有其独特的优势,但在某些场景下,单独使用MySQL或ES可能无法满足业务需求。结合MySQL与Elasticsearch,不仅能够充分发挥两者的优势,还能更好地满足高并发、高可用、高可靠的业务需求。
在这里插入图片描述


一、MySQL + Elasticsearch的背景与需求

1.1 为什么要使用Elasticsearch(ES)?

Elasticsearch 是基于Lucene的开源搜索引擎,它被广泛应用于需要高效全文搜索、复杂查询和快速检索的场景中。与传统的关系型数据库相比,Elasticsearch提供了更高效的搜索引擎和更灵活的数据分析能力,具有以下几个显著特点:

  • 快速搜索和查询:Elasticsearch采用倒排索引(Inverted Index)技术,极大地提高了大数据量下的搜索速度,尤其适用于需要全文搜索和复杂查询的场景。

  • 横向扩展性:Elasticsearch是分布式系统,具有天然的横向扩展能力,支持数据的分片和多副本机制,能够在大规模数据处理时提供高效的服务。

  • 实时搜索:ES具有近实时(1s延迟)的搜索能力,索引更新后几乎能够立刻被查询到,适用于需要实时查询的场景。

  • 多样化的数据分析和聚合功能:ES提供了丰富的数据聚合功能,可以高效处理大规模数据的统计分析。

1.2 为什么MySQL在某些场景下不足以满足需求?

尽管MySQL是关系型数据库的典型代表,广泛应用于OLTP(在线事务处理)场景,但在处理大规模全文搜索、复杂查询、实时数据分析等任务时,MySQL存在一些限制:

  • 性能瓶颈:传统的关系型数据库MySQL通常基于B树索引(B-Tree Index),在大规模数据检索、复杂查询和全文搜索时性能不如ES。

  • 扩展性差:MySQL虽然可以通过主从复制和分库分表来进行扩展,但其水平扩展能力有限,特别是在面对大规模数据和高并发请求时,MySQL的性能可能会受到限制。

  • 不支持高级搜索:MySQL并不适合做复杂的模糊查询、全文搜索等任务,这类任务在Elasticsearch中能通过倒排索引高效地实现。

1.3 MySQL + Elasticsearch结合的必要性

将MySQL和Elasticsearch结合使用,可以充分发挥两者的优势,补充彼此的不足。

  • MySQL负责存储结构化数据:MySQL作为关系型数据库,适合存储高结构化的数据,能够保证数据的一致性、事务性和完整性。

  • Elasticsearch负责全文搜索与高效查询:Elasticsearch则可以在高并发查询、复杂检索和实时搜索方面发挥优势,处理数据分析和查询负载。

二、MySQL + Elasticsearch的典型使用场景

2.1 全文搜索与复杂查询

在传统关系型数据库中,处理复杂的查询和全文搜索会面临性能瓶颈。Elasticsearch的倒排索引和分布式架构可以处理海量数据的快速检索,因此非常适合需要支持全文搜索、模糊查询等功能的场景。

  • 电商平台:商品名称、描述、标签等字段经常需要进行全文检索,ES能够实现高效的搜索功能。

  • 日志分析系统:日志数据量大且结构不固定,使用Elasticsearch进行日志数据的快速查询、聚合和分析是非常理想的。

2.2 实时数据分析

Elasticsearch的实时索引更新和近实时搜索能力使得它在处理需要实时更新的分析任务时表现优秀。

  • 社交网络分析:实时跟踪用户活动并进行分析,如推文、评论的情感分析、热点话题的挖掘等。

  • 用户行为分析:电商、广告等行业需要实时追踪用户行为,并提供精准的分析报告。

2.3 大数据处理与高并发查询

当系统需要处理大量并发查询时,单独使用MySQL可能无法满足要求,因为MySQL难以应对大量复杂查询的并发请求。Elasticsearch的分布式设计和并行处理能力则能轻松应对这些需求。

  • 搜索引擎:例如新闻网站的搜索引擎,用户查询时需要快速返回与关键字相关的内容。ES能够通过并行处理、分布式索引来提供快速的响应。

三、MySQL + Elasticsearch的优势与架构设计

  • 单独 MySQL:事务与关系强,但全文检索和水平扩展受限;

  • 单独 Elasticsearch:检索性能优,但缺乏 ACID、关系约束且存储开销高;

  • 二者结合:MySQL 负责 OLTP,保证数据一致性;Elasticsearch 负责 OLAP/搜索,提供毫秒级检索与实时聚合;通过异步/同步管道解耦写入与查询,既保证业务一致性,也满足高并发检索需求。

3.1 为什么不单独使用 MySQL 或 Elasticsearch?

3.1.1 单独使用 MySQL 的不足

  • 性能瓶颈:MySQL 的全文检索基于 B-Tree 或 InnoDB/ MyISAM 全文索引,在大数据量和复杂查询时,响应速度远不如专为搜索设计的 Elasticsearch。

  • 扩展性受限:虽然可通过主从复制或分库分表扩展读写,但水平扩展能力有限,面对 PB 级数据和高并发时,维护成本和一致性挑战显著增大。

  • 高级搜索不友好:MySQL 缺乏模糊查询、同义词扩展、自动补全等高级功能;复杂分词或多字段相关度计算需大量自定义和优化。

3.1.2 单独使用 Elasticsearch 的不足

  • 缺乏 ACID 事务:ES 天生弱一致性,不支持跨文档事务,难以满足金融、库存等对强一致性要求严格的业务场景。

  • 数据完整性约束不足:不支持外键、唯一约束等关系型功能,必须在应用层手动维护数据一致性与完整性。

  • 存储成本较高:倒排索引、分片与副本机制显著增加磁盘与 I/O 开销,不适合作为所有结构化数据的主存储库。

3.2 MySQL + Elasticsearch的优势

3.2.1 性能与灵活性兼顾

  • 事务与一致性由 MySQL 承担:ACID 事务、复杂关联查询与约束由关系型数据库保障,读写操作安全可靠。

  • 全文检索与分析由 Elasticsearch 支撑:基于倒排索引和分布式查询,能毫秒级处理模糊、分页、多字段相关度等复杂搜索。

3.2.2 可扩展性强

  • MySQL 横向扩展与高可用:利用 InnoDB Group Replication 或 Galera Cluster,实现多主/主从复制、读写分离与自动故障切换。

  • Elasticsearch 动态分片与副本:索引可自动拆分成主分片和副本,节点增删无需停机,线性扩展到 PB 级数据规模。

3.2.3 架构解耦与数据同步

  • 灵活的同步管道:可选 Logstash JDBC 定时拉取、Debezium+Kafka 实时订阅 binlog,或应用层双写,将 MySQL 写入与 ES 索引的依赖解耦。

  • 削峰与容灾机制:通过消息队列缓冲高峰期变更,批量写入 ES,并对失败记录重试或持久化至“死信队列”,确保“最终一致性”。

3.2.4 实时分析与快速迭代

  • 近实时索引:ES 默认每秒刷新一次,新数据秒级可见,满足日志监控、推荐系统等实时需求。

  • 内置聚合功能:无需离线 ETL,即时在 Kibana 或 API 上完成多维度分析、分组与时间序列统计。

四、存储方案全景对比

特性MySQLElasticsearch
数据结构关系型表,支持外键、事务文档(JSON),无事务,多分片与副本
查询语言SQL,支持 JOIN、事务查询Query DSL(JSON),擅长全文检索与聚合
扩展方式分库分表、主从复制、Group Replication、Galera分片(Shard)与副本(Replica),自动负载均衡
实时性非实时,适合 OLTP近实时(~1s),适合实时搜索与分析
一致性强一致性(ACID)最终一致性,弱实时事务
检索性能对结构化数据查询优异,全文检索性能一般大规模全文搜索和聚合高效
运维复杂度需手动管理分片、分库与主从自动管理分片与路由,运维相对简化

五、高可用、高可靠与安全设计

5.1 MySQL 高可用

  • InnoDB Cluster / Group Replication

    每个 MySQL 节点运行 Group Replication,实现多主或单主模式下的数据同步与自动故障切换,无需人工干预即可恢复写入服务,消除单点故障 。
    通过 AdminAPI 管理集群节点,支持弹性伸缩及在线升级,保证业务平滑无感知升级 。

  • Galera Cluster

    MariaDB 企业版的 Galera Cluster 提供真正的多主并行复制,所有节点均可读写,自动管理节点加入、成员故障移除与流控,确保事务不丢失且网络延迟低 。

  • 异地灾备

    通过在不同地域部署异地从库或使用 MySQL 原生复制,将主库的 binlog 实时传输到远程,从而在主区域发生故障时快速切换,保障区域级别的高可用与数据持久性 。

5.2 Elasticsearch 高可用

  • 分片与副本机制

    每个索引可分为若干主分片(primary)与副本分片(replica),当节点失效时,副本自动升级为主分片,确保查询和写入不中断;至少两节点即可保持“green”状态 。

  • 跨集群复制(CCR)

    采用主动—被动模式,将主集群的索引实时复制到一个或多个从集群中,不仅能就近服务用户,还能作为异地容灾备份;配置简单,基于 Elastic 官方 CCR 功能即可快速上线 。

  • 监控与告警

    • Elastic Stack Monitoring:内置采集集群、索引和节点级指标,配合 Kibana 仪表盘实时可视化。

    • Prometheus + Grafana:使用 Elastic 官方 Prometheus 导出器,将指标推送至 Prometheus,再由 Grafana 展示自定义监控大盘,可灵活设置告警规则。

    • 日志与事件:结合 Watcher 或外部告警系统,对集群健康、节点重启、分片状态变化等关键事件进行及时告警。

5.3 安全可靠

  • MySQL 安全

    • TLS 加密传输:强制客户端与服务端使用 SSL/TLS,防止中间人攻击与窃听。

    • 基于角色的访问控制(RBAC):MySQL Enterprise Edition 提供细粒度用户/角色管理,限制各用户仅访问必要的数据库或表。

    • 审计日志插件:开启 Audit Log 插件,记录所有登录、DDL/DML 操作与权限变更,支持日志加密,满足合规审计需求。

  • Elasticsearch 安全

    • X-Pack Security:内置 TLS 加密、用户认证、角色映射及密码策略;支持文档级与字段级安全控制,保证多租户及敏感数据隔离。

    • 审计日志:记录所有认证、授权、索引及查询事件,可定向输出到安全团队或 SIEM 系统进行深度分析。

    • 最小安全配置:快速启动时可使用 Elastic Docs 的 Minimal Setup,仅启用基本认证与加密,后续再逐步强化。

  • 运维自动化

    • Terraform + Ansible:推荐用 Terraform 管理云端基础设施(网络、虚拟机、存储等),再用 Ansible 做系统配置、软件安装与服务编排,清晰分离“基础设施”与“配置”职责,增强可审计性与可回滚性。

    • 版本控制 & CI/CD:将 Terraform 脚本与 Ansible Playbook 存入 Git,结合 CI/CD 管道实现自动化测试、审查与部署,确保配置一致性与快速恢复。

六、结合使用MySQL与Elasticsearch的存储与查询示例

为了更清楚地了解如何将MySQL和Elasticsearch结合使用,将通过以下几个具体示例(题库)来说明两者的实际应用场景和查询逻辑。

6.1 Elasticsearch用于模糊搜索

Elasticsearch擅长全文检索、模糊查询和快速检索。当我们需要根据题干内容、标签、关键词等进行模糊搜索时,Elasticsearch非常高效,尤其是在面对大量题目数据时,能够快速返回相关结果。

示例:模糊搜索“二战”相关的题目

假设我们需要根据关键词“二战”和“历史”来查找题目。通过Elasticsearch,我们可以进行如下的查询:

GET /questions/_search
{"query": {"bool": {"must": [{ "match": { "content": "二战" } },{ "match": { "tags": "历史" } }]}}
}

解析

  • content:题目的文本内容,Elasticsearch将基于内容中的关键字进行搜索。
  • tags:题目所属的标签,Elasticsearch将搜索与标签“历史”相关的题目。

此查询会返回所有题目内容中包含“二战”且标签为“历史”的题目,利用了Elasticsearch的强大文本处理和快速查询能力。

6.2 MySQL用于精确分类条件查询

当我们需要按照特定的分类、学科或其他结构化数据进行筛选时,使用MySQL会更为合适,因为它能够处理复杂的表关系和结构化查询。此时,我们首先通过MySQL查询出符合特定条件的题目ID,再利用这些ID在Elasticsearch中查询题目详情。

示例:查询“数学”学科下的题目ID

假设我们要查找属于“数学”学科的所有题目,可以先通过MySQL查询出所有符合条件的题目ID:

SELECT question_id
FROM questions
WHERE category_id = (SELECT category_id FROM categories WHERE name = '数学');

解析:

  • category_id:我们首先通过查询“数学”学科对应的category_id,然后用这个category_id去筛选所有属于“数学”学科的题目ID。

示例:根据ID在Elasticsearch中查询题目详情

一旦我们得到了所有“数学”学科下的题目ID(假设是 [1, 2, 3, 4, 5]),就可以通过这些ID在Elasticsearch中查询题目的详细内容,如下所示:

GET /questions/_mget
{"ids": [1, 2, 3, 4, 5]
}

解析

  • _mget:这是Elasticsearch的多文档获取接口,用于根据提供的一组ID查询多个文档。返回结果将包括这些题目的详细信息,如题目内容、选项等。

6.3 结合MySQL与Elasticsearch进行查询流程

通过结合MySQL和Elasticsearch的优势,您可以实现更高效、更灵活的查询功能。例如,用户可能希望查询“数学”学科下的题目,并且这些题目内容中包含“代数”相关的内容。具体流程如下:

步骤 1:通过MySQL查询学科下的题目ID

首先,我们使用MySQL查询出属于“数学”学科的所有题目ID:

SELECT question_id
FROM questions
WHERE category_id = (SELECT category_id FROM categories WHERE name = '数学');

步骤 2:通过Elasticsearch查询详细内容

然后,我们将这些题目ID传递给Elasticsearch,查询出题目的详细内容,包括题干、选项等:

GET /questions/_mget
{"ids": [1, 2, 3, 4, 5]
}

步骤 3:根据关键词进行模糊搜索

接下来,我们可以进一步在Elasticsearch中对题目内容进行模糊搜索。假设用户查询的是“代数”相关的内容,可以通过以下查询来查找符合条件的题目:

GET /questions/_search
{"query": {"match": {"content": "代数"}}
}

总结

  • MySQL 用于处理结构化数据、精准查询以及关系型操作,适用于根据学科、难度、类别等条件筛选题目ID。

  • Elasticsearch 用于高效的全文搜索、模糊匹配和快速检索,适合处理题干内容、选项等字段的模糊查询,尤其在面对大量数据时更具优势。

相关文章:

MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解

MySQL Elasticsearch:为什么要使用ES,使用场景与架构设计详解 前言一、MySQL Elasticsearch的背景与需求1.1 为什么要使用Elasticsearch(ES)?1.2 为什么MySQL在某些场景下不足以满足需求?1.3 MySQL Elas…...

【C语言】--指针超详解(三)

目录 一.数组名的理解 二.使用指针访问数组 三.一维数组传参的本质 四.冒泡排序 五.二级指针 六.指针数组 6.1--指针数组的定义 6.2--指针数组模拟二维数组 🔥个人主页:草莓熊Lotso的个人主页 🎬作者简介:C方向学习者 &…...

污水处理厂逆袭:Ethernet/IP 转 CANopen 开启“智净”时代

在我们的日常生活中,污水处理厂发挥着至关重要的作用,它们处理着城市污水,确保我们的水源安全。然而,这些关键设施的运行和管理并非易事,尤其是在数字化转型的大潮中。现在,我们有了一款创新的解决方案——…...

ROS导航局部路径规划算法

在导航功能包中,局部路径规划器的位置如图红框所示。它接受全局路径规划器生成的全局路径以及里程计信息和局部代价地图,最后输出速度控制信息 一、DWA(Dynamic Window Approach) 原理介绍 DWA 是一种基于动态窗口采样的局部路…...

《深挖Java中的对象生命周期与垃圾回收机制》

大家好呀!👋 今天我们要聊一个Java中超级重要的话题——对象的生命周期和垃圾回收机制。 一、先来认识Java世界的"居民"——对象 👶 在Java世界里,一切皆对象。就像现实世界中的人一样,每个Java对象也有自…...

Java——包装类

目录 3.5 包装类 3.5 包装类 有时需要把基本类型转换为对象。所有基本类型都有一个与之对应的类。这些类称为包装器/类。这些类是不可变类,即一旦构造了包装器/类,就不允许改变包装在其中的值。其次包装类还是final,不用可以被继承。 为什么要…...

【谭浩强】第七章第14题

实验结果&#xff1a;当M1时输出的结果 实验总结&#xff1a;用define定义要频繁使用的值可以节省时间&#xff1b;求完一门课平均成绩之后要让sum重新等于0&#xff1b;求最高分对应的学生和对应的课程要循环完一遍覆盖一遍r和c的值&#xff1b; 程序代码 #include <stdi…...

Linux 内核中的 security_sk_free:安全模块与 Socket 释放机制解析

引言 在 Linux 内核中,网络通信和进程间交互(IPC)的核心数据结构之一是 struct sock(即 socket)。其生命周期管理涉及复杂的资源分配与释放逻辑。本文聚焦于 security_sk_free 这一函数,探讨其作用、调用场景以及与安全模块的交互机制,并解答一个常见疑问:在单机间 TC…...

学习笔记:黑马程序员JavaWeb开发教程(2025.4.1)

11.10 案例-配置文件-yml配置文件 Yml语法&#xff1a; 数据格式&#xff1a; 11.11 案例-配置文件-ConfigurationProperties 配置项自动注入&#xff0c;需要保持KEY的属性名一样&#xff0c;需要在文件中加上Data注解&#xff0c;要将这个类交给IOC容器管理&#xff0c;使其成…...

深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件

文章目录 1 任务背景2 使用chatflow聊天流2.1 开始节点2.2 文档提取器2.3 LLM2.4 参数提取器2.5 代码执行2.6 直接回复2.7 应用展示3 生成html文件可视化图表3.1 使用workflow工作流3.1.1 LLM3.1.2 效果展示3.2 使用chatflow聊天流3.2.1 LLM3.2.2 效果展示4 参考附录分别使用聊…...

关于VScode的调试

调试代码要有这么几个工具&#xff1a;源代码、带调试符号的程序、MAP表&#xff0c;调试器。 在启动调试器之前&#xff0c;要首先编译带有符号表的程序&#xff0c;生成对应map。然后启动调试器。 不同的语言有不同的特性&#xff0c;比如解释型语言不需要编译成可执行程序…...

(x ^ 2 + 2y − 1) ^ 3 − x ^ 2 * y ^ 3 = 1

二元高次方程 EquationSolver20250509.java package math;import org.apache.commons.math3.analysis.MultivariateFunction; import org.apache.commons.math3.optim.InitialGuess; import org.apache.commons.math3.optim.MaxEval; import org.apache.commons.math3.optim.P…...

弹窗表单的使用,基于element-ui二次封装

el-dialog-form 介绍 基于element-ui封装的弹窗式表单组件 示例 git地址 https://gitee.com/chenfency/el-dialog-form.git 更新日志 2021-8-12 版本1.0.0 2021-8-17 优化组件&#xff0c;兼容element原组件所有Attributes及Events 2021-9-9 新增tip提示 安装教程 npm install …...

关系模式-无损连接和保持函数依赖的判断

1、怎样判断一个关系模式的分解是否是无损连接&#xff1f; 方法一&#xff1a;公式定理法 关系模式R<U,F>的一个分解具有无损连接的充分必要条件是&#xff1a; 或 方法二&#xff1a;表格法&#xff08;常用与分解成3个及以上关系模式&#xff09; a. 通过立一张j…...

Vmware 最新下载教程和安装教程,外带免下载文件

一、VMware 的简介 VMware 是一款功能强大的桌面虚拟计算机软件&#xff0c;提供用户可在单一的桌面上同时运行不同的操作系统&#xff0c;和进行开发、测试 、部署新的应用程序的最佳解决方案。VMware可在一部实体机器上模拟完整的网络环境&#xff0c;以及可便于携带的虚拟机…...

开平机:从原理到实践的全面技术剖析

一、开平机核心模块技术解析 1. 校平辊系的力学建模与辊型设计 校平机精度核心在于辊系设计&#xff0c;需通过弹塑性力学模型计算变形量。典型校平辊配置参数&#xff1a; 辊径比&#xff1a;校平辊直径&#xff08;D&#xff09;与板材厚度&#xff08;t&#xff09;需满足…...

Edu教育邮箱申请2025年5月

各位好&#xff0c;这里是aigc创意人竹相左边 如你所见&#xff0c;这里是第3部分 现在是选择大学的学科专业 选专业的时候记得考虑一下当前的时间日期。 比如现在是夏天&#xff0c;所以你选秋天入学是合理的。...

文本框碰撞测试

1.核心代码: // 初始化舞台和变量 var stage, textField, bounds, velocity;function init() {// 创建舞台stage = new createjs.Stage("canvas");// 设置矩形边界bounds = {x: 50, y: 50, width: 400, height: 300};// 绘制边界矩形var border = new createjs.Shap…...

LeRobot 项目部署运行逻辑(六)——visualize_dataset_html.py/visualize_dataset.py

可视化脚本包括了两个方法&#xff1a;远程下载 huggingface 上的数据集和使用本地数据集 脚本主要使用两个&#xff1a; 目前来说&#xff0c;ACT 采集训练用的是统一时间长度的数据集&#xff0c;此外&#xff0c;这两个脚本最大的问题在于不能裁剪&#xff0c;这也是比较好…...

Python函数:从基础到进阶的完整指南

在Python编程中&#xff0c;函数是构建高效、可维护代码的核心工具。无论是开发Web应用、数据分析还是人工智能模型&#xff0c;函数都能将复杂逻辑模块化&#xff0c;提升代码复用率与团队协作效率。本文将从函数基础语法出发&#xff0c;深入探讨参数传递机制、高阶特性及最佳…...

图灵爬虫练习平台第七题千山鸟飞绝js逆向

题目七&#xff1a;千山鸟飞绝 还是先进入开发者模式&#xff0c;一进来还是一个无限debugger&#xff0c;直接右键点击一律不在此处停留 然后点击下一页&#xff0c;复制curl进行代码生成&#xff0c;然后就会发现加密内容是headers中的m,ts&#xff0c;还有参数中的x&#xf…...

使用Python和OpenCV实现实时人脸检测与识别

前言 在计算机视觉领域&#xff0c;人脸检测与识别是两个非常重要的任务。人脸检测是指在图像中定位人脸的位置&#xff0c;而人脸识别则是进一步识别出人脸的身份。随着深度学习的发展&#xff0c;这些任务的准确性和效率都有了显著提升。OpenCV是一个开源的计算机视觉库&…...

Excel实现单元格内容拼接

一、应用场景&#xff1a; 场景A&#xff1a;将多个单元格拼接&#xff0c;比如写测试用例时&#xff0c;将多个模块拼接&#xff0c;中间用“-”隔开 场景B&#xff1a;将某单元格内容插入另一单元格固定位置&#xff08;例如在B1中添加A1的内容&#xff09; 二、实际应用&a…...

C语言实现:打印素数、最大公约数

本片博客起源于作者在经历了学校的测试之后猛然发现自己居然忘记了一些比较基础的代码&#xff0c;因此写了本片博客加强记忆 以下算法仅供参考 打印素数 打印&#xff1a;0到200之间所有的素数 #define _CRT_SECURE_NO_WARNINGS#include<stdio.h> #include<math.h&…...

TDengine 在智慧油田领域的应用

简介 智慧油田&#xff0c;亦称为数字油田或智能油田&#xff0c;是一种采用尖端信息技术与先进装备的现代油田开发模式。该模式通过实时更新油气田层析图及动态生产数据&#xff0c;显著提高了油气田的开发效率与经济价值。 信息技术在此领域发挥着至关重要的作用&#xff0…...

将 iconfont 图标转换成element-plus也能使用的图标组件

在做项目时发现&#xff0c;element-plus的图标组件&#xff0c;不能像文档示例中那样使用 iconfont 的图标。经过研究发现&#xff0c;element-plus的图标封装成了vue组件&#xff0c;组件内容是一个svg&#xff0c;然后以组件的方式引入和调用图标。根据这个思路&#xff0c;…...

使用程序绘制中文字体——中文字体的参数化设计方案初探

目录 写在前面基本设计思路笔画骨架参数设计笔画风格参数设计起笔风格转角风格字重变化弯曲程度 字形的“组装拟合”基于骨架的结构调整笔画绘制二三事撇的两侧轮廓绘制——不是两条贝塞尔曲线那么简单转角的处理&#xff0c;怎样能显得不突兀&#xff1f;笔画骨架关键点的拖拽…...

高频数据结构面试题总结

基础数据结构 1. 数组(Array) 特点&#xff1a;连续内存、固定大小、随机访问O(1)常见问题&#xff1a; 两数之和/三数之和合并两个有序数组删除排序数组中的重复项旋转数组最大子数组和(Kadane算法) 2. 链表(Linked List) 类型&#xff1a;单链表、双链表、循环链表常见问…...

工业设计破局密码:3D 可视化技术点燃产业升级引擎

3D可视化是一种将数据、信息或抽象概念以三维图形、模型和动画的形式呈现出来的技术。3D可视化技术通过构建三维数字孪生体&#xff0c;将设计思维转化为可交互的虚拟原型&#xff0c;不仅打破了传统二维设计的空间局限&#xff0c;更在效率、精度与用户体验层面开创了全新维度…...

【动态导通电阻】p-GaN HEMTs正向和反向导通下的动态导通电阻

2024 年,浙江大学的 Zonglun Xie 等人基于多组双脉冲测试方法,研究了两种不同技术的商用 p-GaN 栅极 HEMTs 在正向和反向导通模式以及硬开关和软开关条件下的动态导通电阻(RON)特性。实验结果表明,对于肖特基型 p-GaN 栅极 HEMTs,反向导通时动态 RON 比正向导通高 3%-5%;…...

Python代码编程基础

字符串 str.[]实现根据下标定位实现对元素的截取 for 循环可以实现遍历 while 循环可以在实现遍历的同时实现对某一下标数值的修改 字符串前加 r 可以实现对字符串的完整内容输出 字符串前加 f 可以实现对字符串内{}中包裹内容的格式化输出&#xff0c;仅在 v3.6 之后可用…...

基于RAG+MCP开发【企文小智】企业智能体

一、业务场景描述 1.1、背景介绍 几乎每家企业都积累了大量关于规章制度的文档资料&#xff0c;例如薪酬福利、绩效考核、保密协议、考勤管理、采购制度、资产管理制度等。这些文档大多以 Word、PDF 等非结构化格式存在。传统方式下&#xff0c;员工在查询某项具体规则时&…...

【软件测试】测试用例的设计方法

目录 一、基于需求进行测试用例的设计 1.1 功能需求测试分析 二、黑盒测试用例设计方法 2.1 等价类划分法(解决穷举) 2.1.1 等价类设计步骤 2.1.2 等价类划分法案例 2.1.2.1 验证 QQ 账号的合法性 2.1.2.2 验证某城市电话号码的正确性 2.1.3 适用场景 2.2 边界值分析…...

计算机网络笔记(十八)——3.5高速以太网

3.5.1 100BASE-T以太网 1. 基本概念 标准规范&#xff1a;IEEE 802.3u&#xff0c;是快速以太网的典型代表&#xff0c;运行速率100Mbps。物理介质&#xff1a;使用双绞线&#xff08;UTP或STP&#xff09;&#xff0c;支持最大传输距离100米&#xff08;Cat5/5e及以上&#…...

海外广告账号资源解析:如何选择适合业务的广告账户?

在全球化数字营销的浪潮下&#xff0c;海外广告投放已成为企业拓展市场的核心手段。然而&#xff0c;不同平台的广告账号类型复杂多样&#xff0c;如何选择适合自身业务的资源&#xff1f;本文将深度解析 Facebook、Google、TikTok 三大平台的广告账号类型&#xff0c;助您精准…...

Java设计模式之建造者模式:从入门到精通

1. 建造者模式概述 1.1 定义与核心概念 **建造者模式(Builder Pattern)**是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 专业术语解释表: 术语解释产品(Product)最终要构建的复杂对象建造者(Builder)定义创建产品各个…...

Faiss 索引深度解析:从基础到实战

在处理高维数据的相似性搜索时&#xff0c;Faiss&#xff08;Facebook AI Similarity Search&#xff09;无疑是一款强大且高效的工具。它为我们提供了多种索引类型&#xff0c;适用于不同规模和需求的数据场景。本文将结合代码实例&#xff0c;深入剖析 Faiss 中常见索引的原理…...

Error parsing column 10 (YingShou=-99.5 - Double) dapper sqlite

在使用sqlite 调取 dapper的时候出现这个问题提示&#xff1a; 原因是 在 sqlite表中设定的字段类型是 decimel而在C#的字段属性也是decimel&#xff0c;结果解析F负数 小数的时候出现这个错误提示&#xff1a; 解决办法&#xff1a;使用默认的sqlite的字段类型来填入 REAL描述…...

星云智控:物联网时代的设备守护者——卓伊凡详解物联网监控革命-优雅草卓伊凡

星云智控&#xff1a;物联网时代的设备守护者——卓伊凡详解物联网监控革命-优雅草卓伊凡 一、物联网的本质解析 1.1 什么是物联网&#xff1f; 当卓伊凡被问及”星云智控物联网是干嘛的”这个问题时&#xff0c;他首先给出了一个技术定义&#xff1a;物联网&#xff08;Int…...

LeRobot 项目部署运行逻辑(五)——intelrealsense.py/configs.py

在运行 control_robot.py 的时候会启用相机拍摄&#xff0c;lerobot 中封装好了两种相机类型&#xff1a;realsense 和 opencv realsense 直接使用他们的脚本就可以&#xff0c;但需要在 lerobot/robot_devices/robots/configs.py 中修改相机 serial_number 由于我们设备采用的…...

从0开始学linux韦东山教程第一三章问题小结(1)

本人从0开始学习linux&#xff0c;使用的是韦东山的教程&#xff0c;在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。 摘要关键词&#xff1a;VMware、Ubuntu、网络网口 视频链接&#xff1a;【【韦东山】韦东山手把手教你嵌入式Linux快速入门到精通 | Lin…...

解决 MySQL 数据库无法远程连接的问题

在使用 MySQL 数据库时&#xff0c;遇到这样的问题&#xff1a; 本地可以连接 MySQL&#xff0c;但远程机器连接时&#xff0c;总是报错 Host ... is not allowed to connect to this MySQL server。 这通常是因为 MySQL 的用户权限或配置限制了远程访问。 1. 登录 MySQL 数据…...

分享一款开源的图片去重软件 ImageContrastTools,基于Electron和hash算法

最近发现个挺实在的图片查重软件&#xff0c;叫ImageContrastTools。电脑手机都能用&#xff0c;特别适合整理乱七八糟的相册。直接去这里下载就能用&#xff1a; https://github.com/html365/ImageContrastTools 功能说明&#xff1a; 1️⃣ 选个文件夹就能自动扫重复图&…...

软件测试——用例篇(2)

目录 一、基于需求的设计方法 1.1设计账号注册、账号登录的测试用例 1.1.1功能测试 1.1.2界面测试 1.1.3性能测试 1.1.4兼容性测试 1.1.5易用性测试 1.1.6安全测试 一、基于需求的设计方法 根据参考需求文档/产品规格说明书来设计测试用例 测试人员接到需求之后、对需求…...

图像匹配导航定位技术 第 11 章

第 11 章 基 于 改 进 SIFT 的 SAR 与 可 见光 图 像 匹 配 控 制 点 定 位 算 法 HOG 描述子也只是对整幅图像的特征向量进行匹配&#xff0c;但是仍然存在局部匹配误差。而局部不变特征&#xff08;如 SIFT,Harris 等&#xff09;是对特征点局部邻域的特征进行描述来构造局部…...

安装jdk步骤

将Linux安装jdk的步骤放入shell脚本中 #!/bin/bash # 阿里云服务器专用 - 全自动安装 OpenJDK 1.8&#xff08;无交互&#xff09; # 仅支持 yum 系系统&#xff08;CentOS/RHEL/Alibaba Cloud Linux&#xff09;# 检查 root 权限 if [ "$(id -u)" -ne 0 ]; thenech…...

理解 `.sln` 和 `.csproj`:从项目结构到构建发布的一次梳理

理解 .sln 和 .csproj&#xff1a;从项目结构到构建发布的一次梳理 在初学 .NET 项目开发时&#xff0c;很多人都会对 .sln&#xff08;解决方案&#xff09;和 .csproj&#xff08;项目&#xff09;文件感到疑惑。随着开发经验的积累&#xff0c;我逐渐理解了这些层级的设计意…...

高频算法面试题总结

高频算法面试题总结 排序算法 1. 基础排序算法 快速排序: public void quickSort(int[] arr, int low, int high) {if (low < high) {int pivot = partition(arr, low, high);quickSort(arr, low, pivot - 1);quickSort(arr, pivot + 1, high);} }平均时间复杂度:O(n lo…...

SQL进阶:如何把字段中的键值对转为JSON格式?

JSON 一、问题描述二、ORACLE<一>、键值对拆分(REGEXP_SUBSTR)<二>、转为JSON<三>、不足 三、MYSQL<一>、键值对拆分(RECURSIVE)<二>、转为JSON 一、问题描述 假如某张表的某列是键值对数据,如何把这个键值对转为json格式,数据如下所示 dynast…...

vue3:十二、图形看板- echart图表-柱状图、饼图

一、效果 如图展示增加了饼图和柱状图,并且优化了浏览器窗口大小更改,图表随着改变 二、 饼图 1、新建组件文件 新增组件EchartsExaminePie.vue,用于存储审核饼图的图表 2、写入组件信息 (1)视图层 写入一个div,写入变量chart和图表宽高 <template><div ref…...