背景
索引拆分一直是ES最佳实践里面非常重要的一环;
用户时常会有疑惑,从单独索引拆分出多个索引总体性能上是否有变化,是否会并发查询多个索引?
即从 order 索引,拆分成 order-2024-01, order-2024-02...多个索引。性能是否变化,是否会并发查询。
结论
会并发查询多个索引
分析
这里先看一个问题:ES执行查询时单节点存在多分片,是否会合并查询https://blog.csdn.net/qq_33999844/article/details/128916901
1. ES执行查询的过程,本质上是对多个分片的并发查询
2. 通过 order-* 查询多个索引(跨索引查询),与单索引查询时一样,本质上还是跨多个分片并发查询,然后合并计算最终结果。
性能对比
单索引即使很大,如果分片数量设计的好,利用多节点对分片进行并发查询计算,性能会很好。
拆分多索引,可以更好的利用分布式能力,同样是分片并发查询。
理论上如果不考虑资源的情况下,多索引性能会更好;
同等资源情况下,性能相差不大;
推荐
推荐使用多索引。
单索引数据量庞大(TB级别)之后基本不可维护。
- 无法修改分片数,达不到最佳实践效果
- 数据恢复慢
- 爆炸半径大,挂一个节点影响可能较大
- delete的数据可能无法处理(force merge代价非常高)