美文网首页Elasticsearch
Elasticsearch 批量操作bulk

Elasticsearch 批量操作bulk

作者: 菜花_Q | 来源:发表于2018-04-23 12:33 被阅读61次

批量操作bulk

介绍bulk批量操作API

为了实现多个文档的create、index、update或delete。

官网文档:Bulk API | Elasticsearch Reference [6.2] | Elastic

请求体格式

#请求体格式如下:

{action:{ metadata}}\n

{request body}\n

{action:{metadata}}\n

{request body}\n

...

#\n是换行的转义符号,bulk通过换行识别每一个请求数据,不换行bulk无法区分。json数据不可美化展示。(如图:不能美化展示),因为美化展示的话,就会有多余的换行,bulk无法识别。

为什么是这样的请求体格式:和Elasticsearch的架构设计有关,Elasticsearch的数据是分片的,分片分布在每个节点上,如果请求的数据不换行,会消耗很大的资源解析数据,如果批量操作的数据很大,所需要的内存和cpu资源会很高,不符合Elasticsearch实时快速的特点,Elasticsearch通过换行,在网络缓冲区中,一行一行读取数据,能够更加快速和低消耗的处理每个请求

action

例:{"delete":{"_index":"library","_type":"books","_id":"1"}}

不能美化展示、

#多重模式

#批量操作bulk

POST /library/books/_bulk

{ "index": {"_id":1}}

{"title":"Elasticsearch: The Definitive Guide","price":5}

{"index": {"_id":2}}

{"title":"The Elasticsearch cookbook","price":15}

{"index":{"_id":3}}

{"title":"Elasticsearch Blueprints","price":9}

{"index":{"_id":4}}

{"title":"Thinking in Python","price":22}

{"index":{"_id":5}}

{"title":"Thinking in Java","price":7}

GET /library/

GET /library/books/_mget

{

    "ids": ["1","2","3","4","5"]

}

#当然还可以有delete,update等操作

#注意delete下面没有具体的request body

POST /library/books/_bulk

{"delete":{"_index":"library","_type":"books","_id":"1"}}

{"create":{"_index":"music","_type":"classical","_id": "1"}}

{"title": "Ave Verum Corpus" }

{"index":{"_index": "music","_type": "classical"}}

{"title":"Litaniac de Venerabili Altaris Sacromento"}

{"update": {"_index": "library","_type":"books","_id":"2"}}

{"doc":{"price":"18"}}

GET /library/books/1

GET /library/books/_mget

{

    "ids": ["1","2","3","4","5"]

}

bulk处理文档大小的最佳值

数据加载在每个节点里的RAM里

请求的数据超过一定的大小,那bulk的处理性能就会降低

文档数据大小跟硬件配置、文档复杂度,以及当前集群的负载有关

如何确定文档数据的大小

在实际环境当中,慢慢增加数据量,然后观察集群性能的变化,比如可以根据当前集群的情况,依次先处理5000个文档,如果没有什么大问题,可以在增加5000,直到开始发现性能有所下降为止,在操作的时候,最好通过,插件,监控仪表数据综合判断

相关文章

网友评论

    本文标题:Elasticsearch 批量操作bulk

    本文链接:https://www.haomeiwen.com/subject/wuvklftx.html