【发布时间】:2021-09-01 05:49:53
【问题描述】:
我有一个使用案例,我正在接收付款事件。我需要提供有关这些事件的搜索引擎。支付事件有多个属性,可以在这些属性上运行聚合搜索查询。例如: 统计 accountId 的失败交易: 123 当用户使用 deviceId 时: 123 在过去 10 天内。
此查询将在同步路径中触发,因此 p95 延迟预期为 10 毫秒。我正在考虑使用 ElasticSearch,其映射定义如下:
{
"accountHolder": String,
"currency": String,
"merchant": String,
"device": String",
"transactionType": String,
"ip": IP,
"os": String,
"timestamp": Date,
"transaction_amount" : Int,
"status" : String
}
现在查询的最大时间窗口可以是 3 个月,即只需要搜索最近 3 个月的数据。我正在考虑使用滚动索引,但滚动索引的问题是它会删除整个索引数据。例如:如果索引是 3 个月的数据,那么在 3 个月后整个最后 3 个月的数据都会消失,而我只想保留最后 2 个月和 29 天的数据,并且只删除 1 天。
我知道这可以通过DeleteAPI 实现,但这将是昂贵的查询。其他选择是在一天而不是一个月建立索引,但是我需要跨索引执行聚合,这很昂贵。
还有其他方法可以优化吗?我可以使用 ElasticSearch 实现小于 10 毫秒的 p95 吗?最后一个问题,我应该直接将事件与现有事件聚合以减少读取路径期间的聚合负载吗?
访问模式: 写入 TPS : 1000 读取 TPS : 10000
谢谢
【问题讨论】:
-
想出了如何让
rollover表现得像滑动窗口。我们可以使用alias和rollover索引来确保只删除最后一天而不是整个3 个月的数据。参考:elastic.co/guide/en/elasticsearch/reference/master/…
标签: elasticsearch