ElasticSearch底层原理解析

news/2025/1/15 12:25:29/

Elasticsearch(简称ES)是一个基于Lucene的开源、分布式、RESTful搜索引擎。它具备全文检索、结构化搜索、数据分析、复杂语言处理、地理位置处理以及对象关联分析等功能。ES的设计允许水平扩展,支持PB级别的数据,并且提供了近实时的搜索能力。

架构原理

ES的架构包括以下几个核心概念:

  1. 节点(Node):ES集群中的一个实例。
  2. 集群(Cluster):由多个节点组成,共同工作,共享数据,提供高可用性。
  3. 索引(Index):存储文档的集合,类似于数据库中的数据库。
  4. 分片(Shard):索引可以被分成多个分片,分片可以分布在集群的不同节点上,支持数据的水平扩展。
  5. 副本(Replica):每个分片可以有多个副本,提高数据的可用性和容错性。

写入数据流程

当数据写入ES时,会经过以下步骤:

  1. 客户端发送数据到任意节点,该节点成为协调节点(Coordinator Node)。
  2. 协调节点根据文档ID的哈希值,确定数据应该路由到哪个主分片。
  3. 主分片接收数据,并在内存中进行索引构建,同时将数据写入事务日志(Translog)以保证数据不丢失。
  4. 数据被刷新(Refresh)到磁盘上的Lucene索引段(Segment)中,此时数据可以被搜索到。
  5. 通过段合并(Segment Merging)优化存储和搜索性能。

检索数据流程

检索数据时,流程如下:

  1. 客户端发送搜索请求到任意节点,该节点成为协调节点。
  2. 协调节点将查询请求分发到所有相关的分片。
  3. 每个分片并行处理查询,并返回结果给协调节点。
  4. 协调节点聚合结果,并进行排序、分页等操作。
  5. 协调节点返回最终结果给客户端。

优势

  • 高可用性:通过分片和副本机制,即使部分节点故障,服务也不会中断。
  • 水平扩展:可以简单地添加更多节点来扩展存储和处理能力。
  • 高性能:并行处理查询请求,提高查询性能。
  • 容错性:副本机制确保数据的持久性和一致性。

总结

Elasticsearch通过其分布式架构,提供了一个强大、灵活且可扩展的搜索解决方案。它的设计哲学是简单性和易用性,同时隐藏了底层Lucene的复杂性。通过分片和副本机制,ES能够处理大规模数据集,并提供快速、准确的搜索结果。


http://www.ppmy.cn/news/1526001.html

相关文章

Computer Vision的学习路线

学习**Computer Vision(计算机视觉)**的过程中,可以按照以下步骤循序渐进地掌握基础知识、算法和实际应用。这个学习路线将涵盖从基础理论到前沿技术的各个层面。 1. 数学与基础知识 1.1 线性代数 计算机视觉中的图像处理和模型训练都依赖…

C++ 策略技术中的算法策略

C 策略技术中的算法策略 策略模式是一种设计模式,允许在运行时选择算法的行为。在C中,这可以通过模板和多态实现。策略类通常定义一个接口,各种不同的策略类实现这个接口,以提供具体的算法实现。 1. 常规范例:普通策略…

STM32 HAL freertos零基础(六)计数型信号量

1、计数型信号量 计数型信号量(Counting Semaphore)是另一种类型的信号量,它可以保持一个大于等于0的整数值,这个值表示可用资源的数量。本质上相当于队列长度大于1得队列。经典问题就是剩余车辆统计,出入车辆,车辆数据可以实时更新。 2、相关API函数 xSemaphoreCreat…

项目实战 (11)---搜索进度

目录 背景 相关技术 需要解决的问题 查询进度实时展示 描述 代码 python 后端 html JS 运行效果 查询逻辑结合 描述 代码 运行效果 总结与问题 背景 通过前面1-10,视频搜索系统的前后端及视频录入功能已经可以正常使用。但是我们清楚随着视频量的增加及客户搜…

【论文分享精炼版】 sNPU: Trusted Execution Environments on Integrated NPUs

今天在COMPASS分享了之前写的一个博客,做了进一步的提炼总结,大家可以看看原文~ 今天分享的论文《sNPU: Trusted Execution Environments on Integrated NPUs》来自2024年ISCA,共同一作为Erhu Feng以及Dahu Feng。并且, 这两位作…

C++基础面试题 | 什么是C++中的虚继承?

文章目录 回答重点菱形继承问题虚继承解决菱形继承问题虚继承的二义性解决 虚继承总结拓展知识:virtual关键字的用法1. 虚函数 (Virtual Function)2. 纯虚函数 (Pure Virtual Function)3. 虚析构函数 (Virtual Destructor)4. 虚继承 (Virtual Inheritance)5. 虚函数…

C实现对以太网lldp的解析的功能

以下是一种使用C语言实现对以太网LLDP&#xff08;链路层发现协议&#xff09;解析的示例代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/…

kafka mirror maker之实现两个kafka集群之间的数据同步

1 背景 现在因为消费方方和producer方位于不同的数据中心&#xff0c;所以公司使用了etyer数据集成平台作为中间媒介完成投送&#xff0c;类似mirror maker吧 2 介绍一下Kafka MirrorMaker Kafka MirrorMaker 是 Apache Kafka 提供的一个用于在不同 Kafka 集群之间复制数据的…