最良の方法: Java 8 を使用して MySQL 内の数百万のレコードを取得、暗号化、更新する
P粉211600174
P粉211600174 2023-08-27 00:17:18
0
1
553

MySQL データベースから約 1,000 万件のレコードを読み取り、これらのレコードを暗号化し、暗号化された値を更新してフィールドに戻すという要件があります。 この要件を最も効率的な方法で達成する方法。

したがって、このオプションは除外されます。

2: Java の Executor 関数は、バッチ挿入を実装するために当社のアプリケーションの 1 つで以前に使用されていました。ただし、レコード数は 50,000 を超えません。私たちにも同様のアプローチが求められています。したがって、Spring Batch の使用は除外されます。

Java 8/MySQL データベースで考慮すべき機能を探しています。

Java 8: マルチスレッドには Executor、非同期処理には CompletableFuture、ストリーミングには使用します。

MySQL: インデックスを作成します...

P粉211600174
P粉211600174

全員に返信 (1)
P粉903052556
  • 1,000 万行のデータに対する操作には時間がかかり、タイムアウトが発生する可能性があります。
  • MySQL に保存する場合は、VARBINARYまたはBLOBのみを使用できます。
  • 宣言されたデータ型がソース データより少なくともわずかに大きいことを確認してください。 (SELECT MAX(LENGTH(col)) FROM tbl) で最大長を指定できます。
  • 新しいテーブルを作成し、データをコピーするときに、そのデータを新しいテーブルの他の列に変換することを検討してください。それからテストしてください。
  • 可能であれば、PRIMARY KEYを使用して「最後に中断した場所」を追跡し、反復ごとに 1000 行のデータを処理することを検討してください。 (OFFSETは使用しないでください)。チャンクの詳細:http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks
  • はい、何らかの一括挿入を使用してください。ただし、バッチの合計サイズは約 1MB に制限してください。 (16MBは渡すのが難しい)。これにより、データ サイズが上記の 1K を下回る可能性があります。
  • テーブル全体の操作に必要な時間は、一度に 1K 行を処理する 1 回限りの操作と比べて大きな違いはありません。
  • データを暗号化するときは、圧縮してみるのもよいでしょう。これにより、ディスクの占有面積が 3 分の 1 に小さくなる可能性があります。
いいねを押す+0
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!