博客
关于我
elasticsearch学习四-ES原理
阅读量:193 次
发布时间:2019-02-28

本文共 2520 字,大约阅读时间需要 8 分钟。

Elasticsearch核心概念解析

1. 索引(Index)

一个索引是具有相似特征的文档的集合,用于提高数据的便捷性和搜索性能。例如,客户数据、产品目录和订单数据都可以各自形成一个索引。索引的名称必须全为小写字母,便于区分和管理。

索引的好处

  • 快速搜索:通过预先建立索引,可以显著提升搜索速度。例如,前面提到的字典目录就是通过索引实现快速查找的。
  • 高效管理:可以轻松地对索引进行增删查改操作,而无需逐一处理每个文档。

Elasticsearch索引的设计理念

一切设计都是为了提高搜索性能。这一点贯穿始终,决定了索引的最终目标和作用。

2. 索引类型(Type)

在一个索引中,可以定义一种或多种类型(Type)。类型是逻辑上的分类,主要由用户自定义。通常,一个类型用于管理具有共同字段的文档集合。不同版本的类型会有不同的变化。

不同版本的类型特点

  • 5.x版本:支持多种类型。
  • 6.x版本:只能有一种类型。
  • 7.x版本及以上:默认不再支持自定义索引类型,使用默认类型_doc

3. 文档(Document)

文档是存储和索引的基本单位,相当于数据库中的记录。可以是客户信息、产品描述或订单条目等。文档以JSON格式存储,JSON是互联网广泛使用的数据交换格式。

文档的存储特点

  • 在一个索引或类型中,可以存储任意数量的文档。
  • 文档的内容完全由用户定义,灵活性极大。

4. 字段(Field)

字段是文档数据的分类标识,类似于数据库中的字段。用于区分文档的不同属性。例如,name字段用于存储用户姓名,age字段用于存储年龄等。

5. 映射(Mapping)

映射用于定义字段的处理规则,如数据类型、默认值、分析器等。这些规则决定了Elasticsearch如何处理和存储文档数据,直接影响性能和可靠性。

映射的重要性

  • 定义字段的数据类型(如字符串、数字等)。
  • 设置默认值和分析器,确保数据格式和结构符合需求。
  • 优化搜索性能,提升检索效率。

6. 分片(Shard)

一个索引可以被划分为多个分片,每个分片是一个完整的“索引”,可以被分配到集群中的任意节点。分片的主要作用是:

  • 水平扩展:支持大规模数据存储,克服单节点硬件限制。
  • 分布式处理:允许并行操作,提升性能和吞吐量。

分片的特点

  • 分片之间是独立的,互不影响。
  • Elasticsearch自动管理分片的分布和负载均衡。

7. 副本(Replicas)

每个索引可以有多个副本分片,主要用于提高可用性和性能。副本的重要性体现在:

  • 数据冗余:保障数据不丢失,防止节点故障。
  • 提高吞吐量:搜索操作可以在多个副本上并行执行,提升处理能力。

8. 分片分配(Allocation)

分片分配是指将分片分配到集群中的具体节点,包括主分片和副本分片的位置决定。主分片负责存储文档,副本分片用于数据冗余和负载均衡。

系统架构

一个运行中的Elasticsearch实例称为节点,集群由多个节点组成,共同承担数据和负载压力。集群中的主节点负责管理集群范围内的所有变更,如索引创建、删除等。其他节点作为数据节点,负责存储和处理文档。

分布式集群

单节点集群

在一个单节点集群中创建索引时,所有分片都被分配到同一节点。例如,可以指定3个主分片和1个副本分片。

故障转移

单节点集群的主要缺点是单点故障。如果节点失效,数据可能丢失。因此,建议在集群中添加更多节点,确保高可用性。

水平扩容

通过增加节点数量,可以动态调整分片和副本分片的数量。例如,创建9个分片(3个主分片和6个副本分片),可以显著提升搜索性能。

应对故障

在集群出现故障时,Elasticsearch具有一定的容错机制。例如,当一个节点关闭时,新的主节点会自动选举,确保集群继续正常运行。

路由计算

文档存储在主分片中,搜索时会将请求转发到所有相关分片进行处理。路由计算基于文档的ID和分片数量,确保文档被正确定位。

分片控制

分片的控制涉及分片的创建、删除和管理。每个分片都有一个唯一的ID,用于区分和管理。副本分片可以在节点之间动态分配,确保数据的高可用性和平衡分布。

写流程

新建、索引和删除操作属于写操作,必须在主分片上完成后才会同步到副本分片。Elasticsearch通过协调节点管理这些操作,确保数据的一致性和高可用性。

读流程

搜索操作属于读操作,可以从主分片或副本分片中任意节点获取结果。Elasticsearch通过协调节点进行负载均衡,确保最佳性能。

更新流程

文档更新涉及读取和写入操作的结合。Elasticsearch通过版本号管理更新冲突,确保最新版本的文档被正确存储和检索。

多文档操作

mget和bulk API允许批量处理多个文档,提高操作效率。Elasticsearch通过协调节点分解和处理请求,确保高并发处理能力。

分片原理

分片是Elasticsearch的最小工作单元。倒排索引是实现全文搜索的关键技术,通过将文本转换为词条索引,实现快速搜索。

倒排索引的优势

  • 不变性:索引一旦写入不会改变。
  • 内存缓存优化:减少磁盘I/O,提升性能。
  • 支持按段搜索:段划分和合并优化搜索效率。

分片管理

分片管理包括分片合并和段提交。每秒自动刷新确保文档更新及时可用。通过定期提交和合并,保持索引的高效管理。

文档分析

文档分析涉及分词和词条标准化。Elasticsearch提供多种分析器,如标准分析器、简单分析器等,用户可以根据需求选择或自定义分析器。

分析器的作用

  • 提取词条:将文本拆分成独立的词条。
  • 词条标准化:确保词条格式一致,提升搜索准确性。
  • 特定语言支持:提供多种语言分析器,满足不同应用需求。

自定义分析器

通过配置字符过滤器、分词器和词条过滤器,可以创建自定义分析器,满足特定业务需求。例如,清除HTML标签,移除停止词等。

文档处理

文档处理涉及版本控制和冲突管理。Elasticsearch通过乐观并发控制确保变更无冲突,避免数据丢失。

版本控制方法

  • 内部版本号:基于文档的版本号。
  • 外部版本号:使用外部数据库的版本号进行控制。

通过合理选择和配置,可以确保系统的高可用性和数据一致性。

转载地址:http://nsci.baihongyu.com/

你可能感兴趣的文章
Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
查看>>
Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
查看>>
Network Sniffer and Connection Analyzer
查看>>
Nginx Location配置总结
查看>>
Nginx 反向代理解决跨域问题
查看>>
nginx 后端获取真实ip
查看>>
Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
查看>>
nginx 常用配置记录
查看>>
Nginx 我们必须知道的那些事
查看>>
nginx 配置~~~本身就是一个静态资源的服务器
查看>>
Nginx的是什么?干什么用的?
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NI笔试——大数加法
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
查看>>
NSSet集合 无序的 不能重复的
查看>>
nullnullHuge Pages
查看>>
Numpy如何使用np.umprod重写range函数中i的python
查看>>
oauth2-shiro 添加 redis 实现版本
查看>>