ES的跨索引查询有多便利?对比下分库分表、分片更直观

3 篇文章 0 订阅
订阅专栏

序言

 

Elasticsearch,中文名直译弹性搜索,不仅仅在单索引内部分片层面弹性搜索,更强的是在跨索引外围支持分片弹性搜索,同比其它分布式数据产品,此特性更鲜明,代表了Elastic集群架构设计的优越性。

 

本文将从以下几个方面展开探讨:

 

  • 为什么需要跨索引查询?

  • 跨索查询有哪些经典应用场景?

  • 跨索引查询技术原理是怎样的?

  • 跨索引查询有哪些注意事项?

 

图示:跨索引示意图+多个索引查询效果图

 

为什么需要跨索引查询

 

技术限制

 

 

Elasticsearch索引本身有一些指标限制,对于很多新手来说最容易忽视或者乱用。

 

  • Elastic索引数据量有大小限制;

  • 单个分片数据容量官方建议不超过50GB,合理范围是20GB~40GB之间;

  • 单个分片数据条数不超过约21亿条(2的32次方),此值一般很难达到,基本可以忽略,背后原理可以参考源码或者其它;

  • 索引分片过多,分布式资源消耗越大,查询响应越慢。

 

基于以上限制,索引在创建之前就需要依据业务场景估算,设置合理的分片数,不能过多也不能过少。

 

技术便利

 

 

在基于关系型数据库的应用场景中,数据量过大,一般会采用分库分表策略,查询数据时基于第三方中间件,限制多多;在基于NoSQL的应用场景中,如MongoDB,数据量过大,会采用数据产品本身提供的分片特性,查询数据时基于自身的路由机制。

 

无论是分库分表还是分片,它们只解决了一维数据的存储与查询,二维的不能,如电商订单系统场景,数据库采用多库多表拆分,一旦容量超过预期设计,需要二次拆分继续分库分表;MongoDB采用多分片拆分,一旦容量超过预计设计,需要继续扩展分片节点。

 

以上对于Elasticsearch可以不用这样,它提供了两个维度的拆分方式,第一维度采用多个索引命名拆分,第二维度采用索引多分片,对于查询来说,可以灵活匹配索引,一次指定一个索引,也可以一次指定多个索引。

 

图示:ES查询示意图+多索引+多分片示意图

 

跨索引查询应用场景

 

IT应用中,除去技术本身局限问题,多数的问题都是由于耦合造成的,“高内聚,低耦合”一直是我们IT从业者的座右铭。应用系统耦合,就成了单体应用,然后就延伸出微服务架构理念。同样数据耦合,我们也要基于一定维度的微服务化,或垂直或水平或混合垂直水平。

 

业务系统

 

 

举例某些业务场景,实时数据与历史数据存储和查询问题,假设日均数据量超过千万条,那么月度数量超过3亿条,年度也会超过36亿条。

 

若采用Elasticsearch存储,则可以按月/按季度/按年度 创建索引,这样实时数据的更新只会影响当前的索引,不影响历史的索引;查询时也一样,依据查询条件指定索引名称,按需要扫描查询,无需每次扫描所有的数据。这比基于传统的数据产品灵活很多。

 

图示:实时数据与历史数据业务场景

 

大数据

 

 

Elasticsearch在大数据应用场景下很受欢迎,已经成为大数据平台对外提供结果查询的标配。大数据平台需要定期计算数据,将结果数据批量写入到Elasticsearch中,供业务系统查询,由于部分业务规则设定,Elasticsearch原来的索引数据要全部删除,并重新写入,这种操作很频繁。对于大数据平台每次全量计算,代价很大,对于Elasticsearch平台,超大索引数据频繁删除重建,代价也很大。

 

基于以上,采用多索引方式,如按照月份拆解,依据需要删除的月份索引数据。同样的问题,业务系统查询时,非常灵活指定需要的月份索引数据,这样保证了存储与查询的平衡。

 

图示:大数据平台写数据到Elastic平台示意图

 

日志

 

 

Elasticsearch应对这个日志场景非常擅长,诞生了著名的ELK组合,比如一个大中型的业务系统,每天日志量几十TB/几百TB很正常,可按天或者按小时或者更小粒度创建索引,通常查询日志只会查询最近时间的,过去很久的日志,偶然需要查询几次,甚至会删除。所以对于此场景,Elasticsearch的跨索引查询非常便利,程序编写也很简单。

 

跨索引查询应用方式

 

Elasticsearch跨索引查询的方式可依据业务场景灵活选择,下面介绍几种:

 

直接型

 

 

明确指定多个索引名称,这种方式一般应用在非常精确的查询场景下,便于查询索引范围,性能平衡考虑,若索引不存在会出现错误,如下:index_01,index_02

GET /index_01,index_02/_search
{
  "query" : {
    "match": {
      "test": "data"
    }
  }
}

 

模糊型

 

 

不限定死索引名称,这种方式一般采用通配符,无需判断该索引是否存在,支持前匹配、后匹配,前后匹配,如下:index_* 匹配前缀一样的所有索引

GET /index_*/_search
{
  "query" : {
    "match": {
      "test": "data"
    }
  }
}

 

 

计算型

 

 

索引名称通过计算表达式指定,类似正则表达式,也可以同时指定多个索引,如下:logstash-{now/d}表示当前日期

# 索引名称如:index-2024.03.22
# GET /<index-{now/d}>/_search
GET /%3Cindex-%7Bnow%2Fd%7D%3E/_search{
  "query" : {
    "match": {
      "test": "data"
    }
  }
}

 

 

跨索引查询技术原理

 

Elasticsearch能够做到跨索引查询,离不开其架构设计以及相关实现原理。

 

索引分片

 

 

图示 :索引由分片组成

 

  • 索引是一个虚拟的数据集合,索引由多个分片组成;

  • 分片存储实际的数据;

  • 索引分片数量不限制。

 

查询过程

 

 

图示:索引查询阶段

 

图示:取回数据阶段

 

查询过程简单说来就是分发与合并:

 

  • 查询分发,客户端发送请求到协调节点,协调节点分发查询请求到索引分片节点;

  • 数据合并,索引分片节点将数据发送到协调节点,协调节点合并返回客户端。

 

所以说,Elasticsearch提供跨索引查询的能力,实际上与原来单索引查询时一样,本质上是跨多个分片查询,然后合并。

 

跨索引查询注意事项

 

索引与分片等价关系

 

 

索引与分片等价的关系,1个索引20分片与4个索引每个索引5个分片理论上是等价的,鉴于索引分片的容量限制与性能平衡,在面对需要跨索引业务场景时,索引的数量与分片的数量尽量的少,既要保障索引热点数据的实时处理能力,也要平衡历史数据的查询性能。

 

协调节点分离

 

 

鉴于Elastic查询过程,在跨多个索引查询时,协调节点承担了所有分片查询返回的数据合并,需要消耗很大资源,在应对高并发场景,建议部署独立的协调节点,将集群的数据节点与协调节点分离,以达到最佳的性能平衡。

 

路由机制

 

 

Elasticsearch写入数据分布默认是基于索引主键_id的Hash值,此机制在数据分布上很均衡,但也没有什么规律,对于跨索引查询场景,若自定义指定路由键,可以在搜索时避开不需要的索引分片,有效减少分片查询的分片数量,达到更高的性能。

 

总结

 

Elasticsearch由于其架构设计的弹性能力,小小的一个跨索引查询特性,就能给我们应用系统带来很多架构设计的便利,解决很多实际场景问题,这是其它数据产品目前还做不到的。Elasticsearch还有更厉害的跨多个集群跨多个版本,详情可继续关注笔者下一篇文章的探讨。

 

还是那句话,Elastic用得好,下班下得早。

ElasticSearch合理分配索引分片原理
08-19
主要介绍了ElasticSearch合理分配索引分片原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
elasticsearch之多索引查询
无风听海
12-31 1万+
一、问题源起 在elasticsearch的查询中,我们一般直接通过URL来设置要search的index; 如果我们需要查询索引比较多并且没有什么规律的话,就会面临一个尴尬的局面,超过URL的长度限制; 二、测试环境 elasticsearch 6.8.12 测试数据 新增三个测试的index,每个index里边一个document; PUT test1/_doc/1 { "id":1, "name":"test1-1" } # { # "_index" : "test1", # "
elasticsearch 索引联合多条件查询
Lifelong learning
04-04 6279
Elasticsearch 是一个实时的分布式、RESTful 风格的搜索和数据分析引擎。可以在承载了 PB 级数据的成百上千台服务器上运行。
Python数据分析课--第二节 数据分析介绍
MiStonebridge的博客
10-12 334
数据分析介绍 数据分析基本概念 • 用适当的统计分析方法对收集来的大量数据进行分析 • 提取有用信息和形成结论 • 对数据加以详细研究和概括总结的过程 数据分析的流程 为什么要学习数据分析 岗位有需求 是机器学习的基础 数据科学的基础 数据分析工具 注意 数据分析与数据挖掘的相似之处: 数据挖掘和数据分析都是对数据进行分析、处理等操作,从而得到有价值的知识 数据分析与数据挖掘的区别: 在应用工具上,数据分析多的是借助现有的分析工具进行;而数据挖掘一般需要通过编程来实现。 在行业知识方面,数据分析
ElasticSearch是什么?Lucene是什么?
jj89929665的博客
02-02 715
ElasticSearch 分布式全文检索引Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口(请求分类 get post delete put)。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python
Elasticsearch 索引库搜索
white_while的博客
08-08 2164
es 索引搜索
水平分库分表的关键步骤以及可能遇到的问题
01-29
在互联网行业海量数据和高并发访问的考验下,聪明的技术人员提出了分库分表技术(有些地方也称为Sharding、分片)。同时,流行的分布式系统中间件(例如MongoDB、ElasticSearch等)均自身友好支持Sharding,其原理和...
Elasticsearch的索引,单field索引和多field的联合索引
01-20
Elasticsearch 可以用于:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索;实时分析的分布式搜索引擎;可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。 Elasticsearch的文件存储   ...
es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片
02-14
es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片
ElasticSearch 索引设计指南
过往记忆大数据
11-25 2811
作者介绍许睿哲2020年12月加入去哪儿网-数据平台团队,目前主要负责公司的 esaas 云服务与实时日志 ELK 平台的开发、维护与优化。主导参与了公司的 ES 架构升级迁移与 ES 平...
ElasticSearch深浅分页查询及原理
星空的风fly
06-27 3349
假设有8分片查询到第1000页数据,from =1000 size=100,es每次会从取出每个分片取1000*100+100=11w条数据,自然每个分片都会存储这11w条数据,然后再发给协调节点做排序后,而协调节点就是面临处理8*11w=88w条的巨大压力随着from页码的不断增加,es从每个分片获取的数据量也就越来越大,自然越来越慢,于es所在服务器和应用系统都带来不小压力,甚至出现内存溢出风险。因此es默认使用10000作为最大查询值,超过此值,推荐使用scroll游标来滚动查询。如果初次使用,不注
Elasticsearch也能“分库分表“,rollover实现自动分索引
02-20 1351
Elasticsearch rollover功能,实现了类似MySQL分库分表的能力,能够自动分索引,进行索引管理,提升集群性能,便于集群运维。
elasticsearch 提高索引查询效率
lanicc's blog
06-18 1153
elasticsearch 提高索引查询效率
elasticsearch删除索引_ES索引查询有多便利?对比下分库分表分片直观
weixin_39884270的博客
11-30 588
作者介绍李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对Elastic-Stack开发、架构、运维等方面有深入体验,实践过多种Elasticsearch项目,最暴力的大数据分析应用,最复杂的业务系统应用;业余为企业提供Elastic-stack咨询培训以及调优实施。序言Elasticsearch,中文名直译弹性搜索,不仅...
ES深度分页查询详解
热门推荐
弹指天下
08-05 2万+
ES分页查询详解
es-基础知识
学习的路上,永不停止
12-03 646
索引es对逻辑数据的逻辑存储,相当于数据库中的表。一个索引可以分布到1~n台机器上,同时可对应多个分片。每个分片拥有多个副本 文档:存储在es中的主要实体,相当于数据库中的一行记录。文档可以由多个字段组成。字段类型可以是文本、日期、数值等,也可以是一些比较复杂的数据类型 文档类型:一个索引可以存储多个文档,文档类型可以让我们很容易的区分文档的用途。注:不同的文档类型不能为相同的属性设置不同的...
ElasticSearch索引对比MySQL索引
var200的博客
08-20 620
前言 这段时间在维护产品的搜索功能,每次在管理台看到 elasticsearch 这么高效的查询效率我都很好奇他是如何做到的。 这甚至比在我本地使用 MySQL 通过主键的查询速度还快。 为此我搜索了相关资料: 这类问题网上很多答案,大概意思呢如下: ES 是基于 Lucene 的全文检索引擎,它会对数据进行分词后保存索引,擅长管理大量的索引数据,相对于 MySQL 来说不擅长经常新数据及关联查询。 说的不是很透彻,没有解析相关的原理;不过既然反复提到了索引,那我们就从索引的角度来对比下两者的差异。
分页 es全局搜索并且分页
qq_53791649的博客
12-29 313
public PageUtils globalSearch(Map<String, Object> params) throws IOException { MapGet mapGet = MapGet.init(params); String[] indexName = {"test"}; try{ //创建搜索请求 SearchRequest searchRequest = new Searc..
es match 查询时间段_ES分页看这篇就够了
weixin_31617975的博客
01-19 959
引言我们使用mysql的时候经常遇到分页查询的场景,在mysql中使用limit关键字来实现分页。比如下面的示例。select*fromorders_historywheretype=8limit100,100;select*fromorders_historywheretype=8limit1000,100;select*fromorders_hist...
怎么知道Elasticsearch 的索引有没有过期时间?
最新发布
08-16
要确定 Elasticsearch 的索引是否具有过期时间(TTL),可以通过检查索引的映射(mapping)来获取该信息。在 Elasticsearch 中,过期时间是在索引的字段映射中定义的。 以下是一种检查索引是否具有过期时间的方法: 1. 使用 Elasticsearch 的 Get Mapping API,发送一个 GET 请求到索引的 `_mapping` 终点。例如,假设索引名称为 `my_index`,你可以使用以下命令来获取索引的映射: ``` GET my_index/_mapping ``` 2. 在返回的响应中,将看到索引的映射信息。找到你感兴趣的索引,并查看其映射定义。 如果索引具有过期时间,则在映射中会有一个字段指定过期时间的设置。通常情况下,这个字段名为 `ttl` 或 `timestamp`。 如果找到了这样的字段,并且它的值设置了过期时间,那么索引就具有过期时间。否则,如果找不到或者值为空,则表示索引没有设置过期时间。 需要注意的是,自动过期时间功能在 Elasticsearch 7.x 版本中已被废弃,并且在后续版本中可能会被移除。推荐使用灵活和高级的时间范围查询等功能来管理数据的生命周期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • OIDC(OpenId Connect)身份认证 47754
  • 云计算之概念——IaaS、SaaS、PaaS、Daas 40642
  • 基于DDD的微服务设计和开发实战 14771
  • 云原生架构概述 12426
  • javax.inject.jar:依赖注入非常方便的jar包 11540

分类专栏

  • 大数据 6篇
  • 后端技术/Java 40篇
  • 架构设计/设计模式 32篇
  • 数据库 8篇
  • oracle 1篇
  • 运维管理 6篇
  • 机器学习/深度学习/神经网络 5篇
  • 组织建设/团队管理 4篇
  • 中台技术 11篇
  • 前端技术
  • 分布式 10篇
  • 设计模式
  • gof 1篇
  • webservice 2篇
  • redis 8篇
  • NoSQL 3篇
  • UniEAP 2篇
  • Hibernate 3篇
  • Java Spring 3篇
  • ZooKeeper 1篇
  • REST 2篇
  • 微服务 24篇
  • Springboot 23篇
  • 云计算 9篇
  • DevOps 7篇
  • VM
  • 容器技术 5篇
  • Linux 1篇
  • CentOS 1篇
  • 云原生应用 3篇
  • 网络 1篇
  • SpringCloud 4篇
  • OAuth2 3篇
  • javascript 1篇
  • 研发管理 11篇

最新评论

  • 基于DDD的微服务设计和开发实战

    梦在天涯度: 有源码地址嘛?

  • 我该建数仓、大数据平台还是数据中台?看完脑子终于清醒了

    qq_37191200: 非常用心的整理,非常详尽的描述汇总,楼主用心了,赞

  • 从数仓到数据中台,谈技术选型最优解

    weixin_39587557: 非常好,我数仓要转中台正好需要这个

  • 微服务与网关技术(SIA-GateWay)

    不夜De星空: 不需要,标题下有原文链接

  • 微服务与网关技术(SIA-GateWay)

    星丶空LTL: 转载的内容还要关注博主才能看?

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • UnderTow 核心配置
  • TDengine中的伪列
  • 网络安全等级保护细则
2023年6篇
2022年7篇
2021年13篇
2020年31篇
2019年61篇
2017年10篇
2016年6篇
2015年6篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司乐山营销型网站建设价格益阳网站设计模板报价宁波百度关键词包年推广报价珠海网站推广系统天津英文网站建设价格通辽网站改版推荐镇江网页设计公司伊犁外贸网站建设吉祥网络推广报价莱芜优化拉萨企业网站设计哪家好铜仁网站优化排名价格上饶网络营销多少钱贵阳网站优化推广推荐宿迁百姓网标王公司永州建网站价格金昌网站改版报价唐山seo网站优化推荐梧州外贸网站制作推荐潍坊建网站梅州网站推广系统报价芜湖seo网站推广报价光明网站推广系统价格平顶山SEO按效果付费多少钱同乐百度竞价包年推广公司海口网页设计扬州高端网站设计推荐铜仁企业网站设计报价那曲网站seo优化推荐德州优秀网站设计哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化