ElasticSearch 源码分析一 基本原理

本文深入探讨Elasticsearch的存储机制,解析其如何基于Lucene实现分布式搜索和分析。介绍了核心概念如Cluster、Node、Shards、Replicas,以及分布式算法和写请求、读请求的流程。同时,详细阐述了不可变倒排索引、动态索引、近实时搜索、持久化变更以及段合并等关键技术,展示了Elasticsearch高效处理大数据的秘诀。
摘要由CSDN通过智能技术生成

一、背景
Elasticsearch是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。本文主要介绍实现分布式搜索和分析的基础–存储,好的存储设计在根本上决定了查询的性能。

es的存储本质上是采用了lucene全文索引,在其基础上实现了分布式功能。

几个基本概念:

Cluster:集群,一个或多个节点的集合,通过名字唯一标识
Node:节点,组成集群的服务单元,保存数据并具有索引和搜索的能力,通过名字唯一标识
Shards: 分片 ,将索引分为多个块,每块叫做一个分片。索引定义时需要指定分片数且不能更改,每个分片都是一个功能完整的Index,分片带来规模上(数据水平切分)和性能上(并行执行)的提升
Replicas:复制分片,对主分片的复制称为复制分片,索引定义时需指定复制分片数(大于等于0)且可以更改,复制分片可以提供节点失败时的高可用能力,同时能够提升搜索时的并发性能(搜索可以在全部分片上并行执行)
Index:索引,具有相似特点的文档的集合,可以对应为关系型数据库中的数据库,通过名字在集群内唯一标识(必须全部小写)
Type:类别,索引内部的逻辑分类/分区,可以对应为关系型数据库中的表,通过名字在Index内唯一标识
Document:文档,能够被索引的最小单位,JSON格式,属于一个索引的某个类别中,从属关系为: Index -> Type -> Document,通过id 在Type 内唯一标识
 

二、分布式实现
2.1分布式算法
shard = hash(routing) % number_of_primary_shards
以上是路由文档到分片的算法,routing值是一个任意字符串,它默认是_id但也可以自定义。这个routing字符串通过哈希函数生成一个数字,然后除以主切片的数量得到一个余数(remainder),余数的范围永远是0到number_of_primary_shards - 1,这个数字就是特定文档所在的分片。

这也解释了为什么主分片的数量只能在创建索引时定义且不能修改:如果主分片的数量在未来改变了,所有先前的路由值就失效了,文档也就永远找不到了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值