ElasticSearch数据存储

日期:2017-06-20       浏览:759

es集群数据存储
  • 分配文档到不同的容器 或 分片 中,文档可以储存在一个或多个节点中
  • 按集群节点来均衡分配这些分片,从而对索引和搜索过程进行负载均衡
  • 复制每个分片以支持数据冗余,从而防止硬件故障导致的数据丢失
  • 将集群中任一节点的请求路由到存有相关数据的节点
  • 集群扩容时无缝整合新节点,重新分配分片以便从离群节点恢复
es在创建集群的时候默认初始化的分片是5个,可通过调用接口设置分片数量,一个分片对应一个Lucene实例,以及它本身就是一个完整的搜索引擎,文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。
Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
一个分片可以是 主 分片或者 副本 分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。
路由一个文档到一个分片的路由规则。
shard = hash(routing) % number_of_primary_shards
routing 是一个可变值,默认是文档的 id ,也可以设置成一个自定义的值。 routing 通过 hash 函数生成一个数字,然后这个数字再除以 numberofprimaryshards (主分片的数量)后得到 余数 。这个分布在 0 到 numberofprimary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置。
这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了。
在设置完分片后存储的文档会根据一定的算法将文档保存到某个分片内,分片下会存在多个副本,多个副本冗余存在该文档。
下次查询该文档时集群master会根据以上的算法和查询文档的ID定位到保存该文档的分片,分片再查询其下副本内的文档返回给master,最后返回客户端调用者。
扫码关注有惊喜

(转载本站文章请注明作者和出处 qbian)

暂无评论

Copyright 2016 qbian. All Rights Reserved.

文章目录