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

稳定运行的以ElasticSearch数据库为数据源和目标的ETL性能变差时提高性能方法和步骤

在使用 Elasticsearch 作为数据源和目标的 ETL(Extract, Transform, Load)过程中,性能逐渐变差的原因可能有很多,比如查询效率下降、集群负载过高、资源配置不合理等。
性能的提升通常需要从多个方面入手,尤其是在处理大量数据时。通过合理的硬件配置、索引优化、查询优化以及批量处理等手段,可以大大提高基于 Elasticsearch 的 ETL 性能。此外,定期的监控与分析也是确保长时间稳定运行的关键。以下是一些提高性能的方法和步骤:

1. 优化查询和索引

  • 查询优化

    • 使用合适的查询类型:尽量避免使用 wildcardregex 查询,因为这些查询方式非常消耗资源。可以考虑通过优化数据模型来避免这些查询,或者使用 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 垃圾收集器来优化内存的使用和垃圾回收过程。
  • 线程池调整:增加线程池的大小来提高并发处理能力,尤其是对于索引和搜索操作,可以通过修改 elasticsearch.yml 配置文件来调整线程池参数。

4. 异步操作和缓存

  • 异步 ETL:将 ETL 过程进行异步化,减少主线程的阻塞,避免在数据传输和转换过程中造成长时间的等待。

  • 使用缓存:对于重复查询的数据,可以利用缓存来减少查询压力。例如,可以将常用的查询结果缓存到外部缓存系统(如 Redis)中。

5. 监控与分析

  • Elasticsearch 监控:使用 Elastic Stack 中的 Kibana 监控集群的性能和健康状态,及时发现瓶颈。

    • 监控 节点资源使用情况:CPU 使用率、内存占用、磁盘 I/O 和网络延迟。
    • 监控 索引性能:查询响应时间、索引刷新时间、分片分配等。
  • 慢查询分析:启用 Elasticsearch 的慢查询日志,分析执行时间较长的查询。调整这些查询以优化性能,或将其分解为多个更小的查询。

6. 数据清理与压缩

  • 数据归档:对于不常访问的数据,可以考虑归档到冷存储或其他存储系统,减少 Elasticsearch 集群的负载。

  • 合并和压缩索引:定期进行索引的合并操作(force merge),以减少碎片,提升查询性能。

7. 使用专用的 ETL 工具

  • 如果 ETL 的复杂度较高,可以考虑使用一些专门的工具,如 LogstashApache Nifi 来简化 ETL 流程的实现,并通过优化工具的配置提高效率。

8. 数据转换和存储优化

  • 合适的数据存储格式:对于目标存储(例如数据仓库、关系型数据库等),选择合适的存储格式(例如 Parquet、ORC 等)以提高存储性能。

9. ElasticSearch数据库性能优化

当稳定运行的 Elasticsearch 数据库性能变差时,有多个原因可能导致性能下降,包括硬件资源、配置问题、查询不优化等。
提高 Elasticsearch 性能的关键步骤包括硬件资源优化、查询优化、增加节点、索引优化、缓存设置、配置调整以及定期维护。通过这些步骤,可以有效提升系统的性能,避免因资源不足或配置不当导致的性能瓶颈。
下面是一些提高性能的常见方法和步骤:

1. 检查硬件资源
  • CPU 和内存使用情况:高负载的 CPU 或不足的内存可能会导致 Elasticsearch 性能下降。检查节点的 CPU 和内存使用情况,确保节点有足够的资源。

    • 使用命令:tophtopvmstat 查看系统资源。
    • 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,避免进行全文索引。
  • 适当设置字段的indexdoc_valuesstore属性

    • index:决定是否索引该字段。如果字段不需要用于查询,可以禁用索引,减少存储开销。
    • doc_values:开启 doc_values 用于排序和聚合,可以提高这类操作的性能。
    • store:如果不需要直接检索字段的原始值,可以禁用该选项,减少存储和提升写入性能。
2. 数据分片与副本的优化
  • 分片数目(Shards)
    在创建索引时,合理选择分片数目。过多的分片会导致资源消耗过大,过少的分片则可能影响并行查询性能。通常需要根据数据量、节点数和查询/写入负载来进行优化。

  • 副本数目(Replicas)
    副本提供了高可用性和查询负载均衡。在读操作较多的情况下,可以增加副本数,以提高查询性能;在写操作较多时,减少副本数可以提升写入性能,但会影响容错性。

3. 批量写入(Bulk indexing)
  • Elasticsearch的批量操作(bulk API)可以大幅提高写入性能,避免单次写入的网络延迟和请求开销。批量操作适合大批量数据插入、更新或删除的场景。
  • 批量写入时,建议每批数据量保持在适当的范围(例如每批500到1000条文档),过大或过小的批量都会影响性能。
4. 查询优化
  • 合理使用缓存
    Elasticsearch 会缓存常用的查询结果。通过合适的查询策略和 filteraggregations 的使用,可以提升缓存命中率,从而加速查询响应。

  • 限制查询范围
    对于大数据量的查询,最好设置查询的时间范围、分页或其他过滤条件,避免一次查询涉及整个索引。

  • 使用合适的查询类型

    • 尽量避免使用 wildcardregexp 查询,因为它们在大型数据集上性能较差。
    • 使用 termmatch 查询替代 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. 使用合适的查询方式
  • 避免复杂查询:对于读取密集型的操作,避免使用复杂的查询条件,尽量使用简单的查询方式,如termrange等。
  • 过滤器与查询的分离:ElasticSearch支持filterquery的分离,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&#xf…...

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 类,简化了串口开发…...

数据结构--二叉排序树

一、二叉排序树的定义 二叉排序树&#xff0c;又称二叉查找树。 性质&#xff1a; 左子树结点值<根结点值<右子树结点值&#xff08;进行中序遍历&#xff0c;可以得到一个递增的有序序列&#xff09; 二、查找操作 利用二叉排序树的性质&#xff0c;如果树空&#xff0c…...

FPGA的直方图均衡

文章目录 一、直方图均衡二、代码实现三、仿真 一、直方图均衡 直方图均衡&#xff08;Histogram Equalization&#xff09;是一种用于增强图像对比度的图像处理技术。它通过重新分配图像像素的灰度值&#xff0c;使得图像的灰度直方图在整个灰度范围内均匀分布&#xff0c;从而…...

使用Python将视频转化为gif

使用Python将视频转化为gif 一、前言二、准备三、测试 一、前言 最近想把喜欢的视频片段作成gif&#xff0c;就试着用Python做了下&#xff0c;感觉效果还行&#xff0c;这里做个记录。 二、准备 先下载安装对应的库&#xff0c;命令如下&#xff1a; pip install moviepy …...

基于javaweb的SpringBoot雪具商城系统设计与实现系统(源码+文档+部署讲解)

​ 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、…...

Harbor镜像仓库迁移与高可用集群搭建HTTPS实现实战指南

实验环境 Ubuntu22.04操作系统 registry节点 10.0.0.91 master节点 10.0.0.92 backup节点 10.0.0.93 在企业信息化建设的不同演进阶段&#xff0c;私有镜像仓库的选型策略存在显著差异。近期主导完成某企业级容器镜像仓库升级项目&#xff0c;成功实现Docker Registry至Ha…...

redis--JavaSpring客户端

目录 一、引言 二、配置 三、相关操作 四、总结 一、引言 本篇文章会将redis与spring项目进行结合&#xff0c;看看再spring项目中&#xff0c;redis是如何使用的 二、配置 三、相关操作 四、总结 在spring项目中的使用和在基础项目上的使用有差异&#xff0c;但是差异并不大…...

JavaWeb3

聚合函数&#xff1a;把某一列的数据计算。count,max,min,avg,sum select count(id) from wife;-- 统计个数&#xff0c;不计算null&#xff0c;统计常量表示个数 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 应用程序开发中&#xff0c;QCheckBox 是一个常用的用户界面元素&#xff0c;它允许用户在两种状态&#xff08;选中和未选中&#xff09;之间进行切换&a…...

试试智能体工作流,自动化搞定运维故障排查

APO 1.5.0版本全新推出的智能体工作流功能&#xff0c;让运维经验不再零散&#xff01;只需将日常的运维操作和故障排查经验转化为标准化流程&#xff0c;就能一键复用&#xff0c;效率翻倍&#xff0c;从此告别重复劳动&#xff0c;把时间留给更有价值的创新工作。更贴心的是&…...

3.24[Q]Linux

我正在学习Linux&#xff0c;Linux设备管理是怎样的&#xff1f;详细解释&#xff0c;越细节越好 我正在学习Linux&#xff0c;在Linux设备管理中&#xff0c;什么是char device&#xff1f;以及block,usb device?详细解释&#xff0c;越细节越好 我正在学习Linux&#xff0…...

深度学习——图像相似度评价指标

这里写目录标题 PSNR&#xff08;Peak Signal-to-Noise Ratio&#xff0c;峰值信噪比&#xff09;定义公式代码 SSIMMS-SSIM (Multi Scale Structural Similarity Index Measure,多尺度结构相似性)CSS &#xff08;Contrast-Structure Similarity 对比结构相似度&#xff09;MA…...

CentOS安装sshpass工具-自动化SSH密码认证

sshpass是一个在Linux环境下用于自动化SSH密码认证的工具。 一、功能特点 自动化SSH登录&#xff1a;sshpass允许用户在命令行中直接传递密码&#xff0c;从而无需在SSH连接时手动输入密码。这对于自动化脚本和批处理任务非常有用&#xff0c;因为它可以在非交互式环境下完成…...

js 中 如何获取数组的交集【面试题】

一、数组元素为基本类型&#xff1a;Number、String、等基本类型时 1、使用 Set 和 filter&#xff08;适用于两个数组&#xff09; const intersection (arr1, arr2) > {const set new Set(arr2);return [...new Set(arr1)].filter(item > set.has(item)); };将第二…...

value-key 的作用

在 el-autocomplete 组件中&#xff0c;value-key 是一个非常重要的属性&#xff0c;它用于指定选项对象中作为值的字段名。当选项列表是一个包含多个属性的对象数组时&#xff0c;value-key 能帮助组件明确哪个属性是实际要使用的值。比如&#xff0c;选项列表为 [{id: 01, na…...

Spring MVC:从历史演变到实战入门

1. Java Web的发展历史与MVC模式 1.1 Model I与Model II的演进 Model I&#xff08;JSPJavaBean&#xff09; 作为早期Java Web开发的主流模式&#xff0c;其核心架构如下&#xff1a; graph LR A[客户端] --> B[JSP页面] B --> C{业务逻辑} C --> D[JavaBean] D -…...

Matlab设置表table的表头

用到matlab的table很好用。经常涉及放入数据&#xff0c;读取数据&#xff0c;下面总结常用的知识点。 1. 把不同数据类型放到同一个表中 想把时间类型和数值类型放到统一table中。困扰的点是&#xff0c;我已经知道了表头名称&#xff0c; 如何批量的为表头命名&#xff0c;…...

预测蓝桥杯16届嵌入式省赛客观题

以下是15道蓝桥杯嵌入式省赛客观题预测&#xff0c;每道题均包含**选项列表**、**答案**和**解析**&#xff0c;格式清晰便于快速查阅&#xff1a; 一、预测1 ### **一、STM32G4硬件基础与外设配置** 1. **STM32G431RBT6的Flash和RAM容量分别为&#xff1f;** **选项**&a…...

综合章节:游戏网络化、模组化与深度扩展

模块一&#xff1a;网络功能与玩家数据同步 目标&#xff1a;实现玩家得分上传、全球排行榜展示及云端数据同步。 # network_manager.py&#xff08;网络请求封装&#xff09; import requests import threadingclass NetworkManager:def __init__(self, base_url"http:…...

PostgreSQL:索引与查询优化

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

Android Compose 框架的 ViewModel 委托深入剖析(二十)

Android Compose 框架的 ViewModel 委托深入剖析 一、引言 在 Android 开发中&#xff0c;数据的管理和状态的保存是至关重要的。ViewModel 作为 Android 架构组件的一部分&#xff0c;为我们提供了一种在配置更改&#xff08;如屏幕旋转&#xff09;时保存数据和管理 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空盒子组件的使用 直接复制下面的代码&#xff1a; <el-empty description"description" /> 展示效果&#xff1a; 还可以自定义文字描述&#xff1a; <el-empty description"暂未选择患者"/> 二.Collapse 折叠面板组件的使用 复制…...

Windows 和 Linux 操作系统架构对比以及交叉编译

操作系统与架构兼容性详解 1. 可执行文件格式&#xff1a;PE vs ELF Windows: PE (Portable Executable) 格式 详细解释&#xff1a; PE 格式是 Windows 下的可执行文件标准 包含多个区段&#xff08;Sections&#xff09;&#xff0c;如代码段、数据段、资源段 文件头包含…...

【区块链安全 | 第一篇】密码学原理

文章目录 1.哈希函数1.1 哈希函数的性质1.2 常见哈希算法1.3 Merkle Tree&#xff08;默克尔树&#xff09;1.4 HMAC&#xff08;哈希消息认证码&#xff09; 2. 公钥密码学2.1 对称加密 vs 非对称加密2.2 RSA 算法2.3 ECC&#xff08;椭圆曲线密码学&#xff09;2.4 Diffie-He…...

3.23[A]linux

gedit 是 GNOME 桌面环境下的文本编辑器&#xff0c;类似于 Windows 中的记事本&#xff0c;但功能更强大&#xff0c;支持语法高亮、多文件编辑等特性。它是一个图形化界面的文本编辑器&#xff0c;适合在需要直观编辑文本文件的场景中使用。 gedit 通常用于编辑配置文件、源代…...

AI革命之下的前端将会如何发展?

一、AI 为前端开发带来的变革 &#xff08;一&#xff09;提升开发效率 传统的 Web 前端开发常常面临大量重复性工作&#xff0c;如编写简单表单、布局组件等&#xff0c;这些工作耗时费力且易出错&#xff0c;严重影响开发效率和项目进度。而 AI 的出现&#xff0c;通过自动…...

【2025】基于springboot+vue的农产品商城系统设计与实现(源码、万字文档、图文修改、调试答疑)

项目完整功能以演示视频为准 基于Spring Boot Vue的农产品商城系统设计与实现功能结构图如下&#xff1a; 课题背景 随着互联网的普及和电子商务的快速发展&#xff0c;农产品线上销售成为推动农业现代化和乡村振兴的重要力量。传统的农产品销售模式存在信息不对称、销售渠道单…...

沪深300股指期货的看涨看跌方式是怎样的?

沪深300指数代表了中国A股市场中300家大公司的整体表现。股指期货交易允许老板们预测指数未来的涨跌&#xff0c;并从中获利。 沪深300股指期货基础操作 首先&#xff0c;沪深300股指期货中的看涨操作&#xff1a;老板们可以通过买入沪深300股指期货合约&#xff0c;代码也就是…...

使用selenium来获取数据集

使用selenium来获取数据集 1、下载最新的chrome浏览器与chromedriver.exe 查看chrome的版本,打开谷歌浏览器,点击右上角的三个点,然后点击【帮助】, 点击【关于Google Chrome】 然后去下载同样为134版本号的chromedriver.exe, 网址:https://googlechromelabs.github.…...

MCP(大模型上下文协议)

以下是关于大模型MCP协议&#xff08;Model Context Protocol&#xff09;的详细介绍&#xff0c;综合其定义、技术架构、应用场景及行业影响&#xff1a; 一、定义与核心目标 **MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;**是由Anthropic…...

FPGA中串行执行方式之流水线(Pipeline)

FPGA中串行执行方式之流水线(Pipeline) 在FPGA设计中,​流水线(Pipeline)​ 是一种常见的优化技术,用于提高系统的吞吐量和性能。流水线通过将复杂的逻辑分解为多个阶段,每个阶段在一个时钟周期内完成一部分工作,并将中间结果传递到下一阶段。这种方式可以显著提高时钟…...

Python 3.8 Requests 爬虫教程(2025最新版)

遵守网站的爬虫规则、避免爬取敏感信息、保护个人隐私&#xff01; 一、环境配置与基础验证 # 验证 Python 版本&#xff08;需 ≥3.8&#xff09; import sys print(sys.version) # 应输出类似 3.8.12 的信息# 安装 requests 库&#xff08;若未安装&#xff09; # 命令行执…...

【深度学习】GAN生成对抗网络:原理、应用与发展

GAN生成对抗网络&#xff1a;原理、应用与发展 文章目录 GAN生成对抗网络&#xff1a;原理、应用与发展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基础 [三] - 进程创建

目录 前言 进程创建的初次了解&#xff08;创建进程的原理&#xff09; 什么是fork函数&#xff1f; 初识fork函数 写时拷贝 fork函数存在的意义 fork调用失败的原因 进程终止 运行完毕结果不正确 main函数返回 库函数函数exit 系统调用接口_exit 进程异常终止 进…...

AI比人脑更强,因为被植入思维模型【24】替身决策思维模型

定义 替身决策思维模型是一种在面对复杂问题或决策情境时&#xff0c;通过将自己代入到不同的角色&#xff08;即“替身”&#xff09;中&#xff0c;从这些角色的视角出发去思考、分析和做出决策的思维方式。这种思维模型要求决策者暂时摆脱自身固有的思维定式和立场&#xf…...

数据清洗:基于python抽取jsonl文件数据字段

基于python抽取目录下所有“jsonl”格式文件。遍历文件内某个字段进行抽取并合并。 import os import json import time from tqdm import tqdm # 需要先安装&#xff1a;pip install tqdmdef process_files():# 设置目录路径dir_path r"D:\daku\关键词识别\1623-00000…...

spring后端处理各种请求

在Spring MVC中处理JSON请求和返回JSON消息的步骤如下&#xff1a; 1. 添加依赖 确保项目中包含处理JSON的库&#xff0c;如Jackson。 Maven配置&#xff08;pom.xml&#xff09;&#xff1a; <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 开发中&#xff0c;通过 OkHttp 自定义 SSLSocketFactory 和 X509TrustManager 可以有效增强 HTTPS 通信的安全性&#xff0c;防止中间人攻击&#xff08;如抓包工具 Charles/Fiddler 的拦截&#xff09;。以下是实现防抓包的关键技术方案&#xff1a; 一、Okhttp设…...