我正在构建一个使用cfhttp读取分隔日志文件的脚本。这些日志文件往往相当大,所以当我试图将日志文件中的数据插入到我创建的表中时,我的cfquery INSERT语句会超时。
因此,我的想法是一次插入200-300条记录,然后以某种方式刷新插入语句计时器,然后导入下一组200-300条记录。
我不太确定如何完成这件事。
有人处理过从日志文件导入数千个条目吗?如何克服cfquery标签中的超时
我不能100%确定这是否适合您,但是对于将日志文件数据放入数据库的核心任务,我将绕过ColdFusion完全解析数据的步骤。
看看如何直接从SQL中执行。
-
首先将文件复制到本地,可能使用
<cfftp/>
-
然后,将您的日志文件视为CSV文件,并编写可以通过CF执行的SP,该SP只是将您的日志数据读取到临时表中。这应该是快速的,并避免任何超时。
-
你可以有一个单独的步骤(在SQL中,也许)重新组织你的数据一旦它是在临时表。
希望有帮助。
首先检查是db超时,而不是http请求。您是否在群集中一次插入一个recc ?你有要插入的表的索引吗?尝试在一个插入语句中插入多个记录。
如果可以将文件加载到会话变量中,则可以在每次调用时使用clop的startrow和endrow属性一次解析行。然后,您将设置脚本来设置计数器,执行第一次传递,更新计数器,然后使用cfhttp再次将信息发送到您的进程,传递更新的计数器。然后,该进程将解析这些行并执行插入操作。
对于大量数据,根据数据库的不同,您可以考虑创建一个可以一次传递整个数据块的存储过程,比如XML。然后,您的进程将从XML字段执行一条插入语句到表中。
这将加快处理速度,并且不会导致CF超时。
Cold Fusion可以传递SQL server使用的批处理插入命令,您只需要确保在您正在使用的dB服务器上允许该功能。我建议将文件导入本地,并使用SQL server的批量插入功能。