我有很多文件放在随机文件共享上。我必须将它们复制到我的 SQL Server 2008 数据库中并总结所有要点。将文件从网络复制到 C# 到数据库的开销使得这个过程很慢,而且我有数千个非常大的文件要处理。
文件 1 示例
Player | Points
---------------
Bean | 10
Ender | 15
文件 2 示例
Player | Points
---------------
Ender | 20
Peter | 5
结果
Player | Points
---------------
Bean | 10
Ender | 35
Peter | 5
当前方法:使用C#,将每个文件读入数据库并合并到主表中。
MERGE INTO Points as Target
USING Source as Source
ON Target.Player = Source.Player
WHEN MATCHED THEN
UPDATE SET Target.Points = Target.Points + Source.Points
WHEN NOT MATCHED THEN
INSERT (Player, Points) VALUES (Source.Player, Source.Points);
这种方法很好,但我正在寻找改进的想法(有点慢)。
建议的解决方案:
将每个文件读入 SQLite 数据库(基于读取,这应该非常快),将整个数据库批量加载到我的 SQL Server 数据库中并在那里进行所有处理。我应该能够为每个玩家分配一个排名,从而加快分组速度,因为我不是基于文本列进行比较。提议的解决方案的缺点是它不能在多个线程上工作。
将所有这些文件放入数据库并聚合它们的最快方法是什么?
编辑:关于我忘记提及的文件的更多背景信息
- 这些文件位于多台服务器上
- 我需要将这项任务的“影响”降到最低——所以不要安装应用程序
- 文件可能很大- 每个文件多达 1gb,因此不能在内存中执行任何操作
- 有数千个文件需要处理