我們有一個需求,需要從MySQL資料庫讀取大約1000萬筆記錄,對這些記錄進行加密,並將加密後的值更新回字段中。 如何以最有效率的方式實現這個需求。
1:使用AES_ENCRYPT從MySQL資料庫進行字段層級的加密:據我了解,AES_ENCRYPT在varbinary上可以有效地工作,但我們的字段只是varchar類型。 因此排除了這個選項。
2:先前在我們的一個應用程式中已經使用了Java中的Executor功能來實現批次插入。但記錄數不超過5萬筆。我們被要求使用類似的方法。因此排除了使用Spring Batch來實現。
我正在尋找在Java 8 / MySQL資料庫中需要考慮的可能功能。
Java 8:使用Executor進行多執行緒處理,使用CompletableFuture進行非同步處理,使用Streaming。
MySQL:建立索引...
VARBINARY
或BLOB
。SELECT MAX(LENGTH(col)) FROM tbl
)可以給出最大長度。PRIMARY KEY
來追蹤“上次停下來的位置”,如果可行的話。 (不要使用OFFSET
)。有關分塊的更多資訊:http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks