你不会是程序猿吧?

单索引拆成多索引。性能问题猜想。不知道对不对。

Elasticsearch | 作者 famoss | 发布于2018年08月07日 | 阅读数:4011

我现在有一个索引,大概70w/s tps. 200个shard。这时机器资源利用率已经很高了。 
我现在想拆索引,大概几种方案。不知道理解得对不对。
1.直接拆分成2个索引。单索引还是200 shard。  整个集群吞吐量不会提升,甚至会下降。索引多了,shard变多了,合并shard的压力会变大。因为调度器需要merge更多的小段了,对io要求更高了。参数: index.merge.scheduler.max_thread_count
2.拆成2个索引,单索引100shard。这个时候集群吞吐量跟之前比会稍微好点。但是优点查询的时候,如果能指定索引,在不能使用routing的情况下,查询性能会更好点。基于这点,我可以将索引拆成更多个。查询耗资源少了,写入就能用更多的资源了。但是master管理的元数据会稍微增加点(可以忽略不计)
已邀请:

easesstone

赞同来自:

学习了,没实践过,看起来分多个索引是可行的,

rochy - rochy_he

赞同来自:

不知道集群有多少个节点,推荐的分片数是 节点数*(2~3);
可以通过 reindex API 将数据进行拆分,然后测试一下拆分效果;
如果不影响集群正常运行的情况下(可以设置 reindex 的速度),推荐进行尝试,猜想不如实践一下。

kennywu76 - Wood

赞同来自:

你的的猜想和我的理解基本上一致,不过还是对比测试一下再做结论。

yayg2008

赞同来自:

你的这个拆分符合ES索引优化的原则:
索引拆分
如果查询总是按特定字段过滤,且字段值是可枚举的,例如按省市过滤,则可以将索引拆分成基于省市的多个小索引。需要查多个省市的时候,可以创建别名,包含多个索引。
如果查询总是按特定字段过滤,但字段值是不确定的,则索引数据时增加routing,查询时就可以去掉filter子句,可带来查询性能的数十倍提升。

要回复问题请先登录注册