序言
Elasticsearch,中文名直译弹性搜索,不仅仅在单索引内部分片层面弹性搜索,更强的是在跨索引外围支持分片弹性搜索,同比其它分布式数据产品,此特性更鲜明,代表了 Elastic 集群架构设计的优越性。
本文将从以下几个方面展开探讨:为什么需要跨索引查询?
跨索查询有哪些经典应用场景?
跨索引查询技术原理是怎样的?
跨索引查询有哪些注意事项?
图示:跨索引示意图 + 多个索引查询效果图
为什么需要跨索引查询
技术限制
Elasticsearch 索引本身有一些指标限制,对于很多新手来说最容易忽视或者乱用。Elastic 索引数据量有大小限制;
单个分片数据容量官方建议不超过 50GB,合理范围是 20GB~40GB 之间;
单个分片数据条数不超过约 21 亿条(2 的 32 次方),此值一般很难达到,基本可以忽略,背后原理可以参考源码或者其它;
索引分片过多,分布式资源消耗越大,查询响应越慢。
基于以上限制,索引在创建之前就需要依据业务场景估算,设置合理的分片数,不能过多也不能过少。
技术便利
在基于关系型数据库的应用场景中,数据量过大,一般会采用分库分表策略,查询数据时基于第三方中间件,限制多多;在基于 NoSQL 的应用场景中,如 MongoDB,数据量过大,会采用数据产品本身提供的分片特性,查询数据时基于自身的路由机制。
无论是分库分表还是分片,它们只解决了一维数据的存储与查询,二维的不能,如电商订单系统场景,数据库采用多库多表拆分,一旦容量超过预期设计,需要二次拆分继续分库分表;MongoDB 采用多分片拆分,一旦容量超过预计设计,需要继续扩展分片节点。
以上对于 Elasticsearch 可以不用这样,它提供了两个维度的拆分方式,第一维度采用多个索引命名拆分,第二维度采用索引多分片,对于查询来说,可以灵活匹配索引,一次指定一个