c#中的数据处理-最佳方法
本文关键字:最佳 方法 数据处理 | 更新日期: 2023-09-27 18:10:35
我还在学习c#和SQL Server,所以请原谅我的"新手"。
下面是我的场景:
我有一个EMPLOYEE表,有10,000行。这些员工中的每个人在transactions表中都有事务。
事务表中有基本工资、代理津贴、加班时间等工资元素。它也有工资扣除额,如预支扣除额,一些贷款(有利息)和储蓄(养老金,社会保险储蓄等)。
我需要查看每个员工的交易,计算税收,贷款余额,更新储蓄余额,将时间转换为付款/扣除和其他一些东西。
此处理将为每个员工提供一组新的行,并带有句号标记(例如2013-04表示2013年4月)。我需要将其存储在HISTORY表中以备将来引用。
处理整个10,000个雇员表及其事务的最佳方法是什么?
有人告诉我,通过读取器将整个表拉到内存中不是一个好的做法,我同意。
我是否继续从数据库中提取员工,处理他们的事务,并将历史提交到数据库?然后拉下一个等等?
对后端调用太多?
(EF不是我的选择,仍然在ADO.NET中做原始SQL)
10000行不算多。如果没有大量的varchar或二进制列,内存可以很容易地处理这个问题。不要被好的实践"规则"所束缚。
另一方面,考虑一个存储过程。然后,所有的处理都将在服务器本地完成。edit:如果以上都不是选项,请尝试流式传输您的结果。例如,在读取查询时,将每一行保存在ConcurrentQueue
或类似的东西中。在执行查询之前,启动另一个线程或BackgroundWorker
,它检查队列中的新项目并同时在另一个SqlConnection
上保存结果。当查询完成并且队列有Count
0时才会工作
检查使用ROW_NUMBER()
。这可以被程序用来允许每次使用"x"行数浏览大型表。然后,您可以使用相同的方法对作业进行批处理,例如一次处理1000行。