MySQL データベースから約 1,000 万件のレコードを読み取り、これらのレコードを暗号化し、暗号化された値を更新してフィールドに戻すという要件があります。 この要件を最も効率的な方法で達成する方法。
したがって、このオプションは除外されます。
2: Java の Executor 関数は、バッチ挿入を実装するために当社のアプリケーションの 1 つで以前に使用されていました。ただし、レコード数は 50,000 を超えません。私たちにも同様のアプローチが求められています。したがって、Spring Batch の使用は除外されます。
Java 8/MySQL データベースで考慮すべき機能を探しています。
Java 8: マルチスレッドには Executor、非同期処理には CompletableFuture、ストリーミングには使用します。
MySQL: インデックスを作成します...
VARBINARY
またはBLOB
のみを使用できます。SELECT MAX(LENGTH(col)) FROM tbl
) で最大長を指定できます。PRIMARY KEY
を使用して「最後に中断した場所」を追跡し、反復ごとに 1000 行のデータを処理することを検討してください。 (OFFSET
は使用しないでください)。チャンクの詳細:http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks