最佳方法:使用Java 8在MySQL中检索、加密和更新数百万条记录
P粉211600174
2023-08-27 00:17:18
<p>我们有一个需求,需要从MySQL数据库中读取大约1000万条记录,对这些记录进行加密,并将加密后的值更新回字段中。
如何以最高效的方式实现这个需求。</p>
<p><strong>1</strong>:使用AES_ENCRYPT从MySQL数据库进行字段级别的加密:据我了解,AES_ENCRYPT在varbinary上可以有效地工作,但我们的字段只是varchar类型。
因此排除了这个选项。</p>
<p><strong>2</strong>:之前在我们的一个应用程序中已经使用了Java中的Executor功能来实现批量插入。但记录数不超过5万条。我们被要求使用类似的方法。因此排除了使用Spring Batch来实现。</p>
<p>我正在寻找在Java 8 / MySQL数据库中需要考虑的可能特性。</p>
<p>Java 8:使用Executor进行多线程处理,使用CompletableFuture进行异步处理,使用Streaming。</p>
<p>MySQL:创建索引...</p>
VARBINARY
或BLOB
。SELECT MAX(LENGTH(col)) FROM tbl
)可以给出最大长度。PRIMARY KEY
来跟踪“上次停下来的位置”,如果可行的话。(不要使用OFFSET
)。有关分块的更多信息:http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks