使用 man ascii 来查看 ASCII 表。

类似日志的时间片数据,但是会有修改操作,要怎么设计

Elasticsearch | 作者 code4j | 发布于2018年11月12日 | 阅读数:1392

背景是这样:订单数据,保留在hbase一份全量的,保留在es中一份热数据用来查询(一个月)。
 
最开始想的是起个job按订单创建时间进行切分,例如一天一个索引或者一周一个索引,然后删除一个月前的索引,所有索引绑别名查询走别名。  但是订单状态时间等等是可以更新的,有些订单可能十几天后还有更新操作(一个月内确定会有更新),这样按创建时间切片就不合适了,而且切完的数据更新是个问题,按时间找到索引了,还要再删掉然后落地到对应更新完的索引上,业务改动很大而且觉得并不是很合理。
 
但是es的数据需要定期归档,不然索引越来越大会影响查询效率,而且超过一个月的数据业务上确实也不需要。
 
不知道这类业务要怎么设计索引比较好呢
已邀请:

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

赞同来自:

记录中需要带记录的创建时间,这样更新时根据创建时间就能找到对应的索引,如果数据保存一个月的话,出现一个月前的更新数据一般选择丢弃

要回复问题请先登录注册