我正在将程序从Microsoft SQL Server迁移到MySQL。一切正常,除了批量复制存在一个问题。
在使用MS SQL的解决方案中,代码如下所示:
connection.Open();
SqlBulkCopy bulkCopy = new SqlBulkCopy(connection);
bulkCopy.DestinationTableName = "testTable";
bulkCopy.WriteToServer(rawData);
现在,我尝试为MySQL做类似的事情。因为我认为性能会很差,所以我不想将DataTable写入CSV文件,并使用MySqlBulkLoader
该类从那里进行插入。
任何帮助将不胜感激。
因为我认为性能会很差,所以我不想将DataTable写入CSV文件并使用MySqlBulkLoader类从那里进行插入。
不要根据无根据的假设排除可能的解决方案。我只是测试的从100,000行插入System.Data.DataTable
使用标准到MySQL表MySqlDataAdapter#Update()
内Transaction
。持续大约需要30秒才能运行:
using (MySqlTransaction tran = conn.BeginTransaction(System.Data.IsolationLevel.Serializable))
{
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = conn;
cmd.Transaction = tran;
cmd.CommandText = "SELECT * FROM testtable";
using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
{
da.UpdateBatchSize = 1000;
using (MySqlCommandBuilder cb = new MySqlCommandBuilder(da))
{
da.Update(rawData);
tran.Commit();
}
}
}
}
(我尝试了几个不同的值,UpdateBatchSize
但它们似乎对经过时间没有重大影响。)
相比之下,下面的代码使用MySqlBulkLoader
只花了5到6秒钟即可运行…
string tempCsvFileSpec = @"C:\Users\Gord\Desktop\dump.csv";
using (StreamWriter writer = new StreamWriter(tempCsvFileSpec))
{
Rfc4180Writer.WriteDataTable(rawData, writer, false);
}
var msbl = new MySqlBulkLoader(conn);
msbl.TableName = "testtable";
msbl.FileName = tempCsvFileSpec;
msbl.FieldTerminator = ",";
msbl.FieldQuotationCharacter = '"';
msbl.Load();
System.IO.File.Delete(tempCsvFileSpec);
…包括以下时间:将DataTable中的100,000行转储到临时CSV文件中(使用与此类似的代码),从该文件中批量加载,然后再删除该文件。
问题内容: 我的输入就是这样。 O / p:应该像 我想要一个可以在数据库级别上触发的查询。我尝试了各种方法,但无法做到这一点… 问题答案: 11g及更高版本: 使用listagg: 10g及以下: 一种方法是使用功能: 要使用该功能: 注意:在某些较早版本的Oracle上有一个(不受支持的)功能,该功能可能会对您有所帮助-有关详细信息,请参见此处。 在MySQL中:
本文向大家介绍mysql 批量修复,包括了mysql 批量修复的使用技巧和注意事项,需要的朋友参考一下
问题内容: MySQL提供了一种自动增加记录ID的机制。这可以用于许多目的,但是我需要能够使用ORACLE提供的序列。显然,为此目的创建表是没有意义的。 解决方案应该很简单: 1)创建一个表以托管所有需要的序列, 2)创建一个增加特定序列的值并返回新值的函数, 3)创建一个返回序列当前值的函数。 从理论上讲,它看起来很简单…但是… 当增加一个序列的值时(与Oracle中的相同),您需要阻止其他会话
在SQL我们做这样的事情批量插入到可更新 但在PostgreSQL中,如何执行此操作
平台已上线批量复制备课和课外任务功能,进入课堂---点击【备课区】-勾选要复制的备课记录和课外任务--【批量复制】 提示: 1)关联课堂的批量复制:课程团队的老师之间可以共享备课,可以将同一课程学期下的慕课堂备课进行复制,但只能将别人课堂的备课复制到自己的课堂,而无法将自己的备课复制到别人的课堂. 2)如果课程团队有多个平行教学班,可在一个课堂中完成备课后,批量复制备课和课外任务到其他班级。
问题内容: 如何在JBoss EAP 6中将任意字符串绑定到JNDI?我以前是通过以前的EAP版本中的org.jboss.naming.JNDIBindingServiceMgr MBean来完成的。 JBoss EAP 6中是否有与org.jboss.naming.JNDIBindingServiceMgr类似的东西? 我们正在将应用程序从jboss-5.1.EAP迁移到jboss-eap-6.