稳定运行的以ElasticSearch数据库为数据源和目标的ETL性能变差时提高性能方法和步骤
在使用 Elasticsearch 作为数据源和目标的 ETL(Extract, Transform, Load)过程中,性能逐渐变差的原因可能有很多,比如查询效率下降、集群负载过高、资源配置不合理等。
性能的提升通常需要从多个方面入手,尤其是在处理大量数据时。通过合理的硬件配置、索引优化、查询优化以及批量处理等手段,可以大大提高基于 Elasticsearch 的 ETL 性能。此外,定期的监控与分析也是确保长时间稳定运行的关键。以下是一些提高性能的方法和步骤:
1. 优化查询和索引
-
查询优化:
- 使用合适的查询类型:尽量避免使用
wildcard
或regex
查询,因为这些查询方式非常消耗资源。可以考虑通过优化数据模型来避免这些查询,或者使用prefix
查询来代替wildcard
查询。 - 分页查询:如果一次性检索大量数据,会导致 Elasticsearch 集群压力过大。尽量使用分页(
from
/size
)进行分批查询,或者使用scroll
查询。 - 过滤器(filter)优化:使用
filter
替代query
,因为filter
不会参与打分,通常执行效率较高。
- 使用合适的查询类型:尽量避免使用
-
索引优化:
- 合适的映射设置:确保为每个字段定义合适的数据类型,避免使用
text
类型字段来存储大量不需要全文检索的文本数据。对于不会用于搜索的字段,使用keyword
类型。 - 字段数据压缩:为减少存储和提高查询速度,适当启用字段的数据压缩(如:
doc_values
)。 - 分片和副本优化:避免使用过多或过少的分片数量。过多的分片会导致资源浪费,而过少的分片可能导致查询瓶颈。可以通过合理的分片数量来平衡存储和查询性能。
- 关闭不必要的功能:例如关闭
index.refresh_interval
,在ETL过程中批量插入数据时,可以暂时禁用索引刷新,插入完成后再进行刷新操作。
- 合适的映射设置:确保为每个字段定义合适的数据类型,避免使用
2. 批量处理和并行化
-
批量处理(Bulk API):使用 Elasticsearch 提供的
Bulk API
来批量插入或更新数据。每次请求尽量处理较大的数据块,以减少网络开销和请求的次数。默认批量大小建议在 5MB 至 15MB 之间,但可以根据集群性能做调整。 -
并行处理:根据系统资源情况,可以将 ETL 流程拆分成多个子任务并行执行,尽量使用多线程或多进程来提高数据传输的速度和处理效率。你可以通过调整并行线程的数量来平衡吞吐量和集群压力。
-
分区处理:如果数据量很大,可以通过基于字段(例如:时间、ID等)分区数据,针对每个分区分别执行 ETL 操作。这样可以减少单次操作的数据量,提高性能。
3. 优化集群配置
-
硬件优化:确保 Elasticsearch 集群的硬件资源配置充足,特别是 CPU、内存和磁盘 I/O。对于性能敏感的操作,尽量使用 SSD 硬盘以提高磁盘访问速度。
-
JVM 设置:
- 调整 JVM 堆内存:默认情况下,Elasticsearch 使用的堆内存为 1GB,但根据系统内存,可能需要增加堆内存大小。通常设置为 50% 的物理内存(不超过 32GB)。例如:
ES_HEAP_SIZE=16g
- JVM 垃圾回收优化:根据集群的负载,调整垃圾回收策略,避免 Full GC 频繁发生,造成长时间的延迟。可以使用 G1 垃圾收集器来优化内存的使用和垃圾回收过程。
- 调整 JVM 堆内存:默认情况下,Elasticsearch 使用的堆内存为 1GB,但根据系统内存,可能需要增加堆内存大小。通常设置为 50% 的物理内存(不超过 32GB)。例如:
-
线程池调整:增加线程池的大小来提高并发处理能力,尤其是对于索引和搜索操作,可以通过修改
elasticsearch.yml
配置文件来调整线程池参数。
4. 异步操作和缓存
-
异步 ETL:将 ETL 过程进行异步化,减少主线程的阻塞,避免在数据传输和转换过程中造成长时间的等待。
-
使用缓存:对于重复查询的数据,可以利用缓存来减少查询压力。例如,可以将常用的查询结果缓存到外部缓存系统(如 Redis)中。
5. 监控与分析
-
Elasticsearch 监控:使用 Elastic Stack 中的 Kibana 监控集群的性能和健康状态,及时发现瓶颈。
- 监控 节点资源使用情况:CPU 使用率、内存占用、磁盘 I/O 和网络延迟。
- 监控 索引性能:查询响应时间、索引刷新时间、分片分配等。
-
慢查询分析:启用 Elasticsearch 的慢查询日志,分析执行时间较长的查询。调整这些查询以优化性能,或将其分解为多个更小的查询。
6. 数据清理与压缩
-
数据归档:对于不常访问的数据,可以考虑归档到冷存储或其他存储系统,减少 Elasticsearch 集群的负载。
-
合并和压缩索引:定期进行索引的合并操作(force merge),以减少碎片,提升查询性能。
7. 使用专用的 ETL 工具
- 如果 ETL 的复杂度较高,可以考虑使用一些专门的工具,如 Logstash 或 Apache Nifi 来简化 ETL 流程的实现,并通过优化工具的配置提高效率。
8. 数据转换和存储优化
- 合适的数据存储格式:对于目标存储(例如数据仓库、关系型数据库等),选择合适的存储格式(例如 Parquet、ORC 等)以提高存储性能。
9. ElasticSearch数据库性能优化
当稳定运行的 Elasticsearch 数据库性能变差时,有多个原因可能导致性能下降,包括硬件资源、配置问题、查询不优化等。
提高 Elasticsearch 性能的关键步骤包括硬件资源优化、查询优化、增加节点、索引优化、缓存设置、配置调整以及定期维护。通过这些步骤,可以有效提升系统的性能,避免因资源不足或配置不当导致的性能瓶颈。
下面是一些提高性能的常见方法和步骤:
1. 检查硬件资源
-
CPU 和内存使用情况:高负载的 CPU 或不足的内存可能会导致 Elasticsearch 性能下降。检查节点的 CPU 和内存使用情况,确保节点有足够的资源。
- 使用命令:
top
、htop
、vmstat
查看系统资源。 - Elasticsearch 需要充分的堆内存(heap memory),建议为 JVM 设置适当的堆大小(通常是最大堆大小为机器总内存的 50%,不超过 30 GB)。
- 使用命令:
-
磁盘 I/O 性能:Elasticsearch 的性能也高度依赖于磁盘 I/O。确保磁盘速度足够快,并且没有过度使用。
- 使用
iostat
等工具监控磁盘 I/O。 - 尽量使用 SSD,而不是 HDD,来提高磁盘读写速度。
- 使用
2. 优化查询
-
避免复杂查询:复杂的查询(例如:多个聚合、大量的排序、正则表达式匹配等)会增加查询延迟。优化查询结构,避免在生产环境中运行低效查询。
-
使用
profile
API 分析查询:通过 Elasticsearch 的profile
API 分析查询性能,找出瓶颈。GET /your-index/_search?profile=true
-
合适的字段类型和映射:确保映射(mappings)合理,避免使用不必要的字段类型,如
text
类型可以考虑改为keyword
类型,避免不必要的分析操作。
3. 增加或优化节点
-
增加节点数:当负载增大时,增加更多的节点可以分担查询和索引的负载。可以通过添加更多的 data 节点来扩展集群。
-
分片(Shards)调整:Elasticsearch 使用分片来分布数据。检查每个索引的分片数目是否合理。过多的分片会导致管理开销,过少的分片会导致单个节点负担过重。可以使用
index.settings
调整索引分片和副本数。- 检查索引的分片设置:
GET /your-index/_settings
- 检查索引的分片设置:
-
副本数(Replica):副本数决定了查询性能,增加副本可以提高查询性能,但会影响写入性能。如果你只关心读取性能,可以考虑增加副本。
4. 索引优化
-
合并小段(Segments):Elasticsearch 会将数据存储在多个小段中,随着时间的推移,索引可能会有大量的小段,影响查询效率。使用
_forcemerge
API 定期合并小段。POST /your-index/_forcemerge?max_num_segments=1
-
索引生命周期管理(ILM):使用 ILM 自动管理索引的生命周期,例如定期关闭旧索引或将其移动到性能较低的硬盘上。
-
清理过期的数据:如果存储的数据过多且大部分已经不再需要,可以通过删除过期数据或将其转移到其他地方来减少索引的大小。
5. 缓存优化
-
查询缓存:在频繁运行的查询上启用查询缓存,可以显著提高性能。可以通过调整
indices.queries.cache.size
参数来控制缓存大小。PUT /_cluster/settings {"persistent": {"indices.queries.cache.size": "10%"} }
-
字段数据缓存:字段数据缓存是 Elasticsearch 用于存储聚合和排序的内存。增加缓存的大小可以提高聚合和排序的速度,但要注意避免过度占用内存。
6. Elasticsearch 配置调整
-
JVM 设置:优化 JVM 配置,确保 Elasticsearch 在启动时获得足够的内存。通常,JVM 的最大堆大小应该设置为总物理内存的 50%,但不应超过 30GB。
修改
jvm.options
配置文件中的以下设置:-Xms4g -Xmx4g
-
线程池优化:Elasticsearch 默认有多个线程池,针对不同类型的请求(如搜索、索引、管理等)。可以通过调整线程池的大小来提高性能。
PUT /_cluster/settings {"persistent": {"threadpool.search.size": 30} }
7. 定期维护
-
监控与告警:使用如 Elastic Stack(Kibana、Elastic APM、Metrics等)进行集群监控,及时发现潜在的性能瓶颈。
-
升级版本:定期检查是否有 Elasticsearch 的新版本发布。新版本通常会包含性能改进和 bug 修复。
8.提高表和视图的读写效率
在Elasticsearch中提高表和视图的读写效率通常需要从多个方面进行优化。虽然Elasticsearch并不像传统的关系数据库那样使用表和视图的概念,但它的索引和查询的优化策略类似于数据库优化。
提升 Elasticsearch 的读写效率是一个综合性的工作,涉及索引设计、查询优化、硬件配置等多个方面。通常,优化的核心是平衡查询效率、写入性能和存储开销,根据实际业务场景调整不同的配置。以下是提高读写效率的常见方法:
1. 索引设计优化
-
合理选择索引的映射(Mapping):
Elasticsearch 的映射定义了数据类型和字段的索引方式。根据实际应用场景优化映射,可以避免不必要的字段索引和存储。尤其是:- 禁用不需要索引的字段。
- 为需要高效查询的字段设置合适的数据类型。
- 对于大量文本数据,使用
keyword
类型而不是text
,避免进行全文索引。
-
适当设置字段的
index
、doc_values
和store
属性:index
:决定是否索引该字段。如果字段不需要用于查询,可以禁用索引,减少存储开销。doc_values
:开启doc_values
用于排序和聚合,可以提高这类操作的性能。store
:如果不需要直接检索字段的原始值,可以禁用该选项,减少存储和提升写入性能。
2. 数据分片与副本的优化
-
分片数目(Shards):
在创建索引时,合理选择分片数目。过多的分片会导致资源消耗过大,过少的分片则可能影响并行查询性能。通常需要根据数据量、节点数和查询/写入负载来进行优化。 -
副本数目(Replicas):
副本提供了高可用性和查询负载均衡。在读操作较多的情况下,可以增加副本数,以提高查询性能;在写操作较多时,减少副本数可以提升写入性能,但会影响容错性。
3. 批量写入(Bulk indexing)
- Elasticsearch的批量操作(bulk API)可以大幅提高写入性能,避免单次写入的网络延迟和请求开销。批量操作适合大批量数据插入、更新或删除的场景。
- 批量写入时,建议每批数据量保持在适当的范围(例如每批500到1000条文档),过大或过小的批量都会影响性能。
4. 查询优化
-
合理使用缓存:
Elasticsearch 会缓存常用的查询结果。通过合适的查询策略和filter
、aggregations
的使用,可以提升缓存命中率,从而加速查询响应。 -
限制查询范围:
对于大数据量的查询,最好设置查询的时间范围、分页或其他过滤条件,避免一次查询涉及整个索引。 -
使用合适的查询类型:
- 尽量避免使用
wildcard
或regexp
查询,因为它们在大型数据集上性能较差。 - 使用
term
或match
查询替代match_phrase
,以获得更高效的查询性能。
- 尽量避免使用
5. 调整写入配置
-
Refresh Interval:
Elasticsearch 默认每秒会刷新一次索引,这样新写入的文档就可以立即可见。如果写入量大且不需要实时可见,可以通过增加refresh_interval
来减少刷新频率,从而提高写入性能。 -
事务日志(Translog):
Elasticsearch 使用事务日志来保证数据的一致性。调整translog.durability
设置为async
可以提高写入性能,但会在发生故障时可能会丢失一部分数据。
6. 硬件和资源优化
-
内存优化:
Elasticsearch依赖大量的内存来进行数据缓存和字段数据存储,因此确保系统有足够的内存来满足查询和写入需求,避免频繁的磁盘 I/O。 -
SSD存储:
使用SSD硬盘可以显著提升Elasticsearch的数据读取和写入速度,特别是在处理大量数据时,SSD的性能优势会更加明显。
7. 缩小索引和映射规模
- 使用索引模板(Index Templates):
在不同数据类型的场景下,使用索引模板来自动化配置合适的映射,减少人工操作错误,提高效率。
8. 集群和分布式调优
-
节点配置优化:
根据使用场景优化集群的节点配置,包括JVM堆内存、GC策略等。 -
负载均衡和数据分布:
确保数据均匀分布在集群节点上,避免某些节点负载过重,影响查询和写入性能。
9. 定期维护与清理
-
索引合并(Force Merge):
在删除大量文档后,可以使用force_merge
操作来合并小段段文件,减少存储开销并提高查询效率。 -
过期数据清理:
定期删除过期的或不再使用的数据(例如,使用索引生命周期管理 ILM),避免索引过于庞大,影响性能。
9.提高表只用于读取数据的表的读取效率
在ElasticSearch中提高只用于读取数据的表(或索引)的读取效率,可以从以下几个方面入手:
1. 优化索引映射(Mapping)
- 字段类型选择:确保为每个字段选择最合适的数据类型。例如,如果某个字段只存储日期数据,不要使用字符串类型,而是使用
date
类型。 - 避免过多的字段:尽量避免索引过多不必要的字段,减少映射的复杂性。
- 字段压缩(Keyword vs Text):对于需要高效查询的字段,使用
keyword
类型而不是text
类型。keyword
类型不进行分词,查询时会更高效。
2. 使用适当的分片(Sharding)
- 合理的分片数目:索引分片数目不宜过多或过少。过多的分片会导致管理开销和性能下降,过少的分片可能导致硬件资源的利用不充分。
- 分片大小的平衡:根据数据量和硬件资源的情况调整分片大小,避免单个分片过大或过小,影响查询性能。
3. 使用合适的查询方式
- 避免复杂查询:对于读取密集型的操作,避免使用复杂的查询条件,尽量使用简单的查询方式,如
term
、range
等。 - 过滤器与查询的分离:ElasticSearch支持
filter
和query
的分离,filter
通常比query
更高效,因为filter
不会影响得分计算。 - 分页优化:对于大规模分页查询,避免使用深度分页(例如,
from
参数非常大),可以使用search_after
来进行高效的深度分页。
4. 启用查询缓存
- ElasticSearch支持对查询结果进行缓存。可以通过调整
indices.queries.cache.size
来启用查询缓存,增加读取性能。缓存对重复的查询特别有效。
5. 优化索引设置
- 禁用
_source
字段:如果不需要返回原始文档数据,可以禁用_source
字段,这样可以减少I/O开销。 - 禁用副本(replicas):如果只是只读操作,副本数量可以设置为0。副本用于提高容错性和写入性能,但对于纯读取操作来说,增加副本反而会增加存储和管理开销。
- 压缩数据:可以使用
index.codec
设置启用压缩算法(如best_compression
),以减少存储空间,同时提升读取效率。
6. 分布式查询优化
- 节点与分片的平衡:确保分片均匀分布在集群中的节点上,避免某些节点的负载过重。
- 局部查询:对于一些只读的数据,可以考虑将其单独部署在专门的节点上,减少其他节点的负载。
7. 定期优化和合并段(Segment)
- 定期合并段:ElasticSearch中的索引数据会分为多个段(segment),定期合并这些段可以提高查询效率。可以通过
force_merge
API来手动触发段的合并,减少查询时的段数量。
8. 数据预聚合
- 如果有一些常用的聚合查询,可以提前通过预聚合的方式减少实时计算的压力。这可以通过将数据定期汇总存储在一个单独的索引中来实现。
9. 监控与调优
- 监控查询性能:使用ElasticSearch的监控工具,查看查询的响应时间、延迟、请求量等,识别性能瓶颈。
- 调整线程池:根据负载调整查询相关的线程池配置,确保查询请求得到高效处理。
相关文章:
稳定运行的以ElasticSearch数据库为数据源和目标的ETL性能变差时提高性能方法和步骤
在使用 Elasticsearch 作为数据源和目标的 ETL(Extract, Transform, Load)过程中,性能逐渐变差的原因可能有很多,比如查询效率下降、集群负载过高、资源配置不合理等。 性能的提升通常需要从多个方面入手,尤其是在处理…...
游戏引擎学习第182天
回顾和今天的计划 昨天的进展令人惊喜,原本的调试系统已经被一个新的系统完全替换,新系统不仅能完成原有的所有功能,还能捕获完整的调试信息,包括时间戳等关键数据。这次的替换非常顺利,效果很好。 今天的重点是在此基…...
EJS缓存解决多页面相同闪动问题
基于 EJS 的模板引擎特性及其缓存机制,以下是关于缓存相同模块的详细解答: 一、EJS 缓存机制的核心能力 模板编译缓存 EJS 默认会将编译后的模板函数缓存在内存中,当相同模板文件被多次渲染时,会直接复用已编译的模板函数&#x…...
【MySQL】mysql日志文件
目录 日志文件特征 错误日志(Error log ) 常规查询日志(General query log ) 慢速查询日志(Slow query log ) 审计日志(Audit log ) 二进制日志(Binary log &#…...
【C++】STL性能优化实战
STL性能优化实战 STL (Standard Template Library) 是 C 标准库的核心部分,提供了各种容器、算法和迭代器。虽然 STL 提供了强大的功能,但不恰当的使用可能导致性能问题。下面我将详细介绍 STL 性能优化的实战技巧,并通过具体案例说明。 1.…...
Playwright + MCP:用AI对话重新定义浏览器自动化,效率提升300%!
一、引言:自动化测试的“瓶颈”与MCP的革新 传统自动化测试依赖开发者手动编写脚本,不仅耗时且容易因页面动态变化失效。例如,一个简单的登录流程可能需要开发者手动定位元素、处理等待逻辑,甚至反复调试超时问题。而MCP…...
12-scala样例类(Case Classes)
例类(Case classes)和普通类差不多,只有几点关键差别,接下来的介绍将会涵盖这些差别。样例类非常适合用于不可变的数据。 定义一个样例类 一个最简单的样例类定义由关键字case class,类名,参数列表&#…...
WPF 与 C# 开发深度剖析
一、引言 在当今的软件开发领域,Windows 平台依旧占据着重要的地位。而 WPF(Windows Presentation Foundation)作为微软推出的一款强大的用户界面(UI)框架,为开发者提供了丰富的功能和灵活的设计方式&…...
【工具使用-编译器】VScode(Ubuntu)使用
1. VScode的快捷键 快捷键功能说明Ctrl+Shift+P / F1显示命令面板Ctrl+P快速打开文件Ctrl+Shift+N新建窗口Ctrl+Shift+W关闭窗口Ctrl+,打开设置Ctrl+K Ctrl+S打开快捷键设置Ctrl+X剪切行(无选中时剪切整行)Ctrl+C复制行(无选中时复制整行)Alt+↑ / Alt+↓向上/向下移动行Sh…...
C# SerialPort 使用详解
总目录 前言 在工业控制、物联网、嵌入式开发等领域,串口通信(Serial Port Communication)是连接串行设备(如条码扫描器、GPS接收器等)与计算机的重要手段。C# 提供了内置的 SerialPort 类,简化了串口开发…...
数据结构--二叉排序树
一、二叉排序树的定义 二叉排序树,又称二叉查找树。 性质: 左子树结点值<根结点值<右子树结点值(进行中序遍历,可以得到一个递增的有序序列) 二、查找操作 利用二叉排序树的性质,如果树空,…...
FPGA的直方图均衡
文章目录 一、直方图均衡二、代码实现三、仿真 一、直方图均衡 直方图均衡(Histogram Equalization)是一种用于增强图像对比度的图像处理技术。它通过重新分配图像像素的灰度值,使得图像的灰度直方图在整个灰度范围内均匀分布,从而…...
使用Python将视频转化为gif
使用Python将视频转化为gif 一、前言二、准备三、测试 一、前言 最近想把喜欢的视频片段作成gif,就试着用Python做了下,感觉效果还行,这里做个记录。 二、准备 先下载安装对应的库,命令如下: pip install moviepy …...
基于javaweb的SpringBoot雪具商城系统设计与实现系统(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、…...
Harbor镜像仓库迁移与高可用集群搭建HTTPS实现实战指南
实验环境 Ubuntu22.04操作系统 registry节点 10.0.0.91 master节点 10.0.0.92 backup节点 10.0.0.93 在企业信息化建设的不同演进阶段,私有镜像仓库的选型策略存在显著差异。近期主导完成某企业级容器镜像仓库升级项目,成功实现Docker Registry至Ha…...
redis--JavaSpring客户端
目录 一、引言 二、配置 三、相关操作 四、总结 一、引言 本篇文章会将redis与spring项目进行结合,看看再spring项目中,redis是如何使用的 二、配置 三、相关操作 四、总结 在spring项目中的使用和在基础项目上的使用有差异,但是差异并不大…...
JavaWeb3
聚合函数:把某一列的数据计算。count,max,min,avg,sum select count(id) from wife;-- 统计个数,不计算null,统计常量表示个数 select count(*) from wife; select min(id) from wife; select avg(age) from wife; 分组查询 select name,c…...
SAP-ABAP:SAP数据集成全场景技术指南(BAPI、RFC、IDOC、BATCHJOB、ODATA、WEBSERVICE):从实时交互到批量处理
SAP数据集成全场景技术指南:从实时交互到批量处理 #mermaid-svg-hpPMerJYUerla0BJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hpPMerJYUerla0BJ .error-icon{fill:#552222;}#mermaid-svg-hpPMerJYUerla0BJ .er…...
QT笔记----QCheckBox
文章目录 概要1、QCheckBox 的基本概念2、单个QCheckBox3、多个QCheckBox同时应用3.1、实现效果3.2、实现Demo 概要 在 Qt 应用程序开发中,QCheckBox 是一个常用的用户界面元素,它允许用户在两种状态(选中和未选中)之间进行切换&a…...
试试智能体工作流,自动化搞定运维故障排查
APO 1.5.0版本全新推出的智能体工作流功能,让运维经验不再零散!只需将日常的运维操作和故障排查经验转化为标准化流程,就能一键复用,效率翻倍,从此告别重复劳动,把时间留给更有价值的创新工作。更贴心的是&…...
3.24[Q]Linux
我正在学习Linux,Linux设备管理是怎样的?详细解释,越细节越好 我正在学习Linux,在Linux设备管理中,什么是char device?以及block,usb device?详细解释,越细节越好 我正在学习Linux࿰…...
深度学习——图像相似度评价指标
这里写目录标题 PSNR(Peak Signal-to-Noise Ratio,峰值信噪比)定义公式代码 SSIMMS-SSIM (Multi Scale Structural Similarity Index Measure,多尺度结构相似性)CSS (Contrast-Structure Similarity 对比结构相似度)MA…...
CentOS安装sshpass工具-自动化SSH密码认证
sshpass是一个在Linux环境下用于自动化SSH密码认证的工具。 一、功能特点 自动化SSH登录:sshpass允许用户在命令行中直接传递密码,从而无需在SSH连接时手动输入密码。这对于自动化脚本和批处理任务非常有用,因为它可以在非交互式环境下完成…...
js 中 如何获取数组的交集【面试题】
一、数组元素为基本类型:Number、String、等基本类型时 1、使用 Set 和 filter(适用于两个数组) const intersection (arr1, arr2) > {const set new Set(arr2);return [...new Set(arr1)].filter(item > set.has(item)); };将第二…...
value-key 的作用
在 el-autocomplete 组件中,value-key 是一个非常重要的属性,它用于指定选项对象中作为值的字段名。当选项列表是一个包含多个属性的对象数组时,value-key 能帮助组件明确哪个属性是实际要使用的值。比如,选项列表为 [{id: 01, na…...
Spring MVC:从历史演变到实战入门
1. Java Web的发展历史与MVC模式 1.1 Model I与Model II的演进 Model I(JSPJavaBean) 作为早期Java Web开发的主流模式,其核心架构如下: graph LR A[客户端] --> B[JSP页面] B --> C{业务逻辑} C --> D[JavaBean] D -…...
Matlab设置表table的表头
用到matlab的table很好用。经常涉及放入数据,读取数据,下面总结常用的知识点。 1. 把不同数据类型放到同一个表中 想把时间类型和数值类型放到统一table中。困扰的点是,我已经知道了表头名称, 如何批量的为表头命名,…...
预测蓝桥杯16届嵌入式省赛客观题
以下是15道蓝桥杯嵌入式省赛客观题预测,每道题均包含**选项列表**、**答案**和**解析**,格式清晰便于快速查阅: 一、预测1 ### **一、STM32G4硬件基础与外设配置** 1. **STM32G431RBT6的Flash和RAM容量分别为?** **选项**&a…...
综合章节:游戏网络化、模组化与深度扩展
模块一:网络功能与玩家数据同步 目标:实现玩家得分上传、全球排行榜展示及云端数据同步。 # network_manager.py(网络请求封装) import requests import threadingclass NetworkManager:def __init__(self, base_url"http:…...
PostgreSQL:索引与查询优化
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Android Compose 框架的 ViewModel 委托深入剖析(二十)
Android Compose 框架的 ViewModel 委托深入剖析 一、引言 在 Android 开发中,数据的管理和状态的保存是至关重要的。ViewModel 作为 Android 架构组件的一部分,为我们提供了一种在配置更改(如屏幕旋转)时保存数据和管理 UI 状态…...
android|生成二维码qrcode(android)
1.build.gradle implementation com.google.zxing:core:3.4.1引入zxing库 只是生成的话引入core库就可以了 2.封装方法 import android.graphics.Bitmap; import android.graphics.Color;import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; imp…...
element-plus中el-empty空盒子组件和Collapse 折叠面板组件的使用
一.el-empty空盒子组件的使用 直接复制下面的代码: <el-empty description"description" /> 展示效果: 还可以自定义文字描述: <el-empty description"暂未选择患者"/> 二.Collapse 折叠面板组件的使用 复制…...
Windows 和 Linux 操作系统架构对比以及交叉编译
操作系统与架构兼容性详解 1. 可执行文件格式:PE vs ELF Windows: PE (Portable Executable) 格式 详细解释: PE 格式是 Windows 下的可执行文件标准 包含多个区段(Sections),如代码段、数据段、资源段 文件头包含…...
【区块链安全 | 第一篇】密码学原理
文章目录 1.哈希函数1.1 哈希函数的性质1.2 常见哈希算法1.3 Merkle Tree(默克尔树)1.4 HMAC(哈希消息认证码) 2. 公钥密码学2.1 对称加密 vs 非对称加密2.2 RSA 算法2.3 ECC(椭圆曲线密码学)2.4 Diffie-He…...
3.23[A]linux
gedit 是 GNOME 桌面环境下的文本编辑器,类似于 Windows 中的记事本,但功能更强大,支持语法高亮、多文件编辑等特性。它是一个图形化界面的文本编辑器,适合在需要直观编辑文本文件的场景中使用。 gedit 通常用于编辑配置文件、源代…...
AI革命之下的前端将会如何发展?
一、AI 为前端开发带来的变革 (一)提升开发效率 传统的 Web 前端开发常常面临大量重复性工作,如编写简单表单、布局组件等,这些工作耗时费力且易出错,严重影响开发效率和项目进度。而 AI 的出现,通过自动…...
【2025】基于springboot+vue的农产品商城系统设计与实现(源码、万字文档、图文修改、调试答疑)
项目完整功能以演示视频为准 基于Spring Boot Vue的农产品商城系统设计与实现功能结构图如下: 课题背景 随着互联网的普及和电子商务的快速发展,农产品线上销售成为推动农业现代化和乡村振兴的重要力量。传统的农产品销售模式存在信息不对称、销售渠道单…...
沪深300股指期货的看涨看跌方式是怎样的?
沪深300指数代表了中国A股市场中300家大公司的整体表现。股指期货交易允许老板们预测指数未来的涨跌,并从中获利。 沪深300股指期货基础操作 首先,沪深300股指期货中的看涨操作:老板们可以通过买入沪深300股指期货合约,代码也就是…...
使用selenium来获取数据集
使用selenium来获取数据集 1、下载最新的chrome浏览器与chromedriver.exe 查看chrome的版本,打开谷歌浏览器,点击右上角的三个点,然后点击【帮助】, 点击【关于Google Chrome】 然后去下载同样为134版本号的chromedriver.exe, 网址:https://googlechromelabs.github.…...
MCP(大模型上下文协议)
以下是关于大模型MCP协议(Model Context Protocol)的详细介绍,综合其定义、技术架构、应用场景及行业影响: 一、定义与核心目标 **MCP(Model Context Protocol,模型上下文协议)**是由Anthropic…...
FPGA中串行执行方式之流水线(Pipeline)
FPGA中串行执行方式之流水线(Pipeline) 在FPGA设计中,流水线(Pipeline) 是一种常见的优化技术,用于提高系统的吞吐量和性能。流水线通过将复杂的逻辑分解为多个阶段,每个阶段在一个时钟周期内完成一部分工作,并将中间结果传递到下一阶段。这种方式可以显著提高时钟…...
Python 3.8 Requests 爬虫教程(2025最新版)
遵守网站的爬虫规则、避免爬取敏感信息、保护个人隐私! 一、环境配置与基础验证 # 验证 Python 版本(需 ≥3.8) import sys print(sys.version) # 应输出类似 3.8.12 的信息# 安装 requests 库(若未安装) # 命令行执…...
【深度学习】GAN生成对抗网络:原理、应用与发展
GAN生成对抗网络:原理、应用与发展 文章目录 GAN生成对抗网络:原理、应用与发展1. 引言2. GAN的基本原理2.1 核心思想2.2 数学表达2.3 训练过程 3. GAN的主要变体3.1 DCGAN (Deep Convolutional GAN)3.2 CGAN (Conditional GAN)3.3 CycleGAN3.4 StyleGAN…...
LINUX基础 [三] - 进程创建
目录 前言 进程创建的初次了解(创建进程的原理) 什么是fork函数? 初识fork函数 写时拷贝 fork函数存在的意义 fork调用失败的原因 进程终止 运行完毕结果不正确 main函数返回 库函数函数exit 系统调用接口_exit 进程异常终止 进…...
AI比人脑更强,因为被植入思维模型【24】替身决策思维模型
定义 替身决策思维模型是一种在面对复杂问题或决策情境时,通过将自己代入到不同的角色(即“替身”)中,从这些角色的视角出发去思考、分析和做出决策的思维方式。这种思维模型要求决策者暂时摆脱自身固有的思维定式和立场…...
数据清洗:基于python抽取jsonl文件数据字段
基于python抽取目录下所有“jsonl”格式文件。遍历文件内某个字段进行抽取并合并。 import os import json import time from tqdm import tqdm # 需要先安装:pip install tqdmdef process_files():# 设置目录路径dir_path r"D:\daku\关键词识别\1623-00000…...
spring后端处理各种请求
在Spring MVC中处理JSON请求和返回JSON消息的步骤如下: 1. 添加依赖 确保项目中包含处理JSON的库,如Jackson。 Maven配置(pom.xml): <dependency><groupId>com.fasterxml.jackson.core</groupId>…...
企业级部署zabbix分布式监控系统
目录 一、Zabbix分布式监控系统介绍 1.什么是“Zabbix” 2.Zabbix分布式监控系统的特点 3.Zabbix分布式监控系统的原理 4.Zabbix分布式监控系统的运用 5. Zabbix分布式监控系统的部署顺序 二、搭建 1.设备硬件配置参考 2.zabbix分布式监控系统各节点设备名称和IP规划 …...
OkHttp 的证书设置
在 Android 开发中,通过 OkHttp 自定义 SSLSocketFactory 和 X509TrustManager 可以有效增强 HTTPS 通信的安全性,防止中间人攻击(如抓包工具 Charles/Fiddler 的拦截)。以下是实现防抓包的关键技术方案: 一、Okhttp设…...