有很多方法可以做到这一点。
-
如果数据中的数字字段有些随机,则可以将条件添加到... and some_value % :N = :i
之类的where子句中,其中:N
是线程数的参数,而{ {1}}是特定线程的索引(从0开始)。
-
如果没有数字字段,则可以使用哈希函数创建一个数字字段,然后将其应用于其他字段以将其转换为数字字段。请参阅您的数据库特定文档以获取可用的哈希函数。
-
您可以使用诸如ROW_NUMBER()
之类的分析函数来创建要在条件中使用的数值。
-
您可以在第一个查询中查询行数,然后查询正确的Slice
using Spring Datas pagination feature。
还有更多变体。
它们都有一个共同点,即整个行集在处理期间一定不能更改,否则您可能会多次查询或根本不查询行。
如果不能保证在实际选择它们之前需要标记要由线程处理的记录,例如,通过在额外的字段中标记它们,或在查询中使用:i
子句。
最后一个问题是这是否真的是您所需要的。
在多个线程中查询数据可能不会使查询部分更快,因为这会使查询更加复杂,并且不会加速通常限制吞吐量的那些部分:应用程序与数据库之间的网络以及数据库中的I / O。 / p>
因此,通过一个查询选择数据并对其进行遍历,然后将其传递给线程池进行处理,可能是一种更好的方法。
您可能还想看看Spring Batch,这可能对处理大量数据有帮助。
本文链接:https://www.f2er.com/3163644.html