批量格式 - Elasticsearch 权威指南中文版

返回介绍

批量格式

发布于 2019-07-04 字数 1070 浏览 861 评论 0

为什么是奇怪的格式?

当我们在《批量》一章中学习了批量请求后,你可能会问:“为什么bulk API需要带换行符的奇怪格式,而不是像mget API一样使用JSON数组?”

为了回答这个问题,我们需要简单的介绍一下背景:

批量中每个引用的文档属于不同的主分片,每个分片可能被分布于集群中的某个节点上。这意味着批量中的每个操作(action)需要被转发到对应的分片和节点上。

如果每个单独的请求被包装到JSON数组中,那意味着我们需要:

  • 解析JSON为数组(包括文档数据,可能非常大)
  • 检查每个请求决定应该到哪个分片上
  • 为每个分片创建一个请求的数组
  • 序列化这些数组为内部传输格式
  • 发送请求到每个分片

这可行,但需要大量的RAM来承载本质上相同的数据,还要创建更多的数据结构使得JVM花更多的时间执行垃圾回收。

取而代之的,Elasticsearch则是从网络缓冲区中一行一行的直接读取数据。它使用换行符识别和解析action/metadata行,以决定哪些分片来处理这个请求。

这些行请求直接转发到对应的分片上。这些没有冗余复制,没有多余的数据结构。整个请求过程使用最小的内存在进行。

上一篇:批量请求

下一篇:搜索

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

目前还没有任何评论,快来抢沙发吧!