ES索引和分片

1.为了将数据添加到ES,我们需要索引(index),索引是一个存储关联数据的地方。实际上,索引只是一个用来指定一个或多个分片的"逻辑命名空间"

2.一个分片(shard)是一个最小级别"工作单元",它只是保存了索引中的所有数据的一部分,每个分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。

3.分片是ES在进群中分发数据的关键,可以把分片想想成数据的容器。文档存储在分片中,然后分片分配到集群中的节点上。当集群扩容或缩小,ES将会自动在节点间迁移分片,以使集群保持平衡。

4.分片可以是主分片或者是复制分片,索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。

5.理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况:硬件存储的大小,文档的大小和复杂度、如何索引和查询你的文档,以及你期望的响应时间

6.复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供请求,比如搜索或者从别的shard取回文档。

7.当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整

一.下面是分片的详细解说:

1.我们能够发送请求给集群中任意一个节点。每个节点都有能力处理任意请求。每个节点都知道任意文档所在的节点

2.新建索引和删除请求都是写操作,它们必须在主分片上成功完成才能赋值到相关的复制分片上

3.在主分片和复制分片上成功新建、索引或删除一个文档必要的顺序步骤:

(1) 客户端给Node1 发送新建、索引或删除请求。

(2) 节点使用文档的_id确定文档属于分片0.转发请求到Node3,分片0位于这个节点上。

(3) Node3在主分片上执行请求,如果成功,它转发请求到相应的位于Node1和Node2的复制节点上。当所有的复制节点报告成功,Node3报告成功到请求的节点,请求的节点再报告给客户端。

(4)客户端接收到成功响应的时候,文档的修改已经被用于主分片和所有的复制分片,修改生效了。

二.ES分片复制

复制默认的值是sync。这将导致主分片得到复制分片的成功响应后才返回。

如果你设置replication为async,请求在主分片上被执行后就会返回给客户端。它依旧会转发给复制节点,单你将不知道复制节点成功与否。

上面的这个选项不建议使用。默认的sync复制允许ES强制反馈传输。async复制可能会因为在不等待其他分片就绪的情况下发送过多的请求而使ES过载。

原文地址:https://www.cnblogs.com/1234AAA/p/9380791.html

时间: 2024-10-08 03:57:38

ES索引和分片的相关文章

es中的分片查询方式

Es查询的时候默认是随机从一些分片中查询数据,可以通过配置让es从某些分片中查询数据 1:_local 指查询操作会优先在本地节点有的分片中查询,没有的话再在其它节点查询. 2:_primary:指查询只在主分片中查询 3:_primary_first:指查询会先在主分片中查询,如果主分片找不到(挂了),就会在副本中查询. 4:_only_node:指在指定id的节点里面进行查询,如果该节点只有要查询索引的部分分片,就只在这部分分片中查找,所以查询结果可能不完整.如_only_node:123在

到底什么是ES索引?

你会发现,其实在ES里面,索引扮演的角色其实并不是存储,而是"索引",看起来有点傻,但是其实我之前一直理解索引是存储,其实从命名上可以看出来,索引其实是分片的索引,分片的字典,记录了每个分片的位置,索引范围:当需要查询的时候,可以定位到对应的分片来进行数据操作:最后进行汇总.所以index本质作用就是记录分片:所谓查询,有向无环图(DAG)都是基于index来进行分析绘制的,然后基于该图下放数据操作. 原文地址:https://www.cnblogs.com/xiashiwendao/

ES学习之分片路由

本文主要内容: 1.路由一个文档到一个分片 2.新建.索引和删除请求 3.取回单个文档 4.局部单个文档 5.多文档模式 6.理解一下ES深度分页(from-size)的劣势 路由一个文档到一个分片 当索引一个文档的时候,文档会被存储到一个主分片中. Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片 1 还是分片 2 中呢? 首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了.实际上,这个过程是根据下面

Java创建ES索引实现

1.pom.xml文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifa

python--getitme\setitem 支持索引与分片

1.想要自己定义的python对象支持索引与分片操作就要重载__getitem__\__setitem__这两个方法. 2.__getitme__(self,index) 这里的index参数可能类型有两种int,slice.当它是int类型时对应索引操作,当它是slice时对应分片操作. 3.__setitem__(self,index,value) index意义同上,value代表着要设置成的值. 例子: #!C:\Install\Python27\python #!coding:utf-

Python第六天(字符串-索引和分片)

索引和分片 >>> wu = 'wuang' >>> wu[0] 'w' >>> wu[1] 'u' >>> wu[1:] 'uang' >>> wu[1:3] 'ua' >>> wu[-1] 'g' >>> wu[:-1] 'wuan' 索引: wu[i] 第一个元素的偏移为0 [0]:第一个元素 [-1]:最后一个元素 分片wu[i:j] 上边界(i)不包含 如果i没给出,默认

ES索引

Elasticsearch索引别名.Filtered索引别名.Template 在使用elasticsearch的时候,经常会遇到需要淘汰掉历史数据的场景. 为了方便数据淘汰,并使得数据管理更加灵活,我们经常会以时间为粒度建立索引,例如: 每个月建立一个索引:monthly-201709.monthly-201710.monthly-201711 每天建立一个索引:daily-20171015.daily-20171016.daily-20171017.daily-20171018 当不需要再继

【MongoDB】03、MongoDB索引及分片

一.MongoDB配置 mongodb配置文件/etc/mongodb.conf中的配置项,其实都是mongod启动选项(和memcached一样) [[email protected] ~]# mongod --help Allowed options: General options:   -h [ --help ]               show this usage information   --version                   show version inf

零基础学python-8.3 列表的索引、分片和矩阵

索引: 注意:如果超出长度,则报错 如果索引为负数,则取数的方向反转 >>> aList=['123',123,123.0] >>> aList[0] '123' >>> aList[2] 123.0 >>> aList[-2] 123 >>> aList[-3] '123' >>> aList[3] Traceback (most recent call last): File "<