【es】索引数据的写入过程

1.索引数据的写入过程

索引数据的写入过程。
假设集群3个节点,一个索引有三个主分片,每个主分片有1个副本分片。
(1)节点node1接受一个写入请求。
(2)根据索引数据的路由规则计算当前文档应当被写入哪个主分片,假如此时路由到主分片P1,主分片P1在node3
上,传输模块把当前的请求转发到node3上进行写入。如果路由的主分片在当前节点上,则直接在当前节点写入。
(3)主分片P1写入完成后,把请求转发到node2上,将数据写入副本分片R1.如果主分片写入失败,返回False;
(4)向客户端写入报告写入的结果。

2.批量写入多个文档的步骤 
(1)假设node2接到一个批量写入文档的请求
(2)对写入的文档按照路由规则进行分组,有三个主分片,就会分为三组,每组包含对应
的主分片上需要写入的文档列表,并要把请求转发到每个主分片所在的节点上。
(3)在每个主分片上写入对应的文档,每个文档写入时,先写主分片再写入副本分片,直到3个组的文档全部
写入完毕。
(4)汇总每个节点上各个文档写入的结果并进行返回。

批量写入减少了请求次数,相比单个文档的请求写入效率大大增强。生产推荐使用批量写入。


2.6.索引数据的搜索过程 
写入数据总是先写主分片,查询时则采用轮询的方式进行分片的选择。
如果搜索数据时不带路由值,则需要选择包含整个索引数据的分片。
查询过程:
(1)node1接到一个搜索请求,该请求不包含路由值,接到请求的节点成为协调节点。
(2)选择搜索要用的分片,假如本次选择P0/P1/P2,由于p1在node3节点上,需要使用传输模块把
搜索请求转发到node3上。
(3)在选择的每个分片上进行搜索,默认情况下,每个分片最多会搜索出匹配的前10条记录作为
局部结果,局部结果会交给协调节点node1;
(4)协调节点node1汇总这30条记录,按照搜索请求的参数进行排序,默认返回的是全局结果的前10条数据。

3.当搜索请求带有路由值
增加副本分片并不能提高搜素的性能,因为搜索用到的分片数并未减少。
使用路由条件搜索减少了搜索请求要用到的分片数,可以明显提升搜索性能。

可以使用分配分配的感知和分配分配的过滤干预分配分配的结果,分片分配的感知可以
把集群分成不同的区域,一个分片和它的副本分片不能分配到同一区域的节点上。
分片分配的过滤允许配置索引分片可以分配到哪些节点及不能分配到哪些节点。


PUT /my_index/_doc/1?routing=month 会将文档存储在以月份为路由值的分片上。
‌查询时指定路由‌:在执行搜索时,也可以通过URL参数?routing=指定值来指定路由值。例如:
GET /my_index/_search?routing=month 会在指定的月份分片上执行搜索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值