elasticSearch理论篇—索引、节点、分片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticSearch理论篇—索引、节点、分片相关的知识,希望对你有一定的参考价值。
参考技术A传统我们检索文章,是逐个遍历找到对应关键词的位置;
而倒排索引,是通过分词策略,形成词与文章的映射关系表,这种词典+映射表即为倒排索引。
倒排索引的底层实现是基于:FST(Finite State Transducer)数据结构。
lucene [lu\'sen] 从4+版本后开始大量使用的数据结构是FST。FST有两个优点:
利用es的分片预分配。
不能,因为分片数是 文档路由算法 中重要的元素:
shard = hash(routing) % number_of_primary_shards
动态修改分片将意味着几乎重新索引文档数据,这是比仅仅将分片从一个节点复制到另一个节点更重量级的操作。
一个分片存在于单个节点,一个节点可以包含多个分片。
elasticSearch天然具有分布式的特征,实现水平扩容时通过 分片预分配 。在创建索引时,选择合适的分片数。
随着数据量的增加,可以动态的增加节点数,elasticSearch将会自动将分片分配到新增的节点上,当重新分配完成时,每个分片将会有接近至少两倍于之前的运算速度。
elasticSearch中新添加的索引默认被指定了5个主分片。这意味着我们最多可以将那个索引分散到5个节点上,每一个节点一个分片。
不能,一个分片并不是没有代价的。
es适当的预分配是好的,但是上千个分片就有些糟糕。
ElasticSearch推荐的最大JVM堆空间是30~32G, 所以把你的分片最大容量限制为30GB, 然后再对分片数量做合理估算. 例如, 你认为你的数据能达到200GB, 推荐你最多分配7到8个分片。
在开始阶段, 一个好的方案是根据你的节点数量按照1.5~3倍的原则来创建分片. 例如,如果你有3个节点, 则推荐你创建的分片数最多不超过9(3x3)个。当性能下降时,增加节点,ES会平衡分片的放置。
对于基于日期的索引需求, 并且对索引数据的搜索场景非常少. 也许这些索引量将达到成百上千, 但每个索引的数据量只有1GB甚至更小. 对于这种类似场景, 建议只需要为索引分配1个分片。如日志管理就是一个日期的索引需求,日期索引会很多,但每个索引存放的日志数据量就很少。
副本分片 可以实现高可用。当持有主分片的节点挂掉之后,一个副本分片将会晋升为主分片的角色。
在索引写入时,副本分片做着和主分片相同的工作。新文档首先被索引进主分片然后在同步到其他所有的副本分片。增加副本分片并不会增加索引容量。
副本分片可以服务于读请求,如果索引偏向查询,那么可以通过增加副本的数目来提升查询性能。但也要为此增加额外的硬件资源。
当使用上面配置时,每一个分片的副本分片数量为1个。
一个拥有两个主分片一份副本的索引可以在四个节点中横向扩展
Elasticsearch: 权威指南 » 数据建模 » 扩容设计 » 扩容的单元
面试官:Elasticsearch如何设计索引?满分答案来了
elasticsearch 设置多少分片合适
新年手打,24道进阶必备Elasticsearch 面试真题(建议收藏!)
以上是关于elasticSearch理论篇—索引、节点、分片的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch-尚硅谷(7. 进阶-下)学习笔记