mysql大量数据更新采用什么样的方式比较好,20w条数据一次更新?

mysql大量数据更新采用什么样的方式比较好,20w条数据一次更新?,第1张

建缓冲区。比如其他类型的高速缓存(redis等)作为中间缓冲层。

数据的查询,更改首先在这个层处理,处理完再更新到对应的数据库

注意额外增加锁,或者缓存机制防止缓存击穿,雪崩导致系统崩溃。

干嘛弄这么麻烦啊?数据量很大吗?要是很大的话才需要你说的那种方式做压缩.然后,你需要对得到的dataset根据其字段名组合成sql

更新到本地数据库.但是这个台麻烦了.

简单的办法是.在本地数据库B上建立对远程数据库A的DBlink.然后对远程数据库上的表在本地建立别名.

那么你访问别名就和访问本地表一样简单.只要你会sql

搞个数据库的批量本地插入还是很简单的.因为不知道你是什么数据库.因此你可以插下对应数据库DBLINk的资料.不过这种方式就是没法对数据压缩.可能会占用点带宽

一般用SqlDataAdapter批量更新就行了,你可以参照下面的代码,另一个可以参考的是这个

http://clingingboy.cnblogs.com/archive/2006/04/29/389039.html

下面代码一次是5000个,具体在你那数值是多少可以测试一下

/// <summary>

/// 批量更新数据(每批次5000)

/// </summary>

/// <param name="connString">数据库链接字符串</param>

/// <param name="table"></param>

public static void Update(string connString, DataTable table)

{

SqlConnection conn = new SqlConnection(connString)

SqlCommand comm = conn.CreateCommand()

comm.CommandTimeout = _CommandTimeOut

comm.CommandType = CommandType.Text

SqlDataAdapter adapter = new SqlDataAdapter(comm)

SqlCommandBuilder commandBulider = new SqlCommandBuilder(adapter)

commandBulider.ConflictOption = ConflictOption.OverwriteChanges

try

{

conn.Open()

//设置批量更新的每次处理条数

adapter.UpdateBatchSize = 5000

adapter.SelectCommand.Transaction = conn.BeginTransaction()/////////////////开始事务

if (table.ExtendedProperties["SQL"] != null)

{

adapter.SelectCommand.CommandText = table.ExtendedProperties["SQL"].ToString()

}

adapter.Update(table)

adapter.SelectCommand.Transaction.Commit()/////提交事务

}

catch (Exception ex)

{

if (adapter.SelectCommand != null &&adapter.SelectCommand.Transaction != null)

{

adapter.SelectCommand.Transaction.Rollback()

}

throw ex

}

finally

{

conn.Close()

conn.Dispose()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9929999.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存