不为失败找理由,要为成功找方法。

多shard和多index区别在哪里

Elasticsearch | 作者 es_newbee | 发布于2017年11月03日 | 阅读数:4537

比如有 250G 数据
A : 放在一个index(5shard)中,每shard 50G。
B : 或者放在5个index中,每个index只有1shard。写的时候是5shard,后续通过shrink压缩成1shard。
都是通过rollover保证每shard在50G,新建写入索引。
 
这样A和B都是 包含5shard,每shard含50G数据。
在索引方面,肯定是B快,那么在查询方面有什么区别?
 
由于shrink非常耗资源
 
在采用第一种方案的情况下,又如何应用到读写分离:  每个写入索引最大有250G,每个写入索引起码要存双倍的(切换写入后不可能立即将索引relocation到冷节点),如果是多个应用(比如 10个,每个都是写入 250G然后rollover切换索引),那么加上复制片,写入节点 需要包含的数据有 250G *2 * 10 = 5T的SSD盘(这基本也不可能)而且随着应用的增加,需要的写入节点存储就越大。 这明显不合理。有遇到类似情况的吗
已邀请:

kennywu76 - Wood

赞同来自: lbx6z

总shard数量相同的情况下, 多shard和多index在写入性能上没有区别。 查询性能则取决于业务逻辑是否主要分索引查,还是每次查询都是全量索引查。 如果是分索引查,那多index有性能优势,因为只需要查部分的shard,对比单index需要查询所有的shard;而如果是全局数据查询,两者也是没有性能差别。
 
至于一开始分多更多的shard,之后对冷数据做shrink是否值得做, 需要考虑热shard的数量和集群node数量的比例。  分更多的shard是为了让数据块能分布到更多的node,均衡写入负载。 但如果node本身就不是很多,在一个node上分配2个shard还是5个shard,性能基本上没差别,甚至在一定负载情况下,过多的shard会减少写入吞吐量。
 
热数据消耗的磁盘空间问题,属于针对应用场景的数据应该如何切片的问题。 根据自己的磁盘容量和业务增长规律,规划索引和shard切分策略,以及allocate到不同结点的路由策略。 本身ES的node是可以增加tag属性的,可以将结点用tag分组, 应用数据按照一定纬度分组,和ES的分组进行映射,一组机器服务一组应用,应用的增加对应水平扩展机器组。 数据的规划没有万能药,只能自己琢磨,灵活应用了。 
 

要回复问题请先登录注册