千家信息网

Elasticsearch的文档的存储路由是什么

发表于:2024-10-18 作者:千家信息网编辑
千家信息网最后更新 2024年10月18日,Elasticsearch的文档的存储路由是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。以 Elasticsearch 7.9
千家信息网最后更新 2024年10月18日Elasticsearch的文档的存储路由是什么

Elasticsearch的文档的存储路由是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

以 Elasticsearch 7.9.2 为准。

问题

在一个索引中创建文档时,如何确定放到哪个分片中?

潜在 3 个方式:

  • 随机

  • 将文档 id 和分片编号的对应关系保存在数据库

  • 计算代替存储:按照某种算法计算出分片编号

如果采用第 1 种方式:

则创建时省事(获取随机数即可),但在查询文档时需要在多个分片中寻找文档。

如果采用第 2 种方式:

则实现起来简单、直接、可靠,但在数据量大的时候表会很大,查询比较慢。

如果采用第 3 种方式:

创建和查询时需要进行一次计算,好处是不必在维护对应关系。

ES 的实现方式

ES 采用的是第 3 种方式。

PUT /<索引名>/_doc/?routing=

如上,在创建文档时指定 id 和 routing,则此文档被放到的分片编号为:

es_hash(routing) % 分片数

如果不指定 routing,则在计算时把文档 id 作为 routing。

指定 routing 的文档创建之后,会有一个 _routing 字段:

{    "_index": "myindex",    "_id": "aaa",    "_routing": "myrk",    "_source":     // 其他字段}

使用 routing 潜在问题以及避免方式

假定:

  • 某索引有 n >= 2 个分片。

  • es_hash("a") % n == 0

  • es_hash("r") % n == 1

依次执行:

PUT /the_index/_doc/aPUT /the_index/_doc/a?routing=r

则 ES 中会出现 2 个 id 为 a 的文档。这绝不是使用者所期望的。

造成这样的原因是:一个 ES 分片其实是一个 Lucene 索引。同一个 Lucene 索引内部,文档的 id 保证互不相同,但多个 Lucene 索引之间无法保证这一点。

避免方式:

对于某 id 的文档,要使用 routing,就一直使用,不然就一直不使用。

关于Elasticsearch的文档的存储路由是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

文档 方式 索引 问题 存储 查询 路由 多个 字段 数据 更多 潜在 保证 帮助 解答 很大 易行 相同 省事 简单易行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何创立自己的软件开发团队 网络安全法网络安全审查 选课系统数据库设计ppt 数据库查出数据实现分页 远特通信网络安全吗 高级数据库阶段有哪些技术 网络安全靠人民的活动在哪里举行 现在先进的网络技术 广州移动办公软件开发 软博会兰德网络技术有限公司 皇室战争服务器连接不进去 方滨兴 国家网络安全形势 天气君的服务器是什么意思 MFC数据库文件怎么读写 浙江云盾互联网科技有限公司 软件开发员长期计划 数据库触发器的类型 玉林网络安全支队支队长 呼市检查网络安全 网络安全技术主要有哪些 iis元数据库win7 sql数据库实体是什么 校园网络安全防 商品评论数据库怎么设计 网络安全防校园贷试题 数据库就业方向及前景问卷调查 我的世界星际方块服务器技巧 河南邮箱提取外贸软件开发 关于网络安全的句子小学生 王者营地修改默认登录服务器
0