我需要编写一个c#应用程序来监视通过网络接收的不同数据包(xml格式)。
每分钟可收到数万个数据包,每个数据包都需要检查以确定适当的行动。
该应用程序将监控工作人员在建筑物中的移动和动作。
数据包类似于以下内容:
Movement
数据包:
<packet>
<datetime>12:01:25</datetime>
<usertag>ABC</usertag>
<movedir>IN</movedir>
<location>90</location>
...
</packet>
Action
数据包:
<packet>
<datetime>12:07:45</datetime>
<usertag>ABC</usertag>
<actionid>1</movedir>
.....
</packet>
应用程序需要:
所有信息都需要记录在SQL Server数据库中以进行报告。
我的困境是如何以最有效的方式实现上述目标。
由于要处理和写入SQL会有大量数据,我的计划是每隔X秒“队列”插入和批量插入(BulkCopy)。
我的想法......
用户线程1读取所有数据包(我应该读取内存,即List<Packet>
还是写入DAT文件?)
主线程进程迭代上面的集合
如果移动添加到List<Movement>
对于其中的每一个,我需要在数据库表上进行查找以将位置代码映射到ID(我应该将此位置列表批量读取到字典一次并每隔X秒刷新一次吗?)
List<Action>
对于其中的每一个,我需要在数据库表/内存对象(上面)上查找,以查看用户当前在哪个位置记录此内容我担心通过这个过程我将在内存中保存的信息量非常大。任何人都有关于如何更有效地实现这一目标的任何建议?我希望将业务逻辑保留在代码中而不是服务器上。
非常感谢! 汤姆