ElasticSearch 分片内部的原理

在集群内的原理, 我们介绍了分片, 并将它描述成最小的 ElasticSerch工作单元 。但是究竟什么是 一个分片,它是如何工作的? 在这个章节完后,下面你便会得到下面问题的答案。

(1)为什么搜索是近实时的?
(2)为什么文档的 CRUD (创建-读取-更新-删除) 操作是实时的?
(3)Elasticsearch 是怎样保证更新被持久化,在断电时也不丢失数据?

为什么搜索是近实时的?

关于近实时的定义:文档的变化并不是立即对搜索可见,但会在一秒之内变为可见。
1、作为用户,我们可以将请求发送到集群中的任何节点 ,包括主节点。 每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。
2、每个分片具有性能较高的倒排索引(相比B-tree更为优秀,trie字典树+FST压缩技术)
3、Lucene的段(segment)技术
4、关于一些消耗高昂query的缓存,和文档数较多的segment的缓存

关于第3点我们下面详细讨论下

索引与分片的区别

    容易被混淆的概念是,一个 Lucene 索引 我们在 Elasticsearch 称作分片 。 一个 Elasticsearch 索引是分片的集合。 当 Elasticsearch 在索引中搜索的时候, 它发送查询到每一个属于索引的分片(Lucene 索引),然后合并每个分片的结果到一个全局的结果集。
Elasticsearch 基于 Lucene这个库引入了按段搜索的概念。还增加了 提交点 的概念 — 一个列出了所有已知段的文件。

如图,例如此lucune索引包含了3个已知段(segmet)

你可能感兴趣的:(ElasticSearch,从入门到集群高可用)