我现在有一个索引,大概70w/s tps. 200个shard。这时机器资源利用率已经很高了。
我现在想拆索引,大概几种方案。不知道理解得对不对。
1.直接拆分成2个索引。单索引还是200 shard。 整个集群吞吐量不会提升,甚至会下降。索引多了,shard变多了,合并shard的压力会变大。因为调度器需要merge更多的小段了,对io要求更高了。参数: index.merge.scheduler.max_thread_count
2.拆成2个索引,单索引100shard。这个时候集群吞吐量跟之前比会稍微好点。但是优点查询的时候,如果能指定索引,在不能使用routing的情况下,查询性能会更好点。基于这点,我可以将索引拆成更多个。查询耗资源少了,写入就能用更多的资源了。但是master管理的元数据会稍微增加点(可以忽略不计)
我现在想拆索引,大概几种方案。不知道理解得对不对。
1.直接拆分成2个索引。单索引还是200 shard。 整个集群吞吐量不会提升,甚至会下降。索引多了,shard变多了,合并shard的压力会变大。因为调度器需要merge更多的小段了,对io要求更高了。参数: index.merge.scheduler.max_thread_count
2.拆成2个索引,单索引100shard。这个时候集群吞吐量跟之前比会稍微好点。但是优点查询的时候,如果能指定索引,在不能使用routing的情况下,查询性能会更好点。基于这点,我可以将索引拆成更多个。查询耗资源少了,写入就能用更多的资源了。但是master管理的元数据会稍微增加点(可以忽略不计)
4 个回复
easesstone
赞同来自:
rochy - rochy_he
赞同来自:
可以通过 reindex API 将数据进行拆分,然后测试一下拆分效果;
如果不影响集群正常运行的情况下(可以设置 reindex 的速度),推荐进行尝试,猜想不如实践一下。
kennywu76 - Wood
赞同来自:
yayg2008
赞同来自:
索引拆分
如果查询总是按特定字段过滤,且字段值是可枚举的,例如按省市过滤,则可以将索引拆分成基于省市的多个小索引。需要查多个省市的时候,可以创建别名,包含多个索引。
如果查询总是按特定字段过滤,但字段值是不确定的,则索引数据时增加routing,查询时就可以去掉filter子句,可带来查询性能的数十倍提升。