读书人

百万级数据安插数据库

发布时间: 2013-02-18 10:50:49 作者: rapoo

百万级数据插入数据库
数据量很大大概有几百万条,有重复

数据分别为 用户名,密码,性别,年龄 保存在一个txt中(五十多个G) 分别对应着数据库中的表 usermessage中的 username ,pwd, sex,age

密码在插入时需要加密 Encryption(密码);

怎样才能快速插入,我用传统的方法,程序运行了几天了才插入了不到十分之一.

插入后要数据无重复,已username列为准
[解决办法]
BULK SQL 插入数据库后再去过滤掉重复的
[解决办法]
首先,我们把数据加载到一个DataSet DataSet ds = new DataSet();
private void btLoadData_Click(object sender, EventArgs e)
{
string dataFile = "CustomersData.xml";
ds.ReadXml(dataFile);
bindingSource1.DataSource = ds;
bindingSource1.DataMember = "Customers";
dataGridView1.DataSource = bindingSource1;

}
/// <summary>
/// 使用新的API,批量导入,这个速度很快,大约26毫秒,很显然,这种方式只写一次日志,不会为每一行写日志
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btBCP_Click(object sender, EventArgs e)
{
using (SqlConnection conn = new SqlConnection(GetConnectionString()))
{
SqlBulkCopy bcp = new SqlBulkCopy(conn);
bcp.DestinationTableName = "Customers";
bcp.BatchSize = 100;//这是批尺寸可以调整
for (int i = 0; i < 11; i++)
{
bcp.ColumnMappings.Add(i, i);
}
TimeSpan startTime = System.Diagnostics.Process.GetCurrentProcess().UserProcessorTime;
conn.Open();
bcp.WriteToServer(ds.Tables[0]);
TimeSpan duration = System.Diagnostics.Process.GetCurrentProcess().UserProcessorTime.Subtract(startTime);


MessageBox.Show("已经全部插入成功,所用时间为" + duration.Milliseconds.ToString() + "毫秒");

}
}

读书人网 >C#

热点推荐