ES搜索引擎的基本原理
Elasticsearch(简称ES)是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
1.分布式架构原理
Elasticsearch设计的理念就是分布式搜索引擎,实质上仍然是基于Lucene。在Elasticsearch中,存储数据的基本单位是索引,一个索引可以被认为是一个数据库实例,所有的数据都是基于索引开始的。一个索引可以被分割成多个shard,每个shard存储部分数据,这样做的好处在于,支持横向扩展,每个shard存储一部分数据,当数据增加的时候可以重新创建一个切割成多个的shard满足这个数据增加的情况。另外提高性能,数据分布在多个shard上,即多台服务器上,所有的操作都会在多台服务器上并行执行,提高防爆和性能。
2.数据存储和读取
在Elasticsearch中,索引中的数据实际是有多个备份,每个shard都有一个primaryshard,负责写入数据,还有几个replicashard。primaryshard写入数据之后,就会将数据同步到其他的replicashard上去。这种备份方案主要体现了高可用思想。如果某个机器宕机了,还有别的数据副本在别的机器上。如果master节点宕机了,那么会重新选举一个节点为master节点。如果非master节点宕机了,那么会由master节点让那个宕机节点上的primaryshard的身份转移到其他机器上的replicashard。
3.数据写入过程
Elasticsearch的写数据过程分为以下几个步骤:客户端选择一个es节点将数据发送过去,这个节点的数据就是coordinatingnode(协调节点);协调节点通过对数据进行Hash算法,并对文档数据进行路由,将请求转发给对应的节点(具有primaryshard);实际的节点上有一个primaryshard处理请求,然后将数据同步到replica节点上;协调节点发现primarynode和replicanode都搞定之后,就返回响应结果给客户端。
4.数据读取过程
Elasticsearch的读数据过程可以通过docid来查询,会根据docid进行hash,判断出来当时把docid分配到了其中shard上面去,从那个shard去查询。这种方式可以有效地提高查询效率。
总的来说,Elasticsearch通过分布式架构、数据备份、负载均衡等手段实现了高效、可靠的全文检索。
延伸阅读
参考资料为您提炼了 5 个关键词,查找到 39445 篇相关资料。