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

【Elasticsearch】硬件资源优化

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

【Elasticsearch 】硬件资源优化

引言

在当今数字化飞速发展的时代,数据量呈爆炸式增长,如何高效地存储、检索和分析这些海量数据成为了众多开发者和企业面临的关键挑战。Elasticsearch 作为一款强大的分布式搜索引擎,凭借其高扩展性、实时搜索和分析能力,在众多领域得到了广泛应用。然而,要充分发挥 Elasticsearch 的性能优势,合理优化硬件资源是必不可少的一环。

想象一下,你正在负责一个大型电商平台的搜索功能开发,每天都有海量的商品数据需要索引和存储,同时还要应对高并发的用户查询请求。如果硬件资源配置不合理,可能会出现搜索响应时间过长、系统频繁卡顿甚至崩溃等问题,这无疑会严重影响用户体验,进而对业务造成巨大损失。

又或者,你在处理一个日志分析项目,需要对大量的系统日志进行快速检索和分析,以便及时发现潜在的问题和安全隐患。若硬件资源无法满足 Elasticsearch 的需求,那么分析结果的及时性和准确性都会大打折扣,无法为企业的决策提供有力支持。

正是基于这些实际场景中的痛点,深入了解 Elasticsearch 对硬件资源的需求与依赖关系,并掌握相应的优化策略显得尤为重要。本文将围绕 Java Elasticsearch 的硬件资源优化展开全面探讨,从 CPU、内存、磁盘 I/O 到网络带宽,详细阐述如何根据数据量与查询负载的规模合理规划硬件配置,以及如何通过优化内存分配、磁盘存储设置等方面提升系统性能,确保 Elasticsearch 在各种复杂环境下都能稳定高效运行。

一、Elasticsearch 硬件资源基础认知

1.1 Elasticsearch 架构概述

Elasticsearch 采用分布式架构,由多个节点组成集群。每个节点都可以存储数据、处理请求。其中,有主节点负责集群的管理和协调,数据节点负责实际的数据存储和检索,协调节点负责接收客户端请求并将其转发到合适的数据节点。这种分布式架构使得 Elasticsearch 能够轻松应对大规模数据和高并发查询。

例如,在一个电商搜索系统中,可能有多个数据节点分别存储不同品类的商品数据,协调节点接收到用户的搜索请求后,会根据请求的内容将其分发到相应的数据节点进行查询,最后汇总结果返回给用户。

1.2 硬件资源对 Elasticsearch 性能的影响

1.2.1 CPU

CPU 是 Elasticsearch 处理数据和执行查询的核心硬件。在索引数据时,CPU 负责对文档进行分析、分词、构建倒排索引等操作;在查询时,CPU 要执行搜索算法、对结果进行排序等。如果 CPU 性能不足,会导致索引和查询的速度变慢,响应时间延长。

比如,当处理大量复杂的文本分析任务时,如对新闻文章进行语义分析和索引,如果 CPU 核心数不足或频率较低,就会使得索引过程变得非常缓慢,影响数据的及时更新和查询效率。

1.2.2 内存

内存对于 Elasticsearch 至关重要。它主要用于缓存数据和索引,减少磁盘 I/O 操作。Elasticsearch 的许多组件,如 Lucene 的段缓存、过滤器缓存等都依赖内存。合理的内存分配可以显著提高查询性能,若内存不足,频繁的磁盘读写会导致系统性能急剧下降;而内存分配过多,又可能造成资源浪费,甚至引发 JVM 内存问题。

以一个日志监控系统为例,Elasticsearch 需要实时索引和查询大量的日志数据。如果内存配置不足,无法有效缓存常用的索引和数据,每次查询都需要从磁盘读取,会导致查询响应时间从毫秒级延长到秒级,严重影响监控的实时性。

1.2.3 磁盘 I/O

磁盘 I/O 性能直接影响 Elasticsearch 的数据读写速度。在索引数据时,需要将数据写入磁盘;查询时,又要从磁盘读取数据和索引。如果磁盘 I/O 速度慢,会成为系统性能的瓶颈。不同类型的磁盘,如机械硬盘(HDD)和固态硬盘(SSD),其 I/O 性能差异巨大。

例如,在一个大数据分析项目中,每天有大量的传感器数据需要存储到 Elasticsearch。若使用机械硬盘,由于其读写速度有限,在数据写入高峰时,可能会出现大量的 I/O 等待,导致索引延迟,进而影响数据分析的及时性。

1.2.4 网络带宽

网络带宽决定了 Elasticsearch 节点之间以及与客户端之间的数据传输速度。在分布式环境下,节点之间需要频繁地交换数据,如数据复制、集群状态同步等。如果网络带宽不足,会导致数据传输延迟,影响集群的稳定性和性能。

比如,在一个跨地域的分布式搜索系统中,不同地区的节点之间需要进行数据同步和查询协作。若网络带宽有限,数据传输时间会大幅增加,使得查询结果的返回时间变长,降低用户体验。

二、根据数据量与查询负载规划硬件配置

2.1 数据量对硬件配置的影响

2.1.1 小规模数据(GB 级别)

对于数据量在 GB 级别的应用场景,硬件配置要求相对较低。CPU 方面,普通的多核处理器(如 4 核)通常就能满足需求,因为数据处理量较小,CPU 的计算压力不大。内存可以分配 4 - 8GB,这样既能满足基本的缓存需求,又不会造成资源浪费。磁盘方面,使用普通的固态硬盘(SSD)即可,SSD 的高速读写性能可以保证数据的快速存储和检索。网络带宽要求不高,百兆网络一般就能应对。

例如,一个小型的企业内部知识库系统,数据量可能只有几 GB,使用上述配置的硬件,Elasticsearch 可以稳定运行,用户在查询知识文档时能够获得较快的响应速度。

2.1.2 中等规模数据(TB 级别)

当数据量增长到 TB 级别时,硬件配置需要相应升级。CPU 建议选择高性能的多核处理器,如 8 核或 16 核,以应对更复杂的数据处理任务。内存应增加到 16 - 32GB,以提供足够的缓存空间,减少磁盘 I/O。磁盘方面,需要使用多块 SSD 组成磁盘阵列,以提高数据读写的并行性和速度。网络带宽应提升到千兆网络,确保节点之间的数据传输顺畅。

以一个中型电商平台的商品数据索引为例,随着业务的发展,商品数据量达到了 TB 级别。此时,合理升级硬件配置后,Elasticsearch 能够更高效地处理商品索引和用户查询请求,搜索响应时间得到有效控制。

2.1.3 大规模数据(PB 级别及以上)

对于数据量达到 PB 级别及以上的超大规模应用,硬件配置要求极高。CPU 通常需要使用多处理器系统,拥有大量的核心数,以应对海量数据的处理。内存可能需要分配 64GB 以上甚至更多,以满足大规模缓存的需求。磁盘方面,需要采用高速的企业级 SSD 组成大规模的磁盘阵列,并且可能需要使用分布式文件系统来管理数据。网络带宽则要求万兆网络甚至更高,以保障集群内部和外部的数据传输效率。

比如,在一些大型的互联网公司,如搜索引擎公司,每天处理的数据量达到 PB 级别。只有配备顶级的硬件资源,才能保证 Elasticsearch 集群的高效稳定运行,为用户提供快速准确的搜索服务。

2.2 查询负载对硬件配置的影响

2.2.1 低查询负载

如果应用的查询负载较低,即用户查询请求较少,硬件配置可以相对简化。CPU 可以选择较低性能的处理器,内存分配也可以适当减少,磁盘使用普通 SSD 即可,网络带宽要求不高。

例如,一个小型的社区论坛搜索功能,每天的查询量有限,使用较低配置的硬件就能满足需求,降低了硬件成本。

2.2.2 中等查询负载

当中等查询负载时,硬件配置需要相应加强。CPU 应选择性能较好的多核处理器,以快速处理查询请求。内存要适当增加,以缓存更多的查询结果和索引数据。磁盘方面,考虑使用性能更好的 SSD 或磁盘阵列。网络带宽提升到千兆网络,确保查询请求能够快速响应。

以一个企业级的项目管理系统为例,员工在日常工作中会频繁查询项目相关信息。随着查询负载的增加,合理升级硬件配置后,系统的查询响应速度明显提升,提高了员工的工作效率。

2.2.3 高查询负载

在高查询负载的场景下,硬件配置必须达到较高水平。CPU 要使用顶级的多核处理器,内存要足够大以缓存大量数据和索引。磁盘需要采用高速的企业级 SSD 组成高性能磁盘阵列。网络带宽要达到万兆网络甚至更高,以应对高并发的查询请求。

比如,在电商促销活动期间,大量用户同时进行商品搜索查询,此时 Elasticsearch 面临着极高的查询负载。只有强大的硬件配置才能保证系统不出现卡顿,为用户提供流畅的搜索体验。

三、内存分配优化策略

3.1 JVM 堆内存大小设置

3.1.1 确定合适的堆内存大小原则

设置 JVM 堆内存大小需要综合考虑多个因素。首先,要根据服务器的物理内存总量来确定,一般建议堆内存大小不超过物理内存的 50% - 70%,避免堆内存过大导致系统其他进程没有足够的内存可用。其次,要考虑数据量和查询负载。如果数据量较大且查询频繁,需要适当增加堆内存,以提供更多的缓存空间;反之,如果数据量较小且查询负载低,可以减少堆内存分配。

例如,在一个拥有 32GB 物理内存的服务器上运行 Elasticsearch,根据上述原则,可以将堆内存设置在 16GB - 22GB 之间。

3.1.2 调整堆内存大小的方法

在 Elasticsearch 中,可以通过修改 jvm.options 文件来调整堆内存大小。例如,要将堆内存的最小值和最大值都设置为 16GB,可以在 jvm.options 文件中添加以下配置:

-Xms16g
-Xmx16g

这里,-Xms 表示堆内存的初始大小,-Xmx 表示堆内存的最大大小。

3.2 合理配置内存使用参数

3.2.1 堆外内存设置

除了堆内存,Elasticsearch 还可以使用堆外内存。堆外内存不受 JVM 垃圾回收机制的管理,对于一些需要频繁创建和销毁对象的操作(如网络通信、文件 I/O 等),使用堆外内存可以提高性能。可以通过设置 -XX:MaxDirectMemorySize 参数来调整堆外内存的大小。

例如,设置堆外内存大小为 4GB:

-XX:MaxDirectMemorySize=4g
3.2.2 垃圾回收器选择

不同的垃圾回收器对 Elasticsearch 的性能有不同的影响。对于 Elasticsearch,通常推荐使用 G1 垃圾回收器。G1 垃圾回收器在处理大内存时具有更好的性能和可预测性。可以通过在 jvm.options 文件中添加以下配置来启用 G1 垃圾回收器:

-XX:+UseG1GC

3.3 避免内存相关性能问题

3.3.1 内存不足导致的问题及解决方法

当内存不足时,Elasticsearch 可能会出现频繁的垃圾回收、查询响应时间变长甚至系统崩溃等问题。解决内存不足问题,首先要检查堆内存和堆外内存的设置是否合理,是否需要增加内存分配。其次,可以优化查询语句,减少不必要的数据加载和缓存,降低内存消耗。

例如,如果发现 Elasticsearch 在处理大量查询时出现频繁的垃圾回收,可以适当增加堆内存大小,并检查查询语句中是否存在全量扫描等消耗内存的操作,进行优化。

3.3.2 内存浪费问题及优化措施

内存浪费可能是由于不合理的缓存设置、对象创建和销毁等原因导致。要优化内存浪费问题,可以通过调整缓存策略,如设置合理的缓存过期时间,避免缓存过多无用的数据。同时,优化代码逻辑,减少不必要的对象创建和销毁。

比如,在一个新闻搜索系统中,如果发现缓存中存在大量过期的新闻数据,占用了大量内存,可以通过设置合适的缓存过期时间,定期清理过期数据,释放内存空间。

四、磁盘存储设置优化

4.1 选择合适的磁盘类型

4.1.1 SSD 与 HDD 的性能对比

固态硬盘(SSD)和机械硬盘(HDD)在性能上有巨大差异。SSD 采用闪存芯片作为存储介质,读写速度远远高于 HDD。HDD 则通过机械部件进行数据读写,速度相对较慢。

例如,在顺序读取测试中,SSD 的读取速度可以达到每秒数百 MB 甚至更高,而 HDD 通常只有每秒几十 MB。在随机读写方面,SSD 的优势更加明显,其随机读取延迟可以低至几十微秒,而 HDD 则在毫秒级别。

4.1.2 优先选择 SSD 的原因

由于 Elasticsearch 对磁盘 I/O 性能要求较高,优先选择 SSD 可以显著提高系统性能。SSD 的高速读写能力可以减少数据索引和查询时的等待时间,提高系统的响应速度。同时,SSD 的可靠性也更高,减少了因磁盘故障导致的数据丢失风险。

在一个对实时性要求极高的金融交易监控系统中,使用 SSD 存储 Elasticsearch 的数据,能够快速索引和查询交易数据,及时发现异常交易行为,保障交易安全。

4.2 配置磁盘阵列

4.2.1 磁盘阵列的原理与优势

磁盘阵列是将多个磁盘组合在一起,通过一定的算法提高数据读写性能和可靠性。常见的磁盘阵列级别有 RAID0、RAID1、RAID5 等。RAID0 通过条带化技术将数据分散存储在多个磁盘上,提高了数据读写的并行性,从而提升了读写速度;RAID1 通过镜像技术将数据复制到多个磁盘上,提高了数据的可靠性;RAID5 则结合了条带化和奇偶校验技术,在提高读写性能的同时保证了数据的可靠性。

4.2.2 选择合适的磁盘阵列级别

对于 Elasticsearch,根据不同的需求可以选择不同的磁盘阵列级别。如果更注重性能,可以选择 RAID0,但要注意其数据可靠性较低;如果对数据可靠性要求较高,可以选择 RAID1 或 RAID5。

例如,在一个数据备份系统中,为了保证数据的安全性和可靠性,可以选择 RAID5 磁盘阵列。而在一个对性能要求极高的测试环境中,可以选择 RAID0 磁盘阵列来提高数据读写速度。

4.3 调整磁盘 I/O 调度策略

4.3.1 常见的磁盘 I/O 调度算法

常见的磁盘 I/O 调度算法有 CFQ(完全公平队列)、Deadline、Noop 等。CFQ 算法试图公平地分配磁盘 I/O 资源,为每个进程提供大致相等的 I/O 带宽;Deadline 算法则更注重减少 I/O 延迟,优先处理紧急的 I/O 请求;Noop 算法是一种简单的调度算法,只对 I/O 请求进行合并和排序。

4.3.2 为 Elasticsearch 选择合适的调度算法

对于 Elasticsearch,通常推荐使用 Deadline 调度算法。因为 Elasticsearch 对 I/O 延迟较为敏感,Deadline 算法能够优先处理紧急的 I/O 请求,减少查询响应时间。可以通过修改 /sys/block/sda/queue/scheduler 文件(假设磁盘设备为 sda)来调整调度算法。

例如,将调度算法设置为 Deadline:

echo deadline > /sys/block/sda/queue/scheduler

相关文章:

【Elasticsearch】硬件资源优化

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

Elasticsearch 指南 [8.17] | Search APIs

Search API 返回与请求中定义的查询匹配的搜索结果。 http GET /my-index-000001/_search Request GET /<target>/_search GET /_search POST /<target>/_search POST /_search Prerequisites 如果启用了 Elasticsearch 安全功能&#xff0c;针对目标数据流…...

QT+mysql+python 效果:

# This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…...

Java 序列化和反序列化作用

Java 序列化和反序列化的核心作用是将对象转换为可存储或传输的字节流&#xff08;序列化&#xff09;&#xff0c;以及从字节流恢复对象&#xff08;反序列化&#xff09;。以下是详细说明和示例&#xff1a; 作用 持久化存储 将对象保存到文件或数据库&#xff0c;重启后仍可…...

【4】阿里面试题整理

[1]. 介绍一下数据库死锁 数据库死锁是指两个或多个事务&#xff0c;由于互相请求对方持有的资源而造成的互相等待的状态&#xff0c;导致它们都无法继续执行。 死锁会导致事务阻塞&#xff0c;系统性能下降甚至应用崩溃。 比如&#xff1a;事务T1持有资源R1并等待R2&#x…...

回顾生化之父三上真司的游戏思想

1. 放养式野蛮成长路线&#xff0c;开创生存恐怖类型 三上进入capcom后&#xff0c;没有培训&#xff0c;没有师傅手把手的指导&#xff0c;而是每天摸索写策划书&#xff0c;老员工给出不行的评语后&#xff0c;扔掉旧的重写新的。 然后突然就成为游戏总监&#xff0c;进入开…...

Java循环操作哪个快

文章目录 Java循环操作哪个快一、引言二、循环操作性能对比1、普通for循环与增强for循环1.1、代码示例 2、for循环与while循环2.1、代码示例 3、循环优化技巧3.1、代码示例 三、循环操作的适用场景四、使用示例五、总结 Java循环操作哪个快 一、引言 在Java开发中&#xff0c;…...

Maven jar 包下载失败问题处理

Maven jar 包下载失败问题处理 1.配置好国内的Maven源2.重新下载3. 其他问题 1.配置好国内的Maven源 打开⾃⼰的 Idea 检测 Maven 的配置是否正确&#xff0c;正确的配置如下图所示&#xff1a; 检查项⼀共有两个&#xff1a; 确认右边的两个勾已经选中&#xff0c;如果没有请…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.25 视觉风暴:NumPy驱动数据可视化

1.25 视觉风暴&#xff1a;NumPy驱动数据可视化 目录 #mermaid-svg-i3nKPm64ZuQ9UcNI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-i3nKPm64ZuQ9UcNI .error-icon{fill:#552222;}#mermaid-svg-i3nKPm64ZuQ9UcNI …...

Baklib推动数字化内容管理解决方案助力企业数字化转型

内容概要 在当今信息爆炸的时代&#xff0c;数字化内容管理成为企业提升效率和竞争力的关键。企业在面对大量数据时&#xff0c;如何高效地存储、分类与检索信息&#xff0c;直接关系到其经营的成败。数字化内容管理不仅限于简单的文档存储&#xff0c;更是整合了文档、图像、…...

读书笔记 | 《最小阻力之路》:用结构思维重塑人生愿景

一、核心理念&#xff1a;结构决定行为轨迹 橡皮筋模型&#xff1a;愿景张力的本质 书中提出&#xff1a;人类行为始终沿着"现状"与"愿景"之间的张力路径运动&#xff0c;如同橡皮筋拉伸产生的动力。 案例&#xff1a;音乐家每日练习的坚持&#xff0c;不…...

React中使用箭头函数定义事件处理程序

React中使用箭头函数定义事件处理程序 为什么使用箭头函数&#xff1f;1. 传递动态参数2. 避免闭包问题3. 确保每个方块的事件处理程序是独立的4. 代码可读性和维护性 示例代码总结 在React开发中&#xff0c;处理事件是一个常见的任务。特别是当我们需要传递动态参数时&#x…...

高阶开发基础——快速入门C++并发编程6——大作业:实现一个超级迷你的线程池

目录 实现一个无返回的线程池 完全代码实现 Reference 实现一个无返回的线程池 实现一个简单的线程池非常简单&#xff0c;我们首先聊一聊线程池的定义&#xff1a; 线程池&#xff08;Thread Pool&#xff09; 是一种并发编程的设计模式&#xff0c;用于管理和复用多个线程…...

少样本提示词模板

文章目录 少样本提示词模板 少样本提示词模板 少样本提示是一种基于机器学习的技术&#xff0c;利用少量的样本&#xff08;即提示词的示例部分&#xff09;来引导模型对特定任务进行学习和执行。这些示例能让模型理解开发者期望它完成的任务的类型和风格。在给定的任务中&…...

SQLGlot:用SQLGlot解析SQL

几十年来&#xff0c;结构化查询语言&#xff08;SQL&#xff09;一直是与数据库交互的实际语言。在一段时间内&#xff0c;不同的数据库在支持通用SQL语法的同时演变出了不同的SQL风格&#xff0c;也就是方言。这可能是SQL被广泛采用和流行的原因之一。 SQL解析是解构SQL查询…...

代码随想录算法训练营Day35

第九章 动态规划part03 正式开始背包问题&#xff0c;背包问题还是挺难的&#xff0c;虽然大家可能看了很多背包问题模板代码&#xff0c;感觉挺简单&#xff0c;但基本理解的都不够深入。 如果是直接从来没听过背包问题&#xff0c;可以先看文字讲解慢慢了解 这是干什么的。 …...

ECharts 样式设置

ECharts 样式设置 引言 ECharts 是一款功能强大的可视化库&#xff0c;广泛用于数据可视化。样式设置是 ECharts 中的重要一环&#xff0c;它能够帮助开发者根据需求调整图表的视觉效果&#xff0c;使其更加美观和易于理解。本文将详细介绍 ECharts 的样式设置&#xff0c;包…...

【腾讯前端面试】纯css画图形

之前参加腾讯面试&#xff0c;第一轮是笔试&#xff0c;面试官发的试卷里有一题手写css画一个扇形、一个平行四边形……笔试时间还是比较充裕的&#xff0c;但是我对这题完全没有思路&#x1f62d;于是就空着了&#xff0c;最后也没过。 今天偶然翻到廖雪峰大佬的博客里提到了关…...

DBeaver连接MySQL提示Access denied for user ‘‘@‘ip‘ (using password: YES)的解决方法

在使用DBeaver连接MySQL数据库时&#xff0c;如果遇到“Access denied for user ip (using password: YES)”的错误提示&#xff0c;说明用户认证失败。此问题通常与数据库用户权限、配置错误或网络设置有关。本文将详细介绍解决此问题的步骤。 一、检查用户名和密码 首先&am…...

截止到2025年2月1日,Linux的Wayland还有哪些问题是需要解决的?

截至2025年2月1日,Wayland需要解决的核心问题可按权重从高到低排序如下: 1. 屏幕共享与远程桌面的完整支持(权重:★★★★★) 问题:企业场景(如 腾讯会议)、开发者远程调试依赖稳定的屏幕共享功能。当前Wayland依赖PipeWire和XWayland,存在权限管理复杂、多显示器选择…...

【C++篇】位图与布隆过滤器

目录 一&#xff0c;位图 1.1&#xff0c;位图的概念 1.2&#xff0c;位图的设计与实现 1.5&#xff0c;位图的应用举例 1.4&#xff0c;位图常用应用场景 二&#xff0c;布隆过滤器 2.1&#xff0c;定义&#xff1a; 2.2&#xff0c;布隆过滤器的实现 2.3&#xff0c; 应…...

[EAI-026] DeepSeek-VL2 技术报告解读

Paper Card 论文标题&#xff1a;DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding 论文作者&#xff1a;Zhiyu Wu, Xiaokang Chen, Zizheng Pan, Xingchao Liu, Wen Liu, Damai Dai, Huazuo Gao, Yiyang Ma, Chengyue Wu, Bin…...

CV报错与模型推理注意

错误1&#xff1a; error: OpenCV(4.10.0) :-1: error: (-5:Bad argument) in function warpAffine > Overload resolution failed: > - Cant parse dsize. Sequence item with index 0 has a wrong type > - Cant parse dsize. Sequence item with index 0 has a …...

如何解决云台重力补偿?

如何解决云台重力补偿? 最近在调试步兵云台的时候,由于枪管、图传、摄像头等重力的原因,pitch轴的参数尤其难以调整,又不想抬升和降低使用两套不同的参数,所以使用了重力补偿,效果也是比较理想的,于是整理为一篇文章记录一下 一、问题根源:枪管重力在“搞事情” 想象…...

Java 23新特性

文章目录 Java 23新特性一、引言二、Markdown文档注释&#xff08;JEP 467&#xff09;示例 三、ZGC&#xff1a;默认的分代模式&#xff08;JEP 474&#xff09;1. 为什么要引入分代模式2. 使用分代模式的优势3. 如何启用分代模式 四、隐式声明的类和实例主方法&#xff08;JE…...

二叉树--链式存储

1我们之前学了二叉树的顺序存储&#xff08;这种顺序存储的二叉树被称为堆&#xff09;&#xff0c;我们今天来学习一下二叉树的链式存储&#xff1a; 我们使用链表来表示一颗二叉树&#xff1a; ⽤链表来表⽰⼀棵⼆叉树&#xff0c;即⽤链来指⽰元素的逻辑关系。通常的⽅法是…...

OpenAI 实战进阶教程 - 第七节: 与数据库集成 - 生成 SQL 查询与优化

内容目标 学习如何使用 OpenAI 辅助生成和优化多表 SQL 查询了解如何获取数据库结构信息并与 OpenAI 结合使用 实操步骤 1. 创建 SQLite 数据库示例 创建数据库及表结构&#xff1a; import sqlite3# 连接 SQLite 数据库&#xff08;如果不存在则创建&#xff09; conn sq…...

基于直觉的理性思维入口:相提并论的三者 以“网络”为例

以下主要是 腾讯云 AI 代码助手的答问。 Q1、假设有且只有一个 能和主干网和 骨干网 相提并论的其它什么 “**网”&#xff0c;您觉得应该是什么 在考虑能与主干网和骨干网相提并论的“网”时&#xff0c;我们需要思考哪些网络在规模、重要性或功能上与这两者相当。主干网和骨…...

C++,vector:动态数组的原理、使用与极致优化

文章目录 引言一、vector 的核心原理1. 底层数据结构1.1 内存布局的三指针模型1.2 内存布局示意图 2. 动态扩容机制2.1 动态扩容过程示例 3. 关键结论4. 代码验证内存布局5. 总结 二、vector 的使用方法1. 基本操作2. 迭代器与范围遍历 三、vector 的注意事项1. 迭代器失效2. 性…...

bootstrap.yml文件未自动加载问题解决方案

在添加bootstrap.yml文件后,程序未自动扫描到,即图标是这样的: 查了一些资料,是缺少bootstrap相关依赖,虽然已经添加了spring-cloud-context依赖,但是这个依赖并未引入bootstrap依赖,可能是版本问题,需要手动引入 <dependency><groupId>org.springframework.cloud&…...