运行一个C#.net应用程序,每隔30秒从100个客户端接收数据,然后将数据存储在数据库中。数据是针对每个客户端的两个参数。我需要为每个客户每小时确定每个参数的总和,并根据结果做出决定。决策算法将以滑动窗口的方式为最后一小时的数据做出决定。我最初的想法是保留100个客户端的字典,其中关键是客户端IP,价值是一个总计。但是1)如果我的应用程序在半小时或59分钟的时候重新开始,我就失去了所有这些温暖的运行总数。 2)如果更多的客户端开始发送数据,字典将消耗更多的内存,3)如果将来2个参数变为100,字典增长更大4)使运行总值总是反映一小时的最近数据值不是直截了当。从传入流计算随时间变化的值的最佳方法
我应该考虑哪些不同的方法?最佳实践?设计模式?
这是非常广阔的,但这里有我的两分钱:1店在数据库中的数据,2 *键值为客户端IP *非常糟糕的主意,两个不同的客户端可以具有相同的外部IP(流量通过代理, nat,其他)。 2,在客户端生成GUID并将其存储在客户端上,然后当客户端连接发送ID,这样你会毫不含糊地identfy每个客户端,甚至可以有多个用户在同一台机器上。 – Gusman
谢谢。 IP是一个坏主意,我同意。我将使用GUID。对于数据库存储,我将在传入数据到达时进行存储。决策逻辑在存储之前在数据上运行。还是你的意思是,存储它,然后决定逻辑定期工作的数据库?我试图避免这种情况,因为它可能无法在数据库读取和常量写入方面表现良好。 – sOltan
是的,我打算在存储的数据上间隔运行它。关于性能,你说你将有100个客户端,你希望每个客户端创建多少个寄存器?任何实际的数据库都将工作得足够快,以支持每秒数千次写入,因此根据事务量可能足够快或不足。 – Gusman