生产数据库中,大批数据更新时应分批执行
实际生产中,可能由于需求的变化需要对数据库中的数据做统一的更新。这时由于项目已经上线好久时间,数据库中的数据也已经很多了。这时的更新操作如果一次执行,可能对数据库造成数据阻塞,给用户的浏览造成问题。比较好的做法是每更新一批数据后,就停顿一定的时间。
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
Entities db = new Entities();
int page = 1;
while (true )
{
int take = page * 1000;
int skip = (page - 1) * 1000;
var links = db.XXX.OrderBy(p=>p.ContentID).Take(take).Skip(skip).Select(p => new { p.ContentID, p.DownIDs }).ToList();
if (links.Count() == 0)
{
break;
}
for (int i = 0; i < links.Count; i++)
{
string[] downIDs = new string[] { };
if (string .IsNullOrEmpty(links[i].DownIDs))
{
continue;
}
downIDs = links[i].DownIDs.Split( ',');
for (int j = 0; j < downIDs.Length; j++)
{
int contentId = links[i].ContentID;
int downId = Convert .ToInt32(downIDs[j]);
var query = db.YYY.FirstOrDefault(p => p.ContentID == contentId && p.DownID == downId);
if (query == null )
{
db.YYY.Add( new Y{ ContentID = contentId, DownID = downId, DateAdded = DateTime .Now });
}
}
}
db.SaveChanges();
context.Response.Write( "<br>");
context.Response.Write(links.Count());
context.Response.Flush();
page++;
System.Threading. Thread.Sleep(100);
}
作者:KeepMoving
出处:http://www.cnblogs.com/KeepMovingblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/KeepMovingblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。