背景是这样:订单数据,保留在hbase一份全量的,保留在es中一份热数据用来查询(一个月)。
最开始想的是起个job按订单创建时间进行切分,例如一天一个索引或者一周一个索引,然后删除一个月前的索引,所有索引绑别名查询走别名。 但是订单状态时间等等是可以更新的,有些订单可能十几天后还有更新操作(一个月内确定会有更新),这样按创建时间切片就不合适了,而且切完的数据更新是个问题,按时间找到索引了,还要再删掉然后落地到对应更新完的索引上,业务改动很大而且觉得并不是很合理。
但是es的数据需要定期归档,不然索引越来越大会影响查询效率,而且超过一个月的数据业务上确实也不需要。
不知道这类业务要怎么设计索引比较好呢
最开始想的是起个job按订单创建时间进行切分,例如一天一个索引或者一周一个索引,然后删除一个月前的索引,所有索引绑别名查询走别名。 但是订单状态时间等等是可以更新的,有些订单可能十几天后还有更新操作(一个月内确定会有更新),这样按创建时间切片就不合适了,而且切完的数据更新是个问题,按时间找到索引了,还要再删掉然后落地到对应更新完的索引上,业务改动很大而且觉得并不是很合理。
但是es的数据需要定期归档,不然索引越来越大会影响查询效率,而且超过一个月的数据业务上确实也不需要。
不知道这类业务要怎么设计索引比较好呢
4 个回复
rochy - rochy_he
赞同来自:
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自:
更新借助:update或者update_by_query
rochy - rochy_he
赞同来自:
定时使用 _delete_by_query 删除过期的数据;
对于数据的修改:直接修改原索引中的信息即可;
最后定期对索引进行合并以及清理
方案二:
保持目前的定期删除索引的方法;
修改数据的时候,Bulk 提交两个操作:
1、将历史数据标记为删除;
2、在当天的索引中新建一条记录。
查询时过滤掉标记为删除的数据即可。
weizijun - elasticsearch fan
赞同来自: