es 是一个分布式系统,当我们存储一个文档到 es 上之后,这个文档实际上是被存储到 master 节点中的某一个主分片上。

例如新建一个索引,该索引有两个分片,0个副本,如下:

接下来,向该索引中保存一个文档:

PUT blog/_doc/a
{"title":"a"
}

文档保存成功后,可以查看该文档被保存到哪个分片中去了:

GET _cat/shards/blog?v

查看结果如下:

index shard prirep state   docs store ip        node
blog  1     p      STARTED    0  208b 127.0.0.1 slave01
blog  0     p      STARTED    1 3.6kb 127.0.0.1 master

从这个结果中,可以看出,文档被保存到分片 0 中。

那么 es 中到底是按照什么样的规则去分配分片的?

es 中的路由机制是通过哈希算法,将具有相同哈希值的文档放到一个主分片中,分片位置的计算方式如下:

shard=hash(routing) % number_of_primary_shards

routing 可以是一个任意字符串,es 默认是将文档的 id 作为 routing 值,通过哈希函数根据 routing 生成一个数字,然后将该数字和分片数取余,取余的结果就是分片的位置。

默认的这种路由模式,最大的优势在于负载均衡,这种方式可以保证数据平均分配在不同的分片上。但是他有一个很大的劣势,就是查询时候无法确定文档的位置,此时它会将请求广播到所有的分片上去执行。另一方面,使用默认的路由模式,后期修改分片数量不方便。

当然开发者也可以自定义 routing 的值,方式如下:

PUT blog/_doc/d?routing=javaboy
{"title":"d"
}

如果文档在添加时指定了 routing,则查询、删除、更新时也需要指定 routing。

GET blog/_doc/d?routing=javaboy

自定义 routing 有可能会导致负载不均衡,这个还是要结合实际情况选择。

典型场景:

对于用户数据,我们可以将 userid 作为 routing,这样就能保证同一个用户的数据保存在同一个分片中,检索时,同样使用 userid 作为 routing,这样就可以精准的从某一个分片中获取数据。

ElasticSearch 文档路由,你的数据到底存在哪一个分片上_06相关推荐

  1. ElasticSearch 文档的添加、获取、更新、删除_05

    文章目录 新建文档 获取文档 批量获取 文档更新 查询更新 删除文档 批量操作 新建文档 首先新建一个索引. 然后向索引中添加一个文档: PUT blog/_doc/1 {"title&qu ...

  2. 1.elasticsearch文档存储(保存|修改|删除)

    [README] 0.本文部分内容(数据)总结自 es 开发文档, Document APIs | Elasticsearch Guide [7.2] | Elastic : 1.本文的es版本是7. ...

  3. 写接口文档及生成mock数据

    写接口文档及生成mock数据 在web应用开发的过程中,与前端联调时总会有一些接口,需要接口文档,在接口先行的情况下,前端不能拿到实际的接口进行开发,所以就需要mock数据. 今天搜索了下,阿里在这方 ...

  4. aip格式转化为pdf_python提取pdf文档中的表格数据、svg格式转换为pdf

    提取pdf文件中的表格数据原文链接 https://www.analyticsvidhya.com/blog/2020/08/how-to-extract-tabular-data-from-pdf- ...

  5. Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据

    一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二 ...

  6. idea swagger生成接口文档_Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据...

    一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二 ...

  7. 用Aspose.Words 从Word文档中提取表格数据

    用Aspose.Words 从Word文档中提取表格数据 对于某些项目,开发人员需要从Word文档中提取数据并导出到数据库.最大的挑战是必须支持现有Word文档. 相同格式且带多个数据块的Word文档 ...

  8. 用pageOffice插件实现 word文档在线填充指定数据

    pageOffice控件实现 office word文档在线填充指定数据 应用场景 OA办公中,经常要在文档的指定位置,填充后端指定数据. 如合同中, 姓名位置,金额位置,住址位置,要填充后端指定数据 ...

  9. python合并word表格单元格_Python实战009:读取Word文档中的表格数据及表格合并问题解决...

    同事最近被安排整理资料,主要工作室将文档中的表格数据提取出来并整理层Excel表格供我们FII刀具商城进行资料维护.由于刀具的种类繁多且规格无数,所以要处理的数据量相当的庞大.人工核对整理既费时又费力 ...

最新文章

  1. 我用1台笔记本模拟黑洞引力波,和超算2个月得出的结果只差1%
  2. [C#泛型系列文章]
  3. footer在最低显示
  4. 济南长清区谋定特色展销中心 对话中国农民丰收节交易会
  5. ssh中c3p0连接mysql_ssh 中使用c3p0 的连接池配置 | 学步园
  6. 三个球A,B,C大小形状相同,且其中有一个球与其他球的重量不同,要求找出这个不一样的球
  7. 什么是 FreeMarker
  8. Spring Data JPA 从入门到精通~Criteria概念的简单介绍
  9. abstract类中可以有private的成员_C++|static成员与单例模式
  10. html拖拽模态框,可拖拽的谷歌样式纯javascript模态窗口插件
  11. Struts2的属性驱动与模型驱动的区别
  12. php无限极 left right,PHP超牛逼无限极分类生成树方法
  13. NPColorPicker
  14. 海思Hi3798硬件设计,Hi3798 datasheet(2)参考资料
  15. 计算机绘图培训心得,学习cad制图心得体会
  16. 通过IP查询地址之纯真IP数据库
  17. 有自学能力的人,赚钱极其简单—聚财云库
  18. 苹果新款耳机问题多 线上短暂销售仍被抢空
  19. [ScyllaHide] 02 InjectorCLI源码分析
  20. 尚硅谷大数据项目之电商数仓(4即席查询数据仓库)

热门文章

  1. 京东云 | AI人才联合培养计划
  2. 从数学优化到视觉设计
  3. 如何利用redis实现秒杀系统
  4. 【转载保存】lucene优秀文章整理
  5. mongodb数据库常用指令
  6. c++堆栈中 top() pop()的具体作用是什么
  7. Makefile系列学习(博客)
  8. libcurl使用方法
  9. 如何抢占云栖大会C位?史上最强强强攻略来了
  10. 除了吃月饼,中秋节还能干啥?