把document路由到shard(routing a document to a shard)

当你index一个document的时候,这个document被存储在一个单独的primary
shard上。ES是怎么知道一个document所属的shard的呢?当我们创建了一个新的document,ES是怎么知道这个document是应该存储在shard1上还是shard2上的呢?

这个进程不能是随机的,因为在将来的某个时候我们要检索这个document,事实上,这个存储是有一个简单的公式决定的:

shard = hash(routing) % number_of_primary_shards

这个routing的值任意的字符串,默认是document的_id,也能是一个用户设置的值,这个routing字符串通过一个hash函数生成一个数字,这个数字除以index中的primary
shard的数量,然后返回余数。这个余数是在0到number_of_primary_shards -
1这个范围之间的。告诉我们存储指定的document的shard的号码。

这个也解释了为什么primary shard只能在index创建的时候指定,而不能随意改变:如果primary
shard的数量有变化,以前所有的routing值都会失效,document将会再也找不到。

所有操作document的APIS(get,index,delete,bulk,update和mget)都有一个routing参数,这个参数可以定制document到shard的映射。一个定制的routing可以保证所有的document都被引用,例如,可以定制所有的document属于同一个user,并且存储在同一个shard。我们将会在Big
data - Designing for scale (TODO)
讨论你为什么会这么做。

原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/routing-value.html

时间: 2024-11-08 18:54:09

把document路由到shard(routing a document to a shard)的相关文章

ASP.NET路由[ASP.NET Routing]

ASP.NET路由[ASP.NET Routing] ASP.NET路由允许你在使用URL时不必匹配到网站中具体的文件,因为这个URL不必匹配到一个文件,你使用了描述用户行为且更容易被用户理解的URL. ASP.NET MVC框架和ASP.NET动态数据(Dynamic Data)扩展路由为MVC应用和动态数据应用增加了特色. 在不使用路由的ASP.NET应用中,一个新的请求会被映射到一个物理文件并由该文件处理这个请求,例如一个.aspx文件.例如,如下请求http://server/appli

winform中使用dsoframer提示"Unable to display the inactive document.Click here to reacitive the document."

在winform中使用dsoframer 1.3载入word文档,但是在axFramerControl1.Open("NPOI.docx");在axFramerControl1控件中却显示Unable to display the inactive document.Click here to reacitive the document. 遇到这种情况的解决办法有两种方式,一是代码实现设置控件属性,二是通过控件属性设置. `代码设置:axFramerControl1.Activati

How to determine sales Document item Category in sales order document Line item

How to determine sales Document item Category in sales order document Line item  ? Make new entries for the appropriate document type and usage indicator for the outcome that you have specified. To assign categories, perform the Customizing activity

MVC 路由检测组件 Routing Debugger

组件下载地址 haacked.com 1.在mvc项目中引入组件 2.配置route规则 public static void RegisterRoutes(RouteCollection routes) { //routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //忽略About页面,不能将它已到mapRoute后面,改方法不是有Route组件提供是System.Web.Mvc下的方法 //routes.IgnoreRoute(&qu

网络编码(Network Encoding)与多径路由(Multi-path routing)

传统的网络编码研究在以一个简单的例子阐述网络编码方案可以比传统的单路径多传输1.5比特.虽然要了解网络编码的现有研究成果需要概率论.信息论.图论等方面的知识,但感觉似乎这些还没有达到实用程度? 下面几个问题如何解决: 1.如何不知道网络拓扑的情况下"探测"之,并应用一个最佳的网络编码方案? 2.网络编码仅目前提出的那几种方案吗? 3.多源传输信道有何实际意义?既然"多源",这些源之间如何保证一致性和同步?难道应用量子纠缠的特性吗? 如果不考虑编码性能的最优,倒是可以

(转) SolrCloud之分布式索引及与Zookeeper的集成

http://blog.csdn.net/ebay/article/details/46549481 作者:Wang, Josh 一.概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库,Solr是以Lucene为基础实现的文本检索应用服务,SolrCloud是Solr4.0版本开发出的具有开创意义的基于Solr和Zookeeper的分布式搜索方案,主要思想是使用Zookeeper作为集群的配置信息中心.也可以说,SolrCloud是Solr的一种部署方式,除SolrClou

12.SolrCloud原理

转载自http://blog.csdn.net/u011026968/article/details/50336709 内容涉及:SolrCloud的基础知识.架构.索引创建和更新.查询.故障恢复.负载均衡.leader选举等的原理. 一.SolrCloud与Solr,lucene关系 1. solr与luence的关系 网上有这样的比喻: (1)  lucene是数据库的话,solr就是jdbc. (2)  lucene是jar,solr就是一个引用这些jar来写的搜索客户端.Solr是一个可

SolrCloud之分布式索引及与Zookeeper的集成

作者:Wang, Josh 一.概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库,Solr是以Lucene为基础实现的文本检索应用服务,SolrCloud是Solr4.0版本开发出的具有开创意义的基于Solr和Zookeeper的分布式搜索方案,主要思想是使用Zookeeper作为集群的配置信息中心.也可以说,SolrCloud是Solr的一种部署方式,除SolrCloud之外,Solr还可以以单机方和多机Master-Slaver方式进行部署.分布式索引是指当索引越来越

部分更新document(pritial update document)

updateAPI是以前说过的read和write操作的联合: 操作步骤: 1:客户端向node1发起请求. 2:node1想node3转发请求,node3是要查找的document的primary shard被分配的地方 3:node3从primary shard检索要查找的document,把_source中的对应的field的作出修改,然后重新插入到priymary shard,如果document被其他线程进行了修改,那么根据retry_on_conflict指定的次数,重复步骤3直到失