Jas*_*son 4 coldfusion stored-procedures sql-server-2005 batch-file
每隔一段时间我就会收到一个我的客户端上传的大型数据文件,需要通过CMFL进行处理.问题是,如果我将处理放在CF页面上,那么它会在120秒后遇到超时问题.我能够将处理代码移动到CFC,似乎没有超时问题.但是,在处理过程中的某个时候,它会导致ColdFusion崩溃并且必须重新启动.我所经历的文件的每一行(8,000+)以及我以CFML形式提供的其他逻辑需要许多数据库查询(5个或更多,更新和选择的混合).
我的问题是通过这个文件的最佳方法是什么.有一点需要注意,我无法将文件移动到数据库服务器并完全使用数据库进行处理.但是,将每一行传递给处理所有事情的存储过程会更有效吗?它仍然是对数据库的大量调用,但与我现在的情况相比没什么.此外,向用户提供有关已处理文件数量的反馈的最佳方法是什么?
编辑:我正在运行CF 6.1
我只是做了类似的事情并经常使用CF进行数据解析.
1)维护文件上载表(父表). 对于您上传的每个文件,您应该能够保留每个文件的列表以及它所处的状态(上载,处理,未处理)
2)Temp表存储数据文件的所有行.(子表) 将整个数据文件导入临时表.试图在内存中完成所有操作将不可避免地导致一些错误.此表中的每一行都将链接到上面的文件上载表条目.
3)维护处理状态 - 对于您引入的数据文件的每一行,设置"处理/未处理"标记.这样,如果它中断,你可以从你离开的地方开始.当您浏览每一行时,将其设置为"已处理".
4)事务 - 如果可能的话,使用cftransaction一次提交所有信息,或者一次提交至少一行(使用5个查询).这样一来,如果出现繁荣,你就不会有一行数据是半计算/处理/更新/测试的.
5)完成处理后,将步骤1中表格中的文件名条目设置为"已处理"
通过使用上述方法,如果某些操作失败,您可以将其设置为从停止的位置开始,或者至少有一个更清晰的路径,从哪里开始调查,或者最坏情况下清理数据.您将有一种清晰的方式向用户显示当前上载处理的状态,它在何处以及在出现错误时停止的位置.
如果您有任何疑问,请告诉我.
其他想法:
您可以增加超时,为VM提供更多内存,将其置于64位,但所有这些只会增加系统的容量.每次通话都要做这些,并与上述相结合.
Java有一些整齐的文件处理库,可以作为CFCS使用.如果遇到很多速度问题,可以使用其中一个将其读入变量然后进入数据库
如果您正在使用XML,请不要使用coldfusion的xml解析.它适用于较小的文件,适用于变大的情况.有几个cfc写在那里(检查riaforge等),包装一些优秀的Java库来解析xml数据.然后,如果需要使用此数据,您可以手动创建cfquery.
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |