主要知识点

1、document路由到shard的理解及原理

2、路由算法:shard = hash(routing) % number_of_primary_shards

3、routing值(_id or custom routing value)

4、primary shard创建之后不可变的原因

 
 

一、document路由到shard理解及原理

在es中,一个index会被分片,一个index中存在很多document,这个document存放在不同的shardK ,而一个document只能存在于一个primary shard中,这样,当客户端创建一个document并存入es时,es内部就需要决定这个document存于那一个primary shard,这就是es中的document 路由分发。

 
 

二、路由算法

shard = hash(routing) % number_of_primary_shards

 
 

举个例子,一个index有3个primary shard,分别是P0,P1,P2

1、每次增删改查一个document的时候,都会带过来一个routing number,默认就是这个document的_id(可能是手动指定,也可能是自动生成)。假设routing = _id,_id=1

2、es会将这个routing值,传入一个hash函数中,产出一个routing值的hash值,假设hash(routing) = 21

3、然后将hash函数产出的值对这个index的primary shard的数量求余数,21 % 3 = 0

这样,这次这个document就放在P0上。

 
 

决定一个document在哪个shard上,最重要的一个值就是routing值,默认是_id,也可以手动指定,相同的routing值,产出的hash值一定是相同的。

 
 

三、routing值(_id or custom routing value)

默认的routing就是_id,也可以在发送请求的时候,手动指定一个routing value,比如说:put /index/type/id?routing=user_id,这样就手动指定以user_id作为routing值。

手动指定routing value是很有用的,可以保证某一类document一定被路由到一个shard上去,那么在后续进行应用级别的负载均衡,以及提升批量读取的性能的时候是很有帮助的。

 
 

四、primary shard创建之后不可变的原因

假设,原index在创建时指定primary shard的值为3,分别是P0,P1,P2,某一个docment的routing值是1,该routing的hash值为21,这样这个document就存放于P0这个primary shard 中。如果primary shard 的值可以改变,假设变为4,要查询这个document时,根据shard = hash(routing) % number_of_primary_shard(21%4=1),就会到p1这个shard去查找,当然查找不到,这就间接导致了数据丢失。

 
 

29.es路由原理的更多相关文章

  1. Elasticsearch由浅入深(六)批量操作:mget批量查询、bulk批量增删改、路由原理、增删改内部原理、document查询内部原理、bulk api的奇特json格式

    mget批量查询 批量查询的好处就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的 ...

  2. es倒排索引原理解析

    倒排索引原理 普通的存储方式是给每个文档编一个序号 然后让这个序号对应单个文档的所有内容  如果用这样的方式查找   当需要查找某个单词的时候需要遍历所有的文档集合 查找文档的效率会非常的慢 2.基本 ...

  3. ASP.NET MVC 5 Web编程2 -- URL映射(路由原理)

    本章将讲述ASP.NET MVC5 的路由原理,即URL映射机制. 简单点就是解释:为什么MVC在浏览器输入地址就能访问到类(或类中的方法)?这是怎么做到的?我自己可以通过.NET写出一个自己的MVC ...

  4. Web APi入门之Self-Host寄宿及路由原理(二)

    前言 刚开始表面上感觉Web API内容似乎没什么,也就是返回JSON数据,事实上远非我所想,不去研究不知道,其中的水还是比较深,那又如何,一步一个脚印来学习都将迎刃而解. Self-Host 我们知 ...

  5. Linux数据包路由原理、Iptables/netfilter入门学习

    相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wik ...

  6. js 哈希路由原理实现

    在 js 中,有一种方法,可以在不刷新页面的情况下,页面的内容进行变更,ajax 是一种,这里介绍另一种,就是 哈希路由原理 先看一个简单的路由和页面内容关联的例子,要实现两个功能: 1.1. 浏览器 ...

  7. vue路由原理剖析

    单页面应用(SPA)的核心之一是: 更新视图而不重新请求页面, 实现这一点主要是两种方式: 1.Hash: 通过改变hash值 2.History: 利用history对象新特性(详情可出门左拐见:  ...

  8. Web APi入门之Self-Host寄宿及路由原理

    前言 刚开始表面上感觉Web API内容似乎没什么,也就是返回JSON数据,事实上远非我所想,不去研究不知道,其中的水还是比较深,那又如何,一步一个脚印来学习都将迎刃而解. Self-Host 我们知 ...

  9. IP路由原理

    IP路由原理 一.什么是路由 路由是指导IP报文发送的路径信息. 二.路由表的构成 路由表是路由器转发报文的判断依据 三.路由器单跳操作 四.路由表查找规则 1.选择度量值小的进行转发 2.永远将下一 ...

随机推荐

  1. POJ2417 Baby-Step-Gaint-Step 算法

    考虑一个问题:A^x%p=B,给定A,B,p,求x的最小非负整数解. 在p是质数的情况下,这个问题比較简单. A^x=B(mod P) (P is a Prime, A,B<P) Let m = ...

  2. HDU 5532 / 2015ACM/ICPC亚洲区长春站 F.Almost Sorted Array

    Almost Sorted Array Problem Description We are all familiar with sorting algorithms: quick sort, mer ...

  3. C++ Web 编程(菜鸟教程)

    C++ Web 编程(菜鸟教程) C++ Web 编程 什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的. CGI 规范目前是由 NC ...

  4. poj--2031--Building a Space Station(prime)

    Building a Space Station Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6635   Accepte ...

  5. 棋盘问题(dfs)

    http://poj.org/problem?id=1321 思路:按行搜索,回溯时还原棋盘. #include <stdio.h> #include <string.h> ] ...

  6. 使用filezella服务器配置ftp

    使用FileZilla配置FTP站点,可参考以下步骤: 1.打开Filezilla Server服务端: 点击[Edit]->[Users],或者点击如下图标新增用户. 2.添加FTP帐号后,设 ...

  7. js返回16位随机数

    public string GetDataRandom()        {            string strData=DateTime.Now.ToString();            ...

  8. Django day07 (二)单表操作

    单表操作 -mysql数据库:settings里配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME ...

  9. Too Many open files 问题排查

    问题描述:使用netty做性能测试时,并发过大造成Too Many open files问题 该类错误是因为linux系统对socket连接时需要打开的文件句柄数有限制可以通过ulimit -a 查看 ...

  10. Lambda&Linq

    var list = new List<Model> { , UserName = ", Email = "zhang3@yoy.com"}, , UserN ...