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

深入规划 Elasticsearch 索引:策略与实践

一、Elasticsearch 索引概述

(一)索引基本概念

Elasticsearch 是一个分布式、高性能的全文搜索引擎,其核心概念之一便是索引。索引本质上是一个存储文档的逻辑容器,它使得数据能够在高效的检索机制下被查询到。当我们对文档进行索引操作时,Elasticsearch 会将文档中的各个字段进行分析和处理,生成倒排索引(inverted index)。倒排索引是一种数据结构,它以字段中的单词或术语为关键词,指向包含这些关键词的文档列表。例如,对于一篇新闻文档,其内容包含 “科技”“人工智能” 等字段词,那么在倒排索引中,“科技” 这个词会关联到这篇文档的标识,当用户搜索 “科技” 时,Elasticsearch 就能快速定位到包含该词的文档。

(二)索引在 Elasticsearch 架构中的地位

索引在 Elasticsearch 整个架构中处于核心地位。数据的写入、查询、更新和删除操作都围绕索引展开。一个集群可以包含多个索引,每个索引又可以分布在多个节点上。在数据存储和查询过程中,Elasticsearch 会根据索引的配置(如分片和副本数量)来分配数据的存储位置和查询任务的负载。合理的索引规划能够提升集群的性能、扩展性和可维护性,是构建高效 Elasticsearch 应用的关键。

二、索引基本属性规划

(一)索引名称

  1. 命名规范与意义

    • 索引名称应该具有描述性,能够清晰地反映出该索引所存储数据的类型和用途。例如,对于存储用户信息的数据,可以命名为 “user - info - [日期]”(如 “user - info - 202410”),其中日期部分可以根据数据的时效性来定期创建新的索引,便于数据的分段管理和查询。合理的名称有助于在集群中快速识别和定位索引,同时也方便在查询语句中准确地指定目标索引。

    • 命名时应避免使用特殊字符和大写字母,因为 Elasticsearch 对索引名称有一定的限制。使用特殊字符可能会导致创建索引失败或者在查询时出现解析错误。例如,索引名称不能包含空格、“\”、“/”、“*”、“?” 等字符。

  2. 动态索引命名策略

    • 可以采用动态索引命名的方式,如根据时间动态生成索引名称。这在处理日志数据等具有时间序列特征的数据时非常有用。例如,使用 Logstash 等工具将日志数据写入 Elasticsearch 时,可以通过 date 模式设置索引名称为 “logs - %{+YYYY.MM.dd}”,这样每天的日志数据都会被存储到一个独立的索引中,便于后续按照日期范围进行查询和数据生命周期管理。

(二)分片(Shards)

  1. 分片原理与作用

    • 分片是 Elasticsearch 中索引的子分片,是数据存储和搜索的基本单元。一个索引可以被分成多个分片,这些分片可以分布在集群中的不同节点上。当数据被写入索引时,Elasticsearch 会根据一定的路由规则(默认是基于文档 ID 的哈希值)将数据分配到不同的分片中。分片的主要作用是实现数据的分布式存储,从而提高数据处理的性能和集群的扩展性。例如,对于一个大型的电商系统,商品数据量可能非常庞大。通过将商品索引分为多个分片,可以将数据分散存储在不同的服务器节点上,当进行商品搜索时,各个分片可以并行地处理查询请求,然后将结果汇总,大大缩短了查询响应时间。

  2. 分片数量规划

    • 分片数量的规划需要综合考虑数据量、硬件资源和查询性能等因素。一般来说,每个分片的大小建议控制在 10 - 50GB 左右。如果分片过大,会导致单个分片的数据量过多,在查询和维护时可能会出现性能瓶颈。例如,一个分片超过 100GB,查询时可能会因为数据的 I/O 操作过于频繁而变慢。

    • 同时,分片数量也不宜过多。过多的分片会增加集群的管理和维护成本,因为每个分片都需要一定的内存和计算资源来维护其倒排索引等数据结构。例如,在一个只有少量数据的测试环境中,创建过多的分片会导致节点的内存资源被大量占用,甚至可能使节点因内存不足而崩溃。可以根据预计的数据量和集群的硬件资源(如磁盘容量、CPU 核心数、内存大小等)来估算合适的分片数量。例如,对于一个预计存储 1TB 数据的索引,如果每个分片大小控制在 20GB 左右,那么可以规划 50 个分片左右。

(三)副本(Replicas)

  1. 副本原理与高可用性保障

    • 副本分片是主分片的备份。Elasticsearch 会将主分片的数据复制到副本分片上,当主分片所在的节点出现故障时,副本分片可以晋升为主分片,继续提供数据服务。这在集群的高可用性方面起到了关键作用。例如,在一个三节点的集群中,假设一个索引有 1 个主分片和 1 个副本分片。如果存储主分片的节点出现故障,Elasticsearch 会自动将副本分片晋升为主分片,然后将数据重新分发到其他可用节点上,确保集群仍然能够正常响应查询请求。

  2. 副本数量规划

    • 副本数量的规划通常取决于集群的节点数量和对数据可靠性的要求。一般建议副本数量至少为 1,这样可以为索引提供基本的数据冗余保障。在生产环境中,如果集群有多个节点(如 3 个或更多),可以设置副本数量为 2,这样即使有两个节点出现故障,数据仍然能够得到较好的保护。但是,副本数量也受到硬件资源的限制。每个副本分片都需要占用一定的磁盘空间和内存资源,过多的副本会导致集群资源的浪费。例如,在一个资源有限的集群中,如果设置过多的副本,可能会导致磁盘空间不足,影响数据的正常写入和查询。

三、字段类型与映射规划

(一)字段类型选择

  1. 常见字段类型及其适用场景

    • 文本类型(text) :适用于可被全文检索的长文本内容,如文章内容、产品描述等。Elasticsearch 会对 text 类型的字段进行分词处理,生成倒排索引,以便用户可以通过关键词进行搜索。例如,在一个新闻网站的索引中,新闻内容字段可以设置为 text 类型,这样用户可以通过搜索新闻中的关键词来查找相关新闻。

    • 关键字类型(keyword) :用于索引结构化的内容,如用户 ID、状态码、分类标签等。关键字类型的字段不会被分词,它将整个字段的值作为一个整体来进行索引。这在排序、聚合和精确匹配查询时非常有用。例如,在一个电商订单索引中,订单状态字段可以设置为 keyword 类型,这样可以方便地进行订单状态的精确查询和统计。

    • 数值类型(integer、long、float、double 等) :用于存储数字数据,如价格、数量、评分等。数值类型支持数值范围查询、排序和聚合操作。例如,在一个产品评价索引中,评分字段可以设置为 integer 类型,方便用户按照评分范围进行筛选和排序。

    • 日期类型(date) :用于存储日期和时间信息,如创建时间、更新时间等。Elasticsearch 支持多种日期格式,可以对日期类型字段进行时间范围查询和按日期排序等操作。例如,在一个用户行为日志索引中,事件发生时间字段可以设置为 date 类型,方便分析用户在特定时间段内的行为。

    • 布尔类型(boolean) :用于表示真假值,如是否激活、是否删除等。在查询时,可以快速根据布尔值进行过滤。例如,在一个用户账户信息索引中,是否激活字段可以设置为 boolean 类型,用于区分活跃用户和非活跃用户。

  2. 字段类型选择的关键考虑因素

    • 首先要考虑字段的用途。如果字段需要进行全文检索,那么 text 类型可能是最佳选择;如果字段用于精确匹配和聚合,那么 keyword 类型更合适。其次,要考虑字段的值的分布和查询模式。例如,对于一个经常进行范围查询的数字字段,选择合适的数值类型可以提高查询效率。另外,还要考虑字段存储和索引的资源开销。一些复杂的字段类型(如 geo_point 用于地理坐标)可能会占用更多的存储空间和计算资源,所以在选择时要权衡数据精度和性能需求。

(二)映射(Mapping)设计

  1. 静态映射与动态映射

    • 静态映射 :在创建索引之前,预先定义好索引中各个字段的类型、属性等信息,这种方式称为静态映射。静态映射可以确保字段的类型和结构符合预期,避免动态映射可能导致的一些问题,如字段类型推断错误。例如,当我们知道一个字段存储的是日期格式的字符串,通过静态映射可以明确指定该字段为 date 类型,并设置其日期格式,这样在写入数据时可以正确地进行解析和存储。

    • 动态映射 :Elasticsearch 默认会开启动态映射,当写入一个新字段时,它会根据字段的值自动推断字段类型并添加到映射中。这在数据结构不明确或者数据模式经常变化的情况下非常方便。例如,在一个日志收集系统中,可能会收到各种不同格式的日志数据,动态映射可以自动适应这些变化。但是,动态映射也可能带来一些潜在的问题,如字段类型推断错误(如将一个本应为数值的字段推断为文本类型)或者导致索引结构变得过于复杂。

  2. 映射配置的关键属性

    • 字段类型(type) :如前面所述,是映射中最重要的属性之一,决定了字段如何被存储和索引。

    • 是否可被搜索(index) :可以设置字段是否被包含在索引中。如果一个字段不需要被搜索,例如一些辅助字段或者存储大量无意义数据的字段,可以将其 index 属性设置为 false,这样可以节省存储空间和索引构建时间。例如,在一个包含用户头像路径的字段中,如果头像路径不需要被搜索,可以将其 index 设置为 false。

    • 分词器(analyzer) :对于 text 类型的字段,分词器决定了如何将文本分割成单词。Elasticsearch 提供了多种内置的分词器,如 standard 分词器用于一般文本分词,ik 分词器(需要插件支持)用于中文分词等。选择合适的分词器可以提高文本检索的准确性和效率。例如,在处理中文文本字段时,使用 ik 分词器可以更好地理解中文词汇的边界,提高中文搜索的性能。

    • 字段值在文档中的存储方式(store) :可以设置字段值是否被存储在文档中。默认情况下,字段值是不存储的,因为可以通过倒排索引重建文档的部分内容。如果需要在搜索结果中返回原始的字段值,或者需要进行一些基于原始字段值的计算,可以将 store 属性设置为 true。例如,在一个需要在搜索结果中显示完整文档内容的场景下,可以将相关字段的 store 属性设置为 true。

四、索引生命周期管理(ILM)规划

(一)索引生命周期阶段

  1. 热阶段(Hot)

    • 在热阶段,索引处于高频写入和查询状态。这个阶段的索引通常存储在性能较高的硬件(如 SSD 磁盘)上,以便能够快速响应写入请求和复杂的查询操作。例如,对于一个电商网站的订单索引,新创建的订单数据会首先处于热阶段,需要快速地将订单信息写入索引,并且能够及时地响应用户的订单查询请求。

  2. 温阶段(Warm)

    • 当索引的数据不再频繁写入,查询频率也有所降低时,可以将其移动到温阶段。温阶段的索引可以存储在性能稍低但成本较低的硬件(如 HDD 磁盘)上。在这个阶段,可以对索引进行一些优化操作,如减少副本数量、合并分片等,以节省资源。例如,对于一个月前的日志索引,其写入操作已经完成,查询主要是进行一些简单的统计分析,可以将其移动到温阶段。

  3. 冷阶段(Cold)

    • 冷阶段的索引主要用于长期存储和偶尔的归档查询。这些索引的数据通常很少被访问,可以存储在低成本、高容量的存储介质(如磁带库或云存储的冷存储层)上。例如,对于一些超过一年的财务数据索引,只在年度审计等特殊情况下才会被查询,可以将其移动到冷阶段。

  4. 删除阶段(Delete)

    • 如果数据已经超过了其生命周期,或者不再具有任何价值,可以将其删除。删除阶段的操作可以帮助释放存储资源,保持集群的整洁和高效。例如,对于一些临时测试数据的索引,在测试完成后可以及时删除。

(二)ILM 策略配置

  1. 基于时间的 ILM 策略

    • 这是最常见的 ILM 策略之一。可以根据索引创建时间或者文档中的时间字段来定义索引的生命周期。例如,对于一个日志索引,可以设置在热阶段停留 7 天,在温阶段停留 30 天,在冷阶段停留 90 天,最后删除。在配置策略时,需要指定每个阶段的过渡条件(如时间阈值)和相应的操作(如移动分片、减少副本等)。同时,还要考虑如何处理数据的写入和查询在不同阶段的切换,以确保服务的连续性。

  2. 基于数据大小的 ILM 策略

    • 当索引的数据量达到一定大小时,触发索引生命周期的转换。例如,当一个索引的大小达到 50GB 时,从热阶段移动到温阶段。这种策略适用于数据量增长比较稳定且对存储空间敏感的场景。在配置时,需要精确地计算数据量的阈值,并且要考虑数据写入速度和查询性能对数据大小变化的适应性。

五、索引合并与优化策略

(一)索引合并原理

  1. 分片合并机制

    • 在 Elasticsearch 中,分片合并是一种优化存储和性能的机制。当索引中有多个分片,并且这些分片的数据量较小或者有一些分片已经不再被频繁使用时,可以将它们合并成一个或几个较大的分片。分片合并的过程是基于 Lucene 的段(segment)合并机制。每个分片由多个段组成,段是 Lucene 中的最小存储和搜索单元。在合并过程中,Elasticsearch 会根据一定的规则(如段的大小、年龄等)将多个小段合并成一个较大的段,从而减少段的数量,提高搜索性能。

  2. 索引合并的触发条件

    • 索引合并可以手动触发,也可以通过自动的合并策略来触发。自动合并策略会根据索引的写入频率、数据量增长等因素来决定何时进行合并。例如,在一个写入频率较低的索引中,当新写入的数据量达到一定比例或者分片中的段数量达到一定阈值时,Elasticsearch 会自动启动合并操作。手动合并通常用于一些特定的场景,如在对索引进行大量的写入操作后,为了优化查询性能,可以手动触发索引合并。

(二)索引优化方法

  1. 减少字段数量和复杂度

    • 过多的字段或者复杂的字段类型(如嵌套对象)会增加索引的存储开销和查询复杂度。在设计索引时,应该尽量减少不必要的字段。例如,如果一个字段在查询和存储过程中几乎没有被使用,可以将其从映射中移除。同时,对于嵌套对象,要谨慎使用,因为它们会导致数据存储和查询的性能下降。可以考虑将嵌套对象拆分成多个独立的文档或者使用其他更简单的数据结构来替代。

  2. 优化文档大小

    • 大小合适的文档有助于提高索引和查询的效率。如果文档过大,可能会导致内存使用过多和网络传输延迟。可以通过合理地设计数据结构,减少文档中冗余的数据。例如,对于一些可以被推导出来的字段,可以在查询时进行计算而不是存储在文档中。同时,可以对文档中的文本字段进行适当的截断,只要不影响数据的关键信息和查询需求。

六、跨集群复制(CCR)与索引规划

(一)CCR 原理

  1. 主从复制机制

    • 跨集群复制允许将一个集群(主集群)中的索引数据复制到另一个集群(从集群)。主集群中的索引作为 leader 索引,从集群中的索引作为 follower 索指。当 leader 索引中的数据发生变更(如写入新文档、更新文档等)时,这些变更会实时地同步到 follower 索引。这种主从复制机制可以用于数据的异地备份、读写分离和灾难恢复等场景。例如,在一个跨国公司的数据存储架构中,可以将本地数据中心的索引(leader)复制到云端的数据中心(follower),以便在本地数据中心出现故障时,可以从云端快速恢复数据。

(二)CCR 索引规划要点

  1. 集群间网络配置与数据同步策略

    • 要实现跨集群复制,需要确保主集群和从集群之间的网络连接稳定且带宽足够。在配置 CCR 时,需要指定集群间的连接信息(如主机地址、端口、身份验证等)。同时,要根据数据的重要性和实时性要求来设置数据同步的策略。例如,对于一些对实时性要求较高的业务数据,可以设置较低的同步延迟阈值,确保数据能够及时地在集群间同步。而对于一些对实时性要求不高的数据,可以适当增加同步延迟阈值,以节省网络带宽。

  2. 索引版本和兼容性管理

    • 在跨集群复制过程中,主集群和从集群的 Elasticsearch 版本可能不同。需要确保不同版本之间的兼容性,避免因为版本差异导致数据同步失败或者索引损坏。在升级集群时,也要考虑对 CCR 索引的影响,提前进行兼容性测试和版本规划。例如,如果主集群要升级到一个新的版本,在升级之前要检查该版本与从集群版本之间的 CCR 兼容性,并且在升级后要重新验证 CCR 的功能是否正常。

相关文章:

深入规划 Elasticsearch 索引:策略与实践

一、Elasticsearch 索引概述 (一)索引基本概念 Elasticsearch 是一个分布式、高性能的全文搜索引擎,其核心概念之一便是索引。索引本质上是一个存储文档的逻辑容器,它使得数据能够在高效的检索机制下被查询到。当我们对文档进行…...

基于X86/RK/全志+FPGA+AI工业一体机在电力接地系统中的应用方案

随着电力技术的发展和需求增加,智能电网建设受到全球关注。电力五防系统建设是确保我国电力安全的核心任务,接地管理系统是其中的关键部分,对电力系统的安全、稳定和高效运行至关重要。工业一体机,凭借其卓越的性能、稳定性和环境…...

论文阅读:2024 arxiv AI Safety in Generative AI Large Language Models: A Survey

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 AI Safety in Generative AI Large Language Models: A Survey https://arxiv.org/pdf/2407.18369 https://www.doubao.com/chat/3262156521106434 速览 研究动机&#x…...

JVM对象创建全过程

JVM对象创建全过程深度解析 1. 对象创建的整体流程 JVM创建对象的过程可以分为7个关键步骤,从类检查到内存分配,再到对象初始化: 类加载检查 → 内存分配 → 内存空间初始化 → 对象头设置 → 构造函数执行 → 栈帧引用建立 → 对象使用2.…...

ubuntu 22.04 使用ssh-keygen创建ssh互信账户

现有两台ubuntu 22.04服务器,ip分别为192.168.66.88和192.168.88.66。需要将两台服务器创建新用户并将新用户做互信。 创建账户 adduser user1 # 如果此用户不想使用密码,直接一直回车就行,创建的用户是没法使用用户密码进行登陆的 su - …...

蓝牙开发那些事儿12——(记一颗BLE芯片BringUp折腾过程)

1.背景 蓝牙这个系列已经很久很久没有更新了,感慨良多。 现在写这篇文章主要是BringUp一颗蓝牙芯片的过程中遇到了一些奇怪的问题,想了一些办法,一一克服了,看看对其他做蓝牙的同学有没有启发。 同时也安利一个叫做HACKRF的设备…...

从零构建 Vue3 登录页:结合 Vant 组件与 Axios 实现完整登录功能

在 Web 开发的世界里,登录页是用户与应用交互的第一道门槛,它的体验好坏直接影响着用户对整个应用的印象。本文将详细记录如何使用 Vue3、Vant 组件库和 Axios 构建一个兼具美观与实用的登录页面,并实现完整的登录逻辑与数据验证,…...

AutoSAR从概念到实践系列之MCAL篇(一)——MCAL架构及其模块详解

欢迎大家学习我的《AutoSAR从概念到实践系列之MCAL篇》系列课程,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持! 老规矩,…...

多线程编程的简单案例——单例模式[多线程编程篇(3)]

目录 前言 1.wati() 和 notify() wait() 和 notify() 的产生原因 如何使用wait()和notify()? 案例一:单例模式 饿汉式写法: 懒汉式写法 对于它的优化 再次优化 结尾 前言 如何简单的去使用jconsloe 查看线程 (多线程编程篇1)_eclipse查看线程-CSDN博客 浅谈Thread类…...

万物互联时代,AWS IoT Core如何构建企业级物联网中枢平台?

在智能制造、智慧城市、车联网等场景爆发的今天,全球物联网设备数量已突破150亿台。企业如何高效管理海量设备并挖掘数据价值?AWS IoT Core作为亚马逊云科技推出的全托管物联网平台,正在为数千家企业提供设备连接、数据采集、实时分析的一站式…...

论文阅读:2023 arxiv Safe RLHF: Safe Reinforcement Learning from Human Feedback

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Safe RLHF: Safe Reinforcement Learning from Human Feedback https://arxiv.org/pdf/2310.12773 https://github.com/PKU-Alignment/safe-rlhf 速览 研究动机&#xff…...

链表相关算法题

小细节 初始化问题 我们这样子new一个ListNode 它里面的默认值是0,所以我们不能这样 如果我们为空,我们要返回null 节点结束条件判断(多创建节点问题) 参考示例3217 解析: 我的答案是多了一个无用节点 这是因为我每…...

招商信诺原点安全:一体化数据安全管理解决方案荣获“鑫智奖”!

近日,“鑫智奖 2025第七届金融数据智能优秀解决方案评选”榜单发布,原点安全申报的《招商信诺:数据安全一体化管理解决方案》荣获「信息安全创新优秀解决方案」。 “鑫智奖第七届金融数据智能优秀解决方案评选”活动由金科创新社主办&#x…...

实战篇|多总线网关搭建与量产验证(5000 字深度指南)

引言 1. 环境准备与硬件选型 1.1 项目需求分析 1.2 SoC 与开发板选型 1.3 物理接口与 PCB 设计 1.4 电源与供电保护 2. 软件架构与协议栈移植 2.1 分层架构详解 2.2 协议栈移植步骤 2.3 高可用驱动设计 2.4 映射逻辑与 API 定义 3. 开发流程与实践 3.1 敏捷迭代与里程碑 3.2 核…...

Jenkins 简易使用记录

一、Jenkins 核心功能与适用场景 核心功能: 持续集成(CI):自动构建代码、运行单元测试。持续交付(CD):自动化部署到测试/生产环境。任务调度:定时执行任务(如备份、清理&…...

第十四节:实战场景-何实现全局状态管理?

React.createElement调用示例 Babel插件对JSX的转换逻辑 React 全局状态管理实战与 JSX 转换原理深度解析 一、React 全局状态管理实现方案 1. Context API useReducer 方案(轻量级首选) // 创建全局 Context 对象 const GlobalContext createConte…...

启动vite项目报Unexpected “\x88“ in JSON

启动vite项目报Unexpected “\x88” in JSON 通常是文件被防火墙加密需要寻找运维解决 重启重装npm install...

Jenkins 多分支管道

如果您正在寻找一个基于拉取请求或分支的自动化 Jenkins 持续集成和交付 (CI/CD) 流水线,本指南将帮助您全面了解如何使用 Jenkins 多分支流水线实现它。 Jenkins 的多分支流水线是设计 CI/CD 工作流的最佳方式之一,因为它完全基于 git(源代…...

PHP腾讯云人脸核身获取NONCE ticket

参考腾讯云官方文档: 人脸核身 获取 NONCE ticket_腾讯云 前提条件,已经成功获取了access token。 获取参考文档: PHP腾讯云人脸核身获取Access Token-CSDN博客 public function getTxFaceNonceTicket($uid) {$access_token file_get_c…...

云计算(Cloud Computing)概述——从AWS开始

李升伟 编译 无需正式介绍亚马逊网络服务(Amazon Web Services,简称AWS)。作为行业领先的云服务提供商,AWS为全球开发者提供了超过170项随时可用的服务。 例如,Adobe能够独立于IT团队开发和更新软件。通过AWS的服务&…...

51单片机实验五:A/D和D/A转换

一、实验环境与实验器材 环境:Keli,STC-ISP烧写软件,Proteus. 器材:TX-1C单片机(STC89C52RC)、电脑。 二、 实验内容及实验步骤 1.A/D转换 概念:模数转换是将连续的模拟信号转换为离散的数字信…...

重构未来智能:Anthropic 解码Agent设计哲学三重奏

第一章 智能体进化论:从工具到自主体的认知跃迁 1.1 LLM应用范式演进图谱 阶段技术形态应用特征代表场景初级阶段单功能模型硬编码规则执行文本摘要/分类进阶阶段工作流编排多模型协同调度跨语言翻译流水线高级阶段自主智能体动态决策交互编程调试/客服对话 1.1.…...

MCP协议在纳米材料领域的深度应用:从跨尺度协同到智能研发范式重构

MCP协议在纳米材料领域的深度应用:从跨尺度协同到智能研发范式重构 文章目录 MCP协议在纳米材料领域的深度应用:从跨尺度协同到智能研发范式重构一、MCP协议的技术演进与纳米材料研究的适配性分析1.1 MCP协议的核心架构升级1.2 纳米材料研发的核心挑战与…...

.NET Core 服务实现监控可观测性最佳实践

.NET Core 概述 .Net Core 是一个开源的、跨平台的高性能框架,由微软开发并维护,现由 .NET Foundation 提供支持。它用于构建现代化、可扩展的云端和本地应用程序,支持开发 Web 应用、微服务、API、物联网应用以及移动后端服务,是…...

ios精灵脚本辅助软件,有根和无根roothide越狱区别

最新版本的ios按键精灵app 支持到15-16系统,可以在半越狱环境下和无根越狱环境安装,对于很多用户一直不理解有根和无根之间的差别,今天简单介绍下 最高权限和部分权限的区别 1、有根越狱 – 有系统根目录读写权限(通过越狱软件可…...

ChatGPT-o3辅助学术大纲效果如何?

目录 1 引言 2 背景综述 2.1 自动驾驶雷达感知 2.2 生成模型演进:从 GAN 到 Diffusion 3 相关工作 3.1 雷达点云增强与超分辨率 3.2 扩散模型在数据增广中的应用 4 方法论 4.1 问题定义与总览 4.2 数据预处理与雷达→体素表示 4.3 潜在体素扩散网络&…...

PyCharm 2024.3.5 状态栏添加前进后退按钮

操作路径:Appearance & Behavior -> Menu and Toolbars -> Main Toolbar -> Left -> Add… 按钮位置:Main Menu -> Navigate -> OK 最终效果...

【CPP】死锁产生、排查、避免

一、死锁产生 死锁是指两个或多个线程互相等待对方释放资源,导致程序无法继续执行的现象。在多线程编程中,死锁是一种常见且严重的并发问题。死锁产生必须要四个条件同时满足才会发生: 互斥条件:某些资源只能由一个线程占用。占…...

深入理解 Android Handler

一、引言 Handler 在安卓中的地位是不言而喻的,几乎维系着整个安卓程序运行的生命周期,但是这么重要的一个东西,我们真的了解它吗?下面跟随着我的脚步,慢慢揭开Hanler的神秘面纱吧! 本文将介绍Handler 的运…...

Git 进阶之路:高效协作之分支管理

🌈 个人主页:Zfox_ 🔥 系列专栏:Git 企业级应用 目录 一:🔥 分⽀管理 🦋 理解分⽀🦋 创建分⽀🦋 切换分⽀🦋 合并分⽀🦋 删除分⽀🦋 合…...

LeetCode 2364.统计坏数对的数目:反向统计

【LetMeFly】2364.统计坏数对的数目&#xff1a;反向统计 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-number-of-bad-pairs/ 给你一个下标从 0 开始的整数数组 nums 。如果 i < j 且 j - i ! nums[j] - nums[i] &#xff0c;那么我们称 (i, j) 是一个 坏…...

6.Rust+Axum:打造高效 WebSocket 实时通信聊天室

摘要 本文详细介绍 RustAxum 在 WebSocket 实时通信开发中的应用&#xff0c;包括双向通信、状态管理等&#xff0c;实践构建聊天室应用。 一、引言 在当今的 Web 应用开发中&#xff0c;实时通信变得越来越重要。WebSocket 作为一种在单个 TCP 连接上进行全双工通信的协议&…...

【硬件系统架构】冯·诺依曼架构

一、引言 在计算机科学的广袤领域中&#xff0c;冯诺依曼架构犹如一颗璀璨的恒星&#xff0c;照亮了现代计算机发展的道路。从我们日常使用的个人电脑到强大的数据中心服务器&#xff0c;几乎都基于这一架构构建。它的出现是计算机发展史上的一个重要里程碑&#xff0c;深刻地影…...

Android 13 关闭屏幕调节音量大小

一、问题描述 在Android 13系统中,通过修改frameworks/base/core/res/res/values/config.xml配置文件,实现灭屏状态下调节音量的功能。 二、修改内容 diff --git a/frameworks/base/core/res/res/values/config.xml b/frameworks/base/core/res/res/values/config.xml inde…...

[编程基础] Java · 学习手册

&#x1f525; 《Java 工程师修炼之路&#xff1a;从零构建系统化知识体系》 &#x1f525; &#x1f6e0;️ 专栏简介&#xff1a; 这是一个以工业级开发标准打造的 Java 全栈技术专栏&#xff0c;涵盖语言核心、并发编程、JVM 原理、框架源码、架构设计等全维度知识体系。专…...

探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅

目录 一、引言 二、蓝耘元生代和 ComfyUI 工作流初印象 &#xff08;一&#xff09;蓝耘元生代平台简介 &#xff08;二&#xff09;ComfyUI 工作流创建是啥玩意儿 三、计算机视觉是个啥 &#xff08;一&#xff09;计算机视觉的基本概念 &#xff08;二&#xff09;计算…...

C++ 迭代器失效详解:如何避免 vector 操作中的陷阱

目录 1. 什么是迭代器失效&#xff1f; 2. 哪些操作会导致迭代器失效&#xff1f; 2.1 vector 的插入操作&#xff08;push_back, insert&#xff09; 示例&#xff1a;push_back 导致迭代器失效 如何避免&#xff1f; 2.2 vector 的删除操作&#xff08;erase, pop_back&…...

【fisco bcos】基于ABI调用智能合约

参考官方文档&#xff1a;https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/sdk/java_sdk/assemble_transaction.html 先放一下智能合约&#xff1a; &#xff08;就是一个很简单的插入和查找嗯&#xff09; pragma solidity ^0.4.25; pragma experimental…...

【Python学习笔记】Pandas实现Excel质检记录表初审、复核及质检统计

背景&#xff1a; 我有这样一个需要审核的飞书题目表&#xff0c;按日期分成多个sheet&#xff0c;有初审——复核——质检三个环节&#xff0c;这三个环节是不同的同学在作业&#xff0c;并且领到同一个题目的人选是随机的&#xff0c;也就是说&#xff0c;完成一道题的三个人…...

Springboot 自动装配原理是什么?SPI 原理又是什么?

1. Spring Boot 自动装配原理 自动装配是 Spring Boot 简化配置的核心机制&#xff0c;其核心思想是根据类路径中的依赖自动配置 Spring 应用。 关键步骤&#xff1a; 启动注解 SpringBootApplication 该注解组合了 EnableAutoConfiguration&#xff0c;用于激活自动配置。 …...

【英语语法】基本句型

目录 前言一&#xff1a;主谓二&#xff1a;主谓宾三&#xff1a;主系表四&#xff1a;主谓双宾五&#xff1a;主谓宾补 前言 英语基本句型是语法体系的基石&#xff0c;以下是英语五大基本句型。 一&#xff1a;主谓 结构&#xff1a;主语 不及物动词 例句&#xff1a; T…...

扫雷-C语言版

C语言扫雷游戏设计&#xff08;完整版&#xff09; 游戏背景 扫雷是一款经典的益智类单人电脑游戏&#xff0c;最早出现在1960年代&#xff0c;并在1990年代随着Windows操作系统而广为人知。游戏目标是在不触发任何地雷的情况下&#xff0c;揭开所有非地雷的格子。玩家需要根…...

【C++初阶】--- list容器功能模拟实现

1.什么是list容器 在 C 标准模板库&#xff08;STL&#xff09;中&#xff0c;std::list 是一个非常有用的容器&#xff0c;它是双向链表的实现std::list 是一种序列式容器&#xff0c;它允许在序列内的任意位置进行高效的插入和删除操作。与数组和 std::vector 不同&#xff…...

gRPC 介绍及在嵌入式 Linux 下的成功编译及使用详解

gRPC 是一个高性能、开源和通用的 RPC 框架&#xff0c;由 Google 开发。它支持多种编程语言&#xff0c;并且能够运行在不同的环境中&#xff0c;包括嵌入式系统。本文将详细介绍 gRPC&#xff0c;以及如何在嵌入式 Linux 系统下成功编译 gRPC&#xff0c;并结合 protobuf 和 …...

C语言教程(十):C 语言函数详解

一、引言 在 C 语言中&#xff0c;函数是一组执行特定任务的代码块。通过将复杂的程序逻辑划分为多个函数&#xff0c;不仅能提高代码的可读性、可维护性&#xff0c;还便于代码的复用。无论是简单的数学计算&#xff0c;还是复杂的系统操作&#xff0c;函数都发挥着核心作用。…...

力扣刷题-热题100题-第35题(c++、python)

146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/lru-cache/?envTypestudy-plan-v2&envIdtop-100-liked 双向链表哈希表 内置函数 对于c有list可以充当双向链表&#xff0c;unordered_map充当哈希表&#xff1b;python有OrderedDic…...

LeetCode算法题(Go语言实现)_52

题目 给你一个下标从 0 开始的整数数组 costs &#xff0c;其中 costs[i] 是雇佣第 i 位工人的代价。 同时给你两个整数 k 和 candidates 。我们想根据以下规则恰好雇佣 k 位工人&#xff1a; 总共进行 k 轮雇佣&#xff0c;且每一轮恰好雇佣一位工人。 在每一轮雇佣中&#xf…...

基于尚硅谷FreeRTOS视频笔记——13—HAL库和RTOS时钟源问题

RTOS的时钟源就是系统定时器中断&#xff0c;通俗来说就是系统定时器每中断一次&#xff0c;就扫描一次RTOS&#xff0c;查看RTOS中有没有任务的切换。 但是&#xff0c;系统存在一个HAL_Delay()函数&#xff0c;就是使用的系统定时器中断来执行的函数。 当我们在RTOS中&…...

FPGA入门学习Day1——设计一个DDS信号发生器

目录 一、DDS简介 &#xff08;一&#xff09;基本原理 &#xff08;二&#xff09;主要优势 &#xff08;三&#xff09;与传统技术的对比 二、FPGA存储器 &#xff08;一&#xff09;ROM波形存储器 &#xff08;二&#xff09;RAM随机存取存储器 &#xff08;三&…...

JavaScript-立即执行函数(Immediately Invoked Function Expression,IIFE)

立即执行函数&#xff08;Immediately Invoked Function Expression&#xff0c;IIFE&#xff09;是 JavaScript 里一种很独特的函数&#xff0c;它在定义后会马上执行。下面会详细介绍它的语法、用途、优点以及注意事项。 一、语法 立即执行函数一般有两种常见的语法形式&am…...