Algorithm 从流中复制

Algorithm 从流中复制,algorithm,stream,scalability,Algorithm,Stream,Scalability,我们有一个不断向我们发送数据的外部服务。为了简单起见,假设此数据有三个以制表符分隔的字符串 datapointA datapointB datapointC 这些数据由我们的一个服务器接收,然后转发到处理引擎,在那里对该数据集执行有意义的操作 处理引擎的一个要求是处理引擎不会处理重复的结果。例如,在第1天,处理引擎收到 abc,在第243天,服务器收到了相同的abc。在这种特殊情况下,处理引擎将发出警告,“记录已处理”,而不处理该特定记录 有几种方法可以解决此问题: 将传入数据存储在内存哈希

我们有一个不断向我们发送数据的外部服务。为了简单起见,假设此数据有三个以制表符分隔的字符串

datapointA datapointB datapointC
这些数据由我们的一个服务器接收,然后转发到处理引擎,在那里对该数据集执行有意义的操作

处理引擎的一个要求是处理引擎不会处理重复的结果。例如,在第1天,处理引擎收到
abc
,在第243天,服务器收到了相同的
abc
。在这种特殊情况下,处理引擎将发出警告,“记录已处理”,而不处理该特定记录

有几种方法可以解决此问题:

  • 将传入数据存储在内存哈希集中,并设置EXCRUCH 将指示特定记录的处理状态。 当我们让这个服务以零运行时,会出现问题 停机时间,根据数据的激增,此收集可以 超出内存的范围。此外,在系统中断的情况下 数据需要保存到某个地方

  • 将传入数据存储在数据库中,然后将生成下一组数据 仅当数据库中不存在数据时才进行处理。这
    有助于在发生灾难时保持历史的持久性 但是维护适当的索引和攻击性的开销
    性能相关问题的切分

……或者其他一些技巧

有人能指出一些案例研究或既定模式或实践来解决这个特定问题吗


谢谢

您需要某种支持存储,用于持久性,无论是什么解决方案。因此,无论需要执行多少工作。但对于如此简单的事情,它不一定是sql数据库-

除此之外,还可以考虑减少内存占用。这些可能会产生误报,因此您需要退回到第二层(速度较慢但可靠)(可能是磁盘存储)


最后,对幂等行为的需求在消息传递/企业系统中非常普遍,因此a会找到更多的论文/想法(不确定您是否意识到“幂等”是一个有用的搜索词)。

您可以创建数据的散列,并将其存储在比实际数据更小的备份存储中(前提是您的数据不小于散列)