Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从DB2中获取超过49条记录的数据需要更多的时间_Java_Db2 - Fatal编程技术网

Java 从DB2中获取超过49条记录的数据需要更多的时间

Java 从DB2中获取超过49条记录的数据需要更多的时间,java,db2,Java,Db2,我基本上是比较文本文件行数据和数据库中的数据。以下是我的步骤: 从每行读取数据并保存在数组中。 迭代文本文件中的每一行&从DB2获取数据,以获取文本文件中存在的唯一卡号。 问题:当我考虑50个记录的上述比较时,它工作得很好,只需29秒,并给出正确的结果。但当我增加文本文件中的行数,即文本文件中的55-60行数时,它会执行,但会花费意外的20分钟 由于数据安全问题,我无法共享代码。您不应该遍历每一行并查询数据库 而是将卡号收集到列表中,并通过以下方式一次从DB获取数据: SELECT * FROM

我基本上是比较文本文件行数据和数据库中的数据。以下是我的步骤:

从每行读取数据并保存在数组中。 迭代文本文件中的每一行&从DB2获取数据,以获取文本文件中存在的唯一卡号。 问题:当我考虑50个记录的上述比较时,它工作得很好,只需29秒,并给出正确的结果。但当我增加文本文件中的行数,即文本文件中的55-60行数时,它会执行,但会花费意外的20分钟


由于数据安全问题,我无法共享代码。

您不应该遍历每一行并查询数据库

而是将卡号收集到列表中,并通过以下方式一次从DB获取数据:

SELECT * FROM table WHERE CARD_NUMBER IN (cardNumberList)

这里没有足够的真实信息来给出答案。我确实同意毛的观点,即逐行处理确实是不可持续的,但这不是这种异常行为的原因

基于您的方法的相对幼稚,我假设您可能正在为文件的每一行创建一个新的连接对象。我怀疑现在的情况是,您的DB2服务器的并发连接数已经达到了一个极限—50似乎是一个合理的设置。如果要执行此操作,请创建单个连接对象,并将其重新用于处理的每一行


或者,如果您对所有线路使用相同的连接对象,我认为DB2服务器可能有一些不寻常的设置,导致您的连接以意外的方式运行,例如限制每个连接的操作数。我对DB2不是非常了解,所以我不能建议任何具体的设置。您可以尝试通过每50条线路断开并重新连接来解决此问题。

重新考虑您的设计。逐行处理不可扩展。为什么不将文本文件加载/导入/摄取到Db2表或临时表中,根据需要创建索引,并让SQL完成比较工作呢。如果您不能重新考虑您的设计,那么如果您不能共享代码,您需要进行自己的研究以找到瓶颈。至少你需要知道如何识别减速发生的地方。请阅读-总结是,这不是一个解决志愿者问题的理想方法,并且可能会对获得答案产生反作用。请不要在您的问题中添加这一点。我理解不共享代码的公司政策不是您的错,但您应该告诉能够更改它的经理,这是无益的,而且会适得其反。它的影响是,您的问题可能被视为太模糊而无法回答,如果有足够多的人同意这一点,您可能会发现您的问题因主题不明确、太宽泛等而被搁置。管理者需要了解的要点是,小部分代码不是有价值的知识产权,它可以由任何称职的工程师编写。虽然这是一种改进,但对于大型数据集来说也是不可行的。最好是以页面的形式对文件中的数据进行迭代,一次迭代50-100行。您需要分页来备份。关键是要获取多个卡号的数据,而不是逐个获取