【问题标题】:Sliding Window Index in ElasticSearchElasticSearch 中的滑动窗口索引
【发布时间】: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

谢谢

【问题讨论】:

标签: elasticsearch


【解决方案1】:

在不删除数据的情况下解决问题的一种方法是使用Roll ups,其主要目标是为每个所需字段组合在所需持续时间内预先聚合数据。因此,您不必搜索给定用户/设备组合的数百万个文档,而只需搜索一个聚合了 3 个月数据的文档,或者几个聚合较短时间间隔的文档。

例如,您可以汇总每个用户/设备对的每日数据,然后您的查询只需针对该用户/设备对的 90 个每日文档运行。

你应该看看我上面链接的官方文档以及解释如何设置它的following article

【讨论】:

  • 谢谢@Val!这就是我需要的。它现在被标记为实验性的,所以可以在生产中使用它。此外,查询可以带有任何属性排列,但仍然使用汇总,我将搜索非常少的文档。鉴于超过 3 个月的时间,我将拥有大约 10 亿份文件。我每天都会做汇总,这将带来数百万的计数。使用这个音量可以达到 10 毫秒,或者我应该进行基准测试并找出答案。再次感谢您的宝贵意见。
  • 很高兴它有帮助!始终进行基准测试以找出答案,没有神奇的秘诀。
  • 我能够对此进行测试并且它正在工作。我是否可以在不同的组合上生成多个聚合汇总。例如:用户和设备,用户和事务类型等。这将进一步减少读取路径期间要扫描的文档数量
  • 当然,你可以根据需要定义as many rollup groups
猜你喜欢
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多