我的目标是创建一个针对在线交易数据量身定制的低延迟计算引擎。我的目标是从交易负载中提取电子邮件、电话号码和客户设备等信息。随后,我打算计算基于时间的聚合,例如确定过去 5 分钟内与特定电子邮件关联的交易数量或过去 10 天内与特定电话号码关联的交易数量。
我应该如何设计这个系统?
我尝试将原始交易负载存储在 Redis 中,并在收到请求时执行聚合查询。对于时间窗口超过 1 天的聚合,我们离线计算它们。
也许我遗漏了一些东西,但你所需要的只是一张
Transaction
桌子。
Transaction
-----------
Transaction ID
Email
Phone Number
Customer Device
Transaction timestamp
其中
Transaction ID
是自动递增主键,您可以在 Transaction timestamp
降序上定义另一个非唯一索引。我们降序排序的原因是,按 Transaction timestamp
降序排序时,最近的交易位于前面。
由于您正在存储时间戳,因此您可以查询特定的日期和时间。您只需为您感兴趣的时间段生成适当的 WHERE 子句即可。
您可以通过计算为特定查询检索的行数来获得计数。