多文档模式(multi-document parrerns)

聚合操作模式(mget,bulk)APIS和单个操作和类似,不同的是,接受请求的node知道操作的document在那个shard上,他根据各个shard拆分总的multi-document请求到单个的multi-document,然后一起分发到各个node。

一旦负责请求的node从各个node收到响应,这个请求node就整理这些请求到一个响应体,返回给客户端。

下图是使用mget进行多文档检索:

步骤如下:

1:客户端发送mget请求到node1

2:node1根据shard拆分到多个multi-get请求,然后一起发送到相应的node中的primary或者replica
shard。一旦所有的相应都被node1收到,node1就把相应报告给客户端。

routing参数能设置到docs数组的每个document。preference参数能设置到顶级的mget请求中。

下图使用bulk进行document的修改:

下面列出在一个bulk中执行create,index,delete请求的必要步骤:

1:客户端向node1发送请求

2:node1根据shard构建bulk请求,转发到相对应的primary shard。

3:primary shard连续的执行每个动作,当每个动作都成功,primary
shard转发新的document(或删除的document)到他的replica shard,然后在去执行下一个动作。当所有的replica
shad都成功执行了所有的动作,各个node就会向requesting node作出成功的报告,然后requestiong
node向客户端发送成功报告。

bulk API也接受replication和consistency参数作为整个bulk请求的顶级参数,routing参数可以对每个请求设置。

为什么是这种格式?

当我们在Cheaper
in
bulk
学习Bulk请求的时候,你或许会问:为什么bulkAPI要对新的一行格式化一个换行符呢,而不是像mget一样包装到JSON的数组中?

回答这个问题之前,我们要解释一下背景:

每个bulk请求中的document也许是属于不同的primary
shard,请求的document或许要分配到cluster中的任意的node上,也就是说,bulk中的每个请求动作,都需要转发到正确的node中正确shard上。

如果单个的请求是被包装在JSON数组中,要做如下的事情:

1:解析JSON到一个数组(包括document的数据,或许还会很大)

2:查看每个请求,决定这个请求要到那个shard上

3:为每个shard的请求都创建一个数组

4:序列化这些数组到内部的格式

5:把请求发送到每个shard

这也能工作,但是需要更多的内存备份本质上一样的数据,并且要创建很多的数据结构,然后JVM要花费一定的性能回收这些垃圾。

ES建立了网络缓冲,原始请求数据到达就直接读取。他使用了换行符标记解析action/metadate决定那个shard应该处理这个请求。

原始数据被直接的转发到正确的shard。没有冗余数据,没有浪费的数据结构。整个请求进程实在一个很小的内存中进行处理的。

原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/distrib-multi-doc.html

多文档模式(multi-document parrerns),布布扣,bubuko.com

时间: 2024-07-30 00:19:02

多文档模式(multi-document parrerns)的相关文章

文档模式与IE浏览器模式

一.IE浏览器的兼容性视图 兼容性视图是微软为了兼容基于其它网页标准开发的网站,确保广大互联网用户在浏览网页时不至于受困于网页显示混乱的问题,而专门为IE8增加的一项实用功能.当IE8检测到某网站不兼容时,地址栏右侧就会出现兼容性视图按钮,只需轻轻一点,大部分网页显示就会正常了.(网页会以IE7的代码规范来显示) 它引入重要的两个概念便是“浏览器模式”和“文档模式”: 注:也可按F12进入开发人员工具来查看当前页面的浏览器模式和文档模式 二.文档模式 指定IE页面排版引擎根据哪一个版本的方式来解

DOCTYPE是什么鬼?文档模式又是什么鬼?

!DOCTYPE !DOCTYPE是什么: 在所有 HTML 文档中规定 DOCTYPE 是非常重要的,这样浏览器就能了解预期的文档类型, 告诉浏览器要通过哪一种规范(文档类型定义 DTD)解析文档(比如HTML或XHTML规范): !DOCTYPE声明不属于 HTML 标签:tag; 它是一条指令,告诉浏览器编写页面所用的标记的版本. HTML 4.01 中的 doctype 需要对 DTD 进行引用,因为 HTML 4.01 基于 SGML.而 HTML 5 不基于 SGML,因此不需要对

telerik 控件 SCRIPT5007: 无法获取未定义或 null 引用的属性“documentElement” (IE 文档模式)

IE对盒模型的渲染在 Standards Mode和Quirks Mode是有很大差别的,在Standards Mode下对于盒模型的解释和其他的标准浏览器是一样,但在Quirks Mode模式下则有很大差别,而在不声明Doctype的情况下,IE默认又是Quirks Mode.所以为兼容性考虑,我们可能需要获取当前的文档渲染方式.document.compatMode正好派上用场,它有两种可能的返回值:BackCompat和CSS1Compat.BackCompat:标准兼容模式关闭.浏览器客

【IE】浏览器模式与文档模式 及其开发中处理方式

原文:http://blog.csdn.net/neo_liu0000/article/details/7589731 什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和文本模式,对于这两个名词,综合相关文档解释如下: 浏览器模式(Browser Mode),用于切换IE针对该网页的默认文本模式.对不同版本浏览器的条件注释解析.决定请求头里userAgent的值.它在浏览器发出请求之前就已经确定,网站没有办法修改这个值.它代表的是用户以何种浏览器访问网站. 文本模式

JS魔法堂:精确判断IE的文档模式by特征嗅探

一.前言 苦逼的前端攻城狮都深受浏览器兼容之苦,再完成每一项功能前都要左顾右盼,生怕浏览器不支持某个API,生怕原生API内含臭虫因此判断浏览器类型和版本号成了不可绕过的一道关卡,而特征嗅探是继浏览器探测后另一利器处理上述问题. 二.何为特征嗅探 从前我们都是通过对navigator.userAgent或navigator.appName两个属性值进行特定字符串匹配和萃取来区分浏览器类型和获取版本号的.但随着IE8提供可选的文档兼容性模式设置和各种加壳浏览器的出现,导致无法通过navigator

全栈JavaScript之路( 二十二 )IE 专有扩展——文档模式

ie8 引入了一个新的概念,"文档模式" ,页面的文档模式决定了,可以使用什么功能.也就是说,"文档模式",决定你了你可以使用哪个级别的css,在javascript可以使用哪些API, 以及如何对待文档类型(doctype). 两种方式修改: 通过 meta 标签修改,<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> 在服务器端修改, res.

关于在IE浏览器中,文档模式为&quot;杂项&quot;即Quirks,position为absolute且页面有滚动条时设置right的问题

由于系统的html页面没有指定相应的DTD,即<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">或<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "ht

浅谈HTML文档模式

不知道爱多想的你有没有在编写HTML代码时思考过 <!DOCTYPE html> 或是这一长串看都看不懂的 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 的代码,它是做什么的,为什么要有这句话,这句话起什么作用,它和其他HTML代码有关吗?嘤嘤嘤我才不回告诉你在前端的面试题中会经常看到对这个知识点的提问,而我

X-UA-Compatible IE 浏览器默认文档模式设置

制作网页的时候,IE8浏览器浏览页面的时候,有时候文档模式默认是IE7,导致IE8兼容性不是非常好.出现IE7应该出现的模式. 解决的方法例如以下: 在X-UA-Compatible中可用的方法有: <meta http-equiv="X-UA-Compatible" content="IE=5" > <meta http-equiv="X-UA-Compatible" content="IE=7" >