我有很多分析数据,我希望每隔一段时间(比如说一分钟)汇总一次。数据被发送到一个将其存储在 ETS 表中的进程,并且每隔一段时间,一个计时器就会向它发送一条消息处理表并删除旧数据。
问题是传入的数据量变化很大,我基本上需要做两件事:
- 如果传入的数据量太大,则丢弃最旧的数据并推送新数据。这可以看作是一个固定大小的队列,如果数据量达到限制,队列将开始从前面,因为新数据排在后面。
- 如果队列未满,但数据已在那里放置了一段时间,则自动丢弃它(在固定超时后)。
如果保持这两个条件,我基本上可以假设该表具有恒定大小,并且其中的所有内容都比 X 新。
问题是我还没有找到一种有效的方法来一起做这两件事。我知道我可以使用匹配规范来删除所有早于 X 的条目,如果索引是时间戳,这应该会非常快。虽然我不确定这是否是定期修剪桌子的最佳方式。
第二个问题是将总表大小保持在一定的限制下,我不太确定该怎么做。想到的一个解决方案是在每次插入时使用自动增量字段,并且在修剪表时,查看第一个和最后一个索引,计算差异,然后再次使用匹配规范删除低于阈值的所有内容。
说了这么多,感觉我可能会使用 ETS 表来做一些它不是设计用来做的事情。有没有更好的方法来存储这样的数据,或者我是否正确地解决了这个问题?