我有一个CSV文件,我必须将其插入SQL Server数据库.有没有办法加快LINQ插入?
我创建了一个简单的Repository方法来保存记录:
public void SaveOffer(Offer offer)
{
Offer dbOffer = this.db.Offers.SingleOrDefault (
o => o.offer_id == offer.offer_id);
// add new offer
if (dbOffer == null)
{
this.db.Offers.InsertOnSubmit(offer);
}
//update existing offer
else
{
dbOffer = offer;
}
this.db.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
但是使用这种方法,程序比使用ADO.net SQL插入插入数据要慢得多(新的SqlConnection,新的SqlCommand用于选择是否存在,新的SqlCommand用于更新/插入).
在100k csv行上,ADO.net方式需要大约一个小时,而大约需要1分钟左右.对于2M csv行,ADO.net花了大约20分钟.LINQ在25分钟内增加了大约30,000的2M行.我的数据库有3个表,在dbml中链接,但其他两个表都是空的.测试是在所有表空的情况下进行的.
PS我曾尝试使用SqlBulkCopy,但我需要在将其插入数据库之前对Offer进行一些转换,我认为这违背了SqlBulkCopy的目的.
更新/编辑:18小时后,LINQ版本增加了大约200K行.
我也使用LINQ插件测试了导入,与ADO.net相比也非常慢.我没有看到插入/提交更改和选择/更新/插入/提交更改之间的巨大差异.
我仍然需要尝试批量提交,手动连接到db和编译的查询.
从外部源将数据填充到Django模型中的最佳想法是什么?
例如,我有一个模型Run,并在XML文件中运行数据,该文件每周更改一次.
我是否应该创建一个视图并从curl cronjob调用该视图URL(其优点是可以随时读取该数据,而不仅仅是在运行cronjob时),或者创建一个python脚本并将该脚本安装为cron(使用DJANGO _SETTINGS在执行脚本之前_MODULE变量设置)?