如何在处理DB记录时估计正确的批次大小编号

时间:2011-01-27 17:26:02

标签: java database batch-processing

因此,假设我有一个处理器,它从一个表转换中获取记录并将它们放入另一个表中。我想知道我可以一次加载到内存和进程中的记录数。

显然这取决于很多因素:记录中的数据量,任何BLOBS?,列数,数据库类型,驱动程序,框架,盒子上可用的内存量,是否有任何其他内存消耗过程在相同的环境中运行等。

表单测试我可以看到它能够一次处理10000条记录,但是无法(使用OOM)查询100000条。

我想我正在寻找一个好的策略来找出合适的批量大小。

或者我应该使用非常保守且批量较小的数字(如100)。并且不要担心任何查询开销。

感谢。

2 个答案:

答案 0 :(得分:2)

我会进行不同尺寸的测试,直到你看不到任何改进。你可能会看到类似的东西。

1 : 10 ms
10 : 5 ms each
100 : 3.5 ms each
1K : 3 ms each.
10K : 3.2 ms each.

在这种情况下,我会选择1K或100来偏低。

答案 1 :(得分:0)

使值可手动配置,并运行一些基准测试。将值设置为合理的数字。我发现过去,随着批记录数量的增加,性能提升越来越少。因此,性能从一次记录一次跳到10次是戏剧性的,而从10到100则不那么明显,从100到1000甚至更少,等等。

所以我会运行基准来找出什么是合理的,然后让它可配置,你永远不知道什么时候你需要调整它出于某种奇怪的原因。