Elasticsearch 8.16.0:革新大数据搜索的新利器

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

在这里插入图片描述


在这里插入图片描述

Elasticsearch 8.16.0:革新大数据搜索的新利器

一、引言

在当今数字化飞速发展的时代,数据量呈爆炸式增长,数据的复杂性也日益提高。企业和开发者们都在寻求更高效、更强大的搜索和分析解决方案,以应对海量数据带来的挑战。Elasticsearch 作为一款广受欢迎的开源搜索和分析引擎,一直在不断进化,以满足用户日益增长的需求。

在这里插入图片描述
本次Elasticsearch 8.16.0 版本的发布(Release date: November 13, 2024),带来了一系列具有变革性的新功能,进一步巩固了其在数据领域的重要地位。其主要新功能如下:

1. BBQ(Better Binary Quantization)‌

这是一种创新的向量数据量化方法,旨在提高向量数据的压缩率,同时保持高召回率和自定义选项BBQ通过标量量化和位向量支持,能够在不影响准确性的情况下将向量数据的压缩率提高32倍,特别适用于大型工作负载‌。

2. 倒数排名融合(Reciprocal Rank Fusion, RRF)‌

RRF是一种生产就绪的混合对话搜索功能,提供了便捷的结果归一化和组合能力,能够增强生成式 AI 驱动的搜索体验‌。

3. 检索器和开放推理 API‌

这些API的发布使得用户可以更方便地构建基于混合搜索和检索增强生成(Retrieval Augmented Generation, RAG)的应用程序。

4. 可观察性增强‌

Elastic Observability通过基于搜索的相关性、不折不扣的数据保留、改进的运营效率和成本,提供了增强的日志分析和简化的入门流程。此外,还支持Amazon Bedrock集成,为基于Amazon Bedrock构建的大型语言模型(LLM)提供全面的监控功能‌。

5. 云资产保护‌

通过SIEMSecurity Information and Event Management)功能,保护云资产并解决云保护和上下文调查问题,最终在一个许可证中解决了云保护和上下文调查问题‌。

6. 本地部署简化‌

通过start-local脚本,用户可以在几分钟内在笔记本电脑上进行本地部署,从而快速开始使用Elasticsearch进行本地开发运行‌。

7. 内存优化‌

Elasticsearch 8.16.0对内存管理进行了优化,引入了一种新的内存分配算法,能够更有效地利用内存资源,同时使用更高效的数据结构来存储索引数据,减少了内存的占用。

接下来,让我们深入了解这些令人兴奋的新特性。

二、BBQ:创新的向量数据量化方法

1. BBQ 原理概述

BBQBetter Binary Quantization)是 Elasticsearch 8.16.0 中一种开创性的向量数据量化方法。它的核心目标是在提高向量数据压缩率的同时,维持高召回率,并提供自定义选项。其原理是通过巧妙地结合标量量化和位向量支持来实现这一目标。

在实际的数据处理中,向量数据往往占据大量的存储空间。传统的量化方法可能会在压缩数据的过程中损失一定的准确性,导致搜索结果的召回率下降。而 BBQ 则打破了这种局限,它能够在不影响准确性的情况下,将向量数据的压缩率提高 32 倍。这对于处理大型工作负载,特别是那些包含大量向量数据的应用场景来说,具有极其重要的意义。

2. 用法介绍

以下演示如何在 Elasticsearch 中使用 BBQ 进行向量数据的量化和查询。

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;

public class BBQExample {
    public static void main(String[] args) throws IOException {
        // 假设已经创建了 RestHighLevelClient 实例
        RestHighLevelClient client = createClient(); 

        // 创建搜索请求
        SearchRequest searchRequest = new SearchRequest("your_index_name");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        // 使用 BBQ 相关的查询构建器(这里只是示例,实际使用可能需要更多配置)
        searchSourceBuilder.query(QueryBuilders.bbqQuery("your_vector_field", "your_vector_value")); 

        searchRequest.source(searchSourceBuilder);

        // 执行搜索请求
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

        // 处理搜索结果
        handleSearchResponse(searchResponse); 

        client.close();
    }

    private static RestHighLevelClient createClient() {
        // 创建并返回 RestHighLevelClient 实例的代码,这里省略详细实现
        return null; 
    }

    private static void handleSearchResponse(SearchResponse searchResponse) {
        // 处理搜索结果的代码,这里省略详细实现
        System.out.println("Search results: " + searchResponse); 
    }
}

在上述代码中,我们首先创建了一个 SearchRequest,并通过 SearchSourceBuilder 构建查询条件。这里使用了 bbqQuery 方法来构建基于 BBQ 的查询,其中 your_index_name 是索引名称,your_vector_field 是存储向量数据的字段名,your_vector_value 是要查询的向量值。然后通过 RestHighLevelClient 执行搜索请求,并对搜索结果进行处理。需要注意的是,实际应用中需要完善 createClienthandleSearchResponse 方法的实现。

三、倒数排名融合(RRF):提升混合对话搜索体验

1. RRF 功能解析

倒数排名融合(Reciprocal Rank Fusion, RRF)是 Elasticsearch 8.16.0 中一个生产就绪的混合对话搜索功能。在现代搜索应用中,尤其是那些结合了生成式 AI 的应用场景,搜索结果的质量和相关性至关重要。RRF 的出现为解决这一问题提供了有力的支持。

RRF 的主要优势在于它提供了便捷的结果归一化组合能力。在复杂的搜索环境中,我们可能会从多个不同的数据源或者搜索算法中获取结果,这些结果的排名和相关性可能各不相同。RRF 能够将这些不同来源的结果进行有效的融合,通过其独特的算法,重新计算排名,从而提高搜索结果的整体质量,增强生成式 AI 驱动的搜索体验。

2. 用法介绍

以下是一个使用 RRF 进行混合对话搜索的 Java 示例。

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;

import java.io.IOException;

public class RRFExample {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient client = createClient();

        SearchRequest searchRequest = new SearchRequest("your_index_name");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        // 使用 RRF 相关的查询构建器(这里只是示例,实际使用可能需要更多配置)
        searchSourceBuilder.query(QueryBuilders.rrfQuery("your_text_field", "your_search_query")
               .addSource("source1", 0.5) 
               .addSource("source2", 0.3) 
               .addSource("source3", 0.2)); 

        // 添加排序条件(这里只是示例,可根据实际情况调整)
        searchSourceBuilder.sort(SortBuilders.fieldSort("_score").order(SortOrder.DESC)); 

        searchRequest.source(searchSourceBuilder);

        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        handleSearchResponse(searchResponse);

        client.close();
    }

    private static RestHighLevelClient createClient() {
        // 创建并返回 RestHighLevelClient 实例的代码,这里省略详细实现
        return null;
    }

    private static void handleSearchResponse(SearchResponse searchResponse) {
        // 处理搜索结果的代码,这里省略详细实现
        System.out.println("Search results with RRF: " + searchResponse);
    }
}

在这个示例中,我们创建了一个 SearchRequest,并在 SearchSourceBuilder 中使用 rrfQuery 构建基于 RRF 的查询。your_index_name 是索引名称,your_text_field 是文本字段名,your_search_query 是搜索关键词。通过 addSource 方法可以指定不同数据源的权重,这里模拟了三个数据源 source1source2source3 及其权重。然后添加了按照得分降序排序的条件,最后执行搜索请求并处理结果。同样,在实际应用中需要完善 createClienthandleSearchResponse 方法。

四、检索器和开放推理 API:构建混合搜索和 RAG 应用的利器

1. API 功能介绍

Elasticsearch 8.16.0 发布的检索器和开放推理 API 为开发者们开启了构建强大应用程序的新大门。在混合搜索和检索增强生成(Retrieval Augmented Generation, RAG)应用日益流行的今天,这些 API 的出现具有里程碑意义。

检索器 API 允许开发者更方便地从 Elasticsearch 索引中获取相关数据,无论是基于文本的查询还是向量相似性查询。它提供了一种灵活且高效的方式来检索数据,满足不同应用场景的需求。

开放推理 API 则进一步扩展了功能,它与各种推理引擎和模型集成,使得开发者可以在 Elasticsearch 中直接进行复杂的推理操作。这对于构建智能搜索应用、知识图谱应用等需要高级推理能力的场景非常有帮助。通过这些 API,开发者可以轻松地将 Elasticsearch 与其他机器学习和人工智能技术相结合,创造出更具创新性的应用程序。

2. 用法介绍

以下展示如何使用检索器 API 进行数据检索。

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;

import java.io.IOException;

public class RetrieverAPIExample {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient client = createClient();

        SearchRequest searchRequest = new SearchRequest("your_index_name");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        // 使用检索器 API 相关的查询构建器(这里只是示例,实际使用可能需要更多配置)
        searchSourceBuilder.query(QueryBuilders.matchQuery("your_text_field", "your_search_term")); 

        // 添加高亮显示配置(可选,这里只是示例)
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("your_text_field");
        searchSourceBuilder.highlighter(highlightBuilder);

        searchRequest.source(searchSourceBuilder);

        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        handleSearchResponse(searchResponse);

        client.close();
    }

    private static RestHighLevelClient createClient() {
        // 创建并返回 RestHighLevelClient 实例的代码,这里省略详细实现
        return null;
    }

    private static void handleSearchResponse(SearchResponse searchResponse) {
        // 处理搜索结果的代码,这里省略详细实现
        System.out.println("Search results with Retriever API: " + searchResponse);
    }
}

在这个示例中,我们通过 SearchRequestSearchSourceBuilder 构建搜索请求。使用 matchQuery 方法(这是检索器 API 中一种常见的查询方式)在指定的索引 your_index_nameyour_text_field 字段中搜索关键词 your_search_term。我们还添加了一个简单的高亮显示配置,用于突出显示搜索结果中的关键词。最后执行搜索请求并处理结果。同样,实际应用中需要完善 createClienthandleSearchResponse 方法的实现。

五、可观察性增强:优化日志分析与监控

1. 可观察性增强功能概述

Elastic ObservabilityElasticsearch 8.16.0 中得到了显著的增强在处理大规模数据复杂系统时,日志分析和监控是确保系统稳定运行和性能优化的关键环节。

新的可观察性增强功能基于搜索的相关性,能够更准确地从海量日志数据中提取有价值的信息。通过不折不扣的数据保留策略,确保数据的完整性,为后续的分析和故障排查提供了坚实的基础。同时,改进的运营效率和成本控制,使得企业可以在不增加过多资源投入的情况下,获得更优质的日志分析服务。

此外,支持 Amazon Bedrock 集成是一个重要的亮点。对于那些基于 Amazon Bedrock 构建的大型语言模型(LLM),Elasticsearch 现在可以提供全面的监控功能。这意味着开发者和运维人员可以实时监控 LLM 的运行状态、性能指标等,及时发现并解决潜在问题。

2. 用法介绍

以下是一个简单的 Java 代码示例,用于查询 Elasticsearch 中的日志数据(这里只是一个简单的示例,实际的日志查询和监控可能更复杂)。

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;

public class LogQueryExample {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient client = createClient();

        SearchRequest searchRequest = new SearchRequest("your_log_index_name");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        // 根据特定条件查询日志(这里只是示例,实际查询条件可能更复杂)
        searchSourceBuilder.query(QueryBuilders.termQuery("log_level", "ERROR")); 

        searchRequest.source(searchSourceBuilder);

        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        handleSearchResponse(searchResponse);

        client.close();
    }

    private static RestHighLevelClient createClient() {
        // 创建并返回 RestHighLevelClient 实例的代码,这里省略详细实现
        return null;
    }

    private static void handleSearchResponse(SearchResponse searchResponse) {
        // 处理搜索结果的代码,这里省略详细实现
        System.out.println("Log query results: " + searchResponse);
    }
}

在这个示例中,我们创建了一个针对日志索引 your_log_index_name 的搜索请求。通过 termQuery 方法查询日志级别为 ERROR 的日志记录。这只是一个简单的日志查询示例,实际的监控和分析场景可能需要更复杂的查询条件、聚合操作等。在实际应用中,需要完善 createClienthandleSearchResponse 方法。

六、云资产保护新特性

1. SIEM 功能介绍

在云计算环境中,数据的安全性是重中之重。Elasticsearch 8.16.0 引入了强大的 SIEMSecurity Information and Event Management)功能。SIEM 是一种将安全信息管理和事件管理相结合的技术,它能够实时收集、分析和关联来自各种安全设备和应用程序的日志数据。

Elasticsearch 中,SIEM 功能通过整合安全相关的数据,为用户提供了一个全面的视角来监控和保护云资产。它可以检测到潜在的安全威胁,如恶意攻击未经授权的访问等,并及时发出警报。这一功能在解决云保护和上下文调查问题方面表现卓越,因为它能够将安全事件与相关的上下文信息(如用户行为、网络活动等)关联起来。

2. 用法介绍

以下代码演示如何使用 Elasticsearch 的 SIEM 功能来查询安全相关的事件:

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;

public class SIEMSample {
    public static void main(String[] args) throws IOException {
        // 假设已经创建了 RestHighLevelClient 实例
        RestHighLevelClient client = createClient(); 

        SearchRequest searchRequest = new SearchRequest("your_security_index_name");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        // 使用 QueryBuilders 构建查询条件,这里查询特定类型的安全事件
        sourceBuilder.query(QueryBuilders.termQuery("event_type", "security_alert"));

        searchRequest.source(sourceBuilder);

        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);

        // 处理搜索结果
        processSearchResponse(response); 

        client.close();
    }

    private static RestHighLevelClient createClient() {
        // 这里是创建 RestHighLevelClient 的代码,根据你的 Elasticsearch 配置进行修改
        // 示例代码可能如下:
        // RestHighLevelClient client = new RestHighLevelClient(
        //         RestClient.builder(new HttpHost("localhost", 9200, "http")));
        return null; 
    }

    private static void processSearchResponse(SearchResponse response) {
        // 在这里解析搜索结果,获取安全事件信息
        // 例如,可以遍历命中的文档并打印相关字段
        response.getHits().forEach(hit -> {
            System.out.println("Security event: " + hit.getSourceAsString());
        });
    }
}

在上述代码中,我们首先创建了一个SearchRequest对象,指定要查询的索引(这里假设你已经将安全相关的数据存储在名为your_security_index_name的索引中)。然后,使用SearchSourceBuilder构建查询条件,通过QueryBuilders.termQuery来查询特定类型(security_alert)的安全事件。最后,使用RestHighLevelClient执行查询并处理结果。请注意,在实际使用中,需要根据你的 Elasticsearch 环境正确配置RestHighLevelClient的创建过程。

七、本地部署简化特性

1. start-local 脚本解析

Elasticsearch 8.16.0 为本地开发带来了极大的便利,通过start-local脚本,用户可以在短短几分钟内就在笔记本电脑上完成本地部署。这个脚本封装了一系列复杂的配置和启动步骤,使得即使是对 Elasticsearch 部署不太熟悉的开发者也能轻松上手。

当你运行start-local脚本时,它会自动处理诸如环境变量设置依赖检查和服务启动等任务。这意味着你无需手动配置大量的参数,也不需要担心复杂的安装过程,就可以快速启动 Elasticsearch 实例,开始进行本地开发和测试。

2. 用法介绍

以下是一个简单的 Java 代码示例,用于在本地启动 Elasticsearch 后连接并执行一个简单的索引创建操作:

import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;

public class LocalDeploymentSample {
    public static void main(String[] args) throws IOException {
        // 使用 start - local 脚本启动 Elasticsearch 后,创建 RestHighLevelClient 连接
        RestHighLevelClient client = new RestHighLevelClient(
                // 根据本地启动的 Elasticsearch 配置修改主机和端口
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        CreateIndexRequest request = new CreateIndexRequest("local_test_index");
        try {
            CreateIndexResponse createIndexResponse = client.admin().indices().create(request, RequestOptions.DEFAULT);
            if (createIndexResponse.isAcknowledged()) {
                System.out.println("Index created successfully.");
            } else {
                System.out.println("Index creation failed.");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            client.close();
        }
    }
}

在这个示例中,我们首先创建了一个RestHighLevelClient对象,连接到本地运行的 Elasticsearch 实例(假设start - local脚本已经成功启动 Elasticsearch,并且默认监听在localhost:9200)。然后,我们创建了一个CreateIndexRequest对象,指定要创建的索引名称为local_test_index。通过client.admin().indices().create方法执行索引创建操作,并根据响应结果判断索引是否创建成功。最后,关闭RestHighLevelClient连接。

八、内存优化特性

1. 新内存分配算法介绍

Elasticsearch 8.16.0 在内存管理方面进行了重大优化,引入了一种全新的内存分配算法。这种算法能够更加智能地根据系统的资源状况数据的访问模式来分配内存

传统的内存分配方式可能会导致内存资源的浪费或者在处理大规模数据时出现内存不足的情况。新的算法通过动态分析索引数据的使用频率数据大小等因素,合理地分配内存块。 例如,对于频繁访问的数据,它会优先分配更多的内存缓存,以提高查询性能;而对于不常使用的数据,则会适当减少其占用的内存空间。

2. 高效数据结构解析

除了新的内存分配算法,Elasticsearch 8.16.0 还采用了更高效的数据结构来存储索引数据。这些数据结构经过精心设计,能够在减少内存占用的同时,保持快速的数据读写能力。

新的数据结构在存储索引数据时,通过对数据进行压缩和优化存储布局,降低了数据在内存中的冗余。例如,对于相似的数据类型,它们会采用更紧凑的存储方式,避免了不必要的内存开销。这不仅提高了内存的利用率,还加快了查询和分析操作的速度,尤其是在处理大规模数据集时效果更为显著。

3. 用法介绍

以下是一个简单的 Java 代码示例,用于演示在内存优化后的 Elasticsearch 中进行数据索引和查询操作:

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class MemoryOptimizationSample {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        // 准备要索引的数据
        Map<String, Object> data = new HashMap<>();
        data.put("name", "example_document");
        data.put("value", "This is an example document for memory optimization test.");

        IndexRequest indexRequest = new IndexRequest("memory_optimized_index");
        indexRequest.source(data, XContentType.JSON);

        client.index(indexRequest, RequestOptions.DEFAULT);

        SearchRequest searchRequest = new SearchRequest("memory_optimized_index");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.matchQuery("name", "example_document"));
        searchRequest.source(sourceBuilder);

        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
        response.getHits().forEach(hit -> {
            System.out.println("Found document: " + hit.getSourceAsString());
        });

        client.close();
    }
}

在这个示例中,我们首先创建了一个RestHighLevelClient连接到本地的 Elasticsearch 实例。然后,我们准备了一个简单的文档数据,并使用IndexRequest将其索引到名为memory_optimized_index的索引中。在索引过程中,Elasticsearch 8.16.0 的内存优化特性会自动发挥作用,根据新的内存分配算法和数据结构来存储数据。

接着,我们创建了一个SearchRequest对象,并使用SearchSourceBuilder构建了一个查询条件,通过QueryBuilders.matchQuery来查询名称为example_document的文档。当执行查询操作时,内存优化后的 Elasticsearch 能够更高效地利用内存资源来快速定位和返回结果。最后,我们遍历查询结果并打印相关信息。

九、参考资料文献

  1. Elasticsearch 8.16.0 发布说明
  2. What’s new in 8.16
  3. Elasticsearch 官方文档
  4. 相关技术论文和研究报告(可根据 Elasticsearch 官方推荐或相关学术数据库查找)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/917247.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql-DQL条件查询

文章目录 条件查询比较运算符逻辑运算符范围like 关键字排序单列顺序组合排序 聚合函数分组基本的分组流程参数的区别 limit 语句limit 语法格式limit 的使用场景 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Mysql专栏&#xff1a;点击&#xff01; ⏰…

华为云租户网络-用的是隧道技术

1.验证租户网络是vxlan 2.验证用OVS 2.1控制节点VXLAN 本端ip&#xff08;local ip&#xff09;192.168.31.8 2.2计算节点VXLAN 本端ip&#xff08;local ip&#xff09;192.168.31.11 计算节点用的是bond0做隧道网络 2.3查看bond文件是否主备模式

go 集成swagger 在线接口文档

安装swaggo go install github.com/swaggo/swag/cmd/swaglatest 编写swag import ("github.com/gin-gonic/gin""goWeb/internal/service""goWeb/model/response" )// UserRouter 路由 func UserRouter(ctx *gin.RouterGroup) {ctx.GET("/…

《Python网络安全项目实战》项目6 编写密码工具程序

《Python网络安全项目实战》项目6 编写密码工具程序 项目6 编写密码工具程序任务6.1 猜数字游戏任务描述任务分析任务实施6.1.1 编写基本的猜数字程序6.1.3 测试并修改程序6.1.4 给程序增加注释 任务拓展任务实施6.2.1 生成随机密码6.2.4 菜单功能 相关知识1. 密码字典2. 密码字…

IQ Offset之工厂实例分析

有个产品 其方块图如下: FEM全名为Front End Module 详情可参照这篇 [1] WIFI前端模块的解析 这边就不赘述 而在工厂大量生产时 有一块板子 其Chain1的EVM Fail 分析Log后 发现其IQ Offset的值 比Chain2/Chain3/Chain4 还要来得差 请问 问题是出在收发器? 还是…

音视频入门基础:MPEG2-TS专题(4)——使用工具分析MPEG2-TS传输流

一、引言 有很多工具可以分析MPEG2-TS文件/流&#xff0c;比如Elecard Stream Analyzer、PROMAX TS Analyser、easyice等。下面一一对它们进行简介&#xff08;个人感觉easyice功能更强大一点&#xff09;。 二、Elecard Stream Analyzer 使用Elecard Stream Analyzer工具可以…

任务调度工具Spring Test

Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 作用&#xff1a;定时自动执行某段Java代码 应用场景&#xff1a; 信用卡每月还款提醒 银行贷款每月还款提醒 火车票售票系统处理未支付订单 入职纪念日为用户发送通知 一.…

ORB-SLAM2 ---- Tracking::TrackWithMotionModel()

文章目录 一、函数作用二、函数讲解三、函数代码四、调用的函数1. Tracking::UpdateLastFrame()1&#xff09;. 函数讲解2&#xff09;. 函数代码 2. ORBmatcher::SearchByProjection()1&#xff09;. 函数讲解2&#xff09;. 函数代码 3. Optimizer::PoseOptimization(Frame *…

10月月报 | Apache DolphinScheduler进展总结

各位热爱 Apache DolphinScheduler 的小伙伴们&#xff0c;社区10月份月报更新啦&#xff01;这里将记录 DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度Merge之星 感谢以下小伙伴10月份为 Apache DolphinScheduler 所做的精彩贡献&#xff08;排…

第5章-总体设计 5.3 硬件架构设计

5.3 硬件架构设计 1.哪些类型的产品需要架构设计&#xff1f;2.硬件架构师到底做什么&#xff1f;&#xff08;1&#xff09;理解需求和业务模型的情况。&#xff08;2&#xff09;背板设计&#xff0c;既需要考虑业务数据交换能力&#xff0c;也需要考虑子模块的管理监控能力。…

深度学习工具和框架详细指南:PyTorch、TensorFlow、Keras

引言 在深度学习的世界中&#xff0c;PyTorch、TensorFlow和Keras是最受欢迎的工具和框架&#xff0c;它们为研究者和开发者提供了强大且易于使用的接口。在本文中&#xff0c;我们将深入探索这三个框架&#xff0c;涵盖如何用它们实现经典深度学习模型&#xff0c;并通过代码…

windows 安装Ubuntu 后如何使用

windows 安装Ubuntu 后如何使用 youtube链接 https://www.youtube.com/watch?vPaEcQmgEz78哔哩哔哩视频 https://www.bilibili.com/video/BV1tW42197za/?spm_id_from333.999.0.0两个视频是一样的安装Ubuntu 安装docker的教程&#xff0c;不执行docker的安装即可 安装完毕后…

IDEA leetcode插件代码模板配置,登录闪退解决

前言 最近换电脑&#xff0c;配置idea时和原来的模板格式不一样有点难受&#xff0c;记录一下自己用的模板&#xff0c;后期换电脑使用&#xff0c;大家也可以使用&#xff0c;有更好的地方可以分享给我~ IDEA leetcode插件代码模板配置,登录闪退解决 前言1 下载IDEA leetcode…

kubesphere环境-本地Harbor仓库+k8s集群(单master 多master)+Prometheus监控平台部署

前言&#xff1a;半月前在公司生产环境上离线部署了k8s集群Victoria Metrics(二开版)自研版夜莺 监控平台的搭建&#xff0c;下面我租用3台华为云服务器演示部署kubesphere环境-本地Harbor仓库k8s集群&#xff08;单master节点 & 单master节点&#xff09;Prometheus监控部…

Node.js | npm下载安装及环境配置教程

前言&#xff1a; npm 是 Nodejs 下的包管理器&#xff0c;在下载 Node.js 后自动安装&#xff0c;因此本文同时适合 Node.js / npm 的下载安装及环境配置。 一、软件安装 Node.js中文网官网下载页&#xff1a;Node.js 中文网 (nodejs.com.cn) 1&#xff09;进入下载页&#xf…

C++ 的发展

目录 C 的发展总结&#xff1a;​编辑 1. C 的早期发展&#xff08;1979-1985&#xff09; 2. C 标准化过程&#xff08;1985-1998&#xff09; 3. C 标准演化&#xff08;2003-2011&#xff09; 4. C11&#xff08;2011年&#xff09; 5. C14&#xff08;2014年&#xf…

游戏引擎学习第14天

1. 为什么关注内存管理&#xff1f; 内存分配是潜在的失败点&#xff1a; 每次进行内存分配&#xff08;malloc、new等&#xff09;时&#xff0c;都可能失败&#xff08;例如内存不足&#xff09;。这种失败会引入不稳定性或不可预测性&#xff0c;需要额外的错误处理逻辑。 …

QT6学习第一天

QT6安装和示例运行 QT介绍QT特点QT开发框架QT Quick和QML介绍Qt Widgets和Qt QuickQT6下载安装QT Creator介绍QT Creator界面介绍 QT介绍 Qt是一个跨平台的应用程序和UI开发框架&#xff0c;可用于桌面、嵌入式和移动平台的应用程序和用户界面的开发。 使用Qt只需一次性开发应…

一文详细深入总结服务器选型

1. 题记&#xff1a; 服务器选型工作是项目规划检讨的一项非常重要的工作&#xff0c;本文详细深入总结服务器选型。 2. 服务器基础知识概览 2.1 服务器的定义与功能 2.1 .1 定义 服务器是一种高性能计算机&#xff0c;其设计目的是在网络中提供服务。它可以处理来自多个客…

打造旅游卡服务新标杆:构建SOP框架与智能知识库应用

随着旅游业的蓬勃兴起&#xff0c;旅游卡产品正逐渐成为市场的焦点。为了进一步提升服务质量和客户体验&#xff0c;构建一套高效且标准化的操作流程&#xff08;SOP&#xff09;变得尤为重要。本文将深入探讨如何构建旅游卡的SOP框架&#xff0c;并介绍如何利用智能知识库技术…