热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

请教:asp处理大量数据的时候,如何避免超时

比如我要给1万个会员批量更新数据,但里面的逻辑太复杂,我希望每执行1000个会员的时候,程序能中断,相当于结束,然后,一会,或几秒钟后,从1001个会员开始,继续操作处理,执行到2000的时候又中断一
比如我要给1万个会员批量更新数据,但里面的逻辑太复杂,我希望每执行1000个会员的时候,程序能中断,相当于结束,然后,一会,或几秒钟后,从1001个会员开始,继续操作处理,执行到2000的时候又中断一次,,,就是这个算法如何理解?不然一点按钮就这样执行下去,肯定页面会报错的

设置脚本超时的方法肯定是行不通的。。。
以前用过动易的采集系统,比如采集几千条数据的时候,他们的机制是,每采集100条或者更多,程序会中断一下,然后继续工作,这样避免页面超时

我想问问,这个机制在asp如何能够实现

31 个解决方案

#1


不知道还可以这样处理的,一般遇见这样的还是做一个服务把

#2


在数据库里面用procedure来做吧

#3


#5


#6


#7


[img=F:\无名图片管理系统\images][/img]

#8


#9


没有人做过类似的吗?

#10


异步方式,可以用消息队列MSMQ触发采集程序,程序执行完再通过消息队列通知,或更新数据库状态。

#11


引用 10 楼 hookee 的回复:
异步方式,可以用消息队列MSMQ触发采集程序,程序执行完再通过消息队列通知,或更新数据库状态。



这方面的知识,可以看些什么资料?

#12


结合Js SetTimeout 重新window.location

#13


我觉得可以分段进行.然后设置时间自动刷新.

#14


我找到一个方法,就是分页处理,只需要设计好自动location.href就可以了
正在调试,各位XD给的灵感,太感谢了。。。

#15


支持2楼

#16


客户端js触发服务器端执行1-1000条数据的处理,服务器处理完后,返回最后一条数据id=“1000”信号后,客户端用js settimeout,5秒后,客户端js再次触发服务器端执行1001(id+1)-2000条数据的处理。

#17


建立更新数据档案

分条或分批操作,同时记录进度

使用定时系统读取对比进度,继续执行操作

#18


如果是自己的服务器可以用IIS来处理
IIS->你的网站->属性->web站点->连接超时

IIS->你的网站->属性->主目录->配置->应用程序选项->asp脚本超时

#19


引用 16 楼 jspadmin 的回复:
客户端js触发服务器端执行1-1000条数据的处理,服务器处理完后,返回最后一条数据id=“1000”信号后,客户端用js settimeout,5秒后,客户端js再次触发服务器端执行1001(id+1)-2000条数据的处理。


楼上说的方法,好像跟我的类似
我是通过执行1--1000条记录,然后程序跳转到第2页,执行1001---2000条记录
页面页定时刷新了,就不会超时
js用的不熟悉,传值不熟练,呵呵,所以用了分页的方法

#20


用分页处理啊
Set rs= Server.CreateObject("ADODB.Recordset")
rs.CursorType=3
rs.PageSize=1000
rs.Open SQL,Conn
page=trim(Request("page"))
if not isnumeric(page) or page="" then
   page=1
end if

if page   page=rs.pageCount
  .....
  Response.write("")
  Response.end
else
  Response.write("数据已经处理完毕..")
  Response.end
end if

#21


用分页处理啊 
Set rs= Server.CreateObject("ADODB.Recordset") 
rs.CursorType=3 
rs.PageSize=1000 
rs.Open SQL,Conn 
page=trim(Request("page")) 
if not isnumeric(page) or page="" then 
   page=1 
end if 

if page     rs.AbsolutePage=page
  ..... 
  Response.write("  ") 
  Response.end 
else 
  Response.write("数据已经处理完毕..") 
  Response.end 
end if 

#22


输出数据倒比较少有超时,但把数据Insert到数据库时,偶然会出现,即使数据量不大,但在Vbscript中有大量业务运算时,亦会导致超时,而无法Insert或者是由于Insert时,数据库端有其它操作,令到插入要等待一定时间,接着亦会发出操作超时,要重新运行更新记录的程序 。

#23


用存储过程来做。然后是否结束的标志显示在网页上,可以通过客户端手动或是script刷新网页的方法来得知是否结束
总之,不能在ASP里去干这件事儿,太不现实了
不能同步,异步进行。
存储过程的调用要立即反回,设置互斥变量,以阻止相互冲突的数据库访问

#24


用存储过程来做。然后是否结束的标志显示在网页上,可以通过客户端手动或是script刷新网页的方法来得知是否结束
总之,不能在ASP里去干这件事儿,太不现实了
不能同步,异步进行。
存储过程的调用要立即反回,设置互斥变量,以阻止相互冲突的数据库访问

#25


存储过程吧很好写的

#26


干吗让ASP来干这事?这事是经常的吗?是不是你的逻辑设计有问题?

#27


恩,我是用存储过程来做的,利用分页机制,定位每页需要处理的记录数
然后每条记录如何逻辑处理,再次提交给存储过程
至少能保证了不超时问题,因为处理每页的时候能刷新页面
效果有点类似以前用过的动易的后台采集效果了。不敢说效率如何,只能比以往做法有所提高,呵呵

#28


我明白楼主的意思

你这样处理:每处理到1000条你需要停住的地方的时候,用程序判断条件是否到达该停住的地方,该停的时候,用程序控制输出response.write或其他的方式改变页面的刷新时间间隔,<meta http-equiv="Refresh" cOntent="5;URL=当前页面名称或地址">    由于刷新的时候,程序会又从第一条记录开始操作,所以你要在数据库中对每条记录做个标志,比如flag设置为0或1或true或false来判断,每更新完一个会员信息的时候将其标志设置为1,页面在执行的时候都是查询标志为0的记录,这样就会不停的向下去更新会员资料,每更新完1000条程序就会停止5秒钟。

#29


引用 28 楼 my22xo 的回复:
我明白楼主的意思 

你这样处理:每处理到1000条你需要停住的地方的时候,用程序判断条件是否到达该停住的地方,该停的时候,用程序控制输出response.write或其他的方式改变页面的刷新时间间隔,<meta http-equiv="Refresh" cOntent="5;URL=当前页面名称或地址">    由于刷新的时候,程序会又从第一条记录开始操作,所以你要在数据库中对每条记录做个标志,比如flag设置为0或1或true或false来判断,每更新完一个会员信息的时…

正解

#30


yes,,,楼上兄弟的答案,正确

#31


引用 27 楼 webwuyee 的回复:
恩,我是用存储过程来做的,利用分页机制,定位每页需要处理的记录数
然后每条记录如何逻辑处理,再次提交给存储过程
至少能保证了不超时问题,因为处理每页的时候能刷新页面
效果有点类似以前用过的动易的后台采集效果了。不敢说效率如何,只能比以往做法有所提高,呵呵

楼主能不能具体说说过程,或者贴段代码来参考一下。我现在也面临这样一个问题,苦思不得解。

推荐阅读
author-avatar
一个简单的程序员
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有