88 秒で 1,000 万件のレコードを MySQL データベース テーブルに挿入する方法

88 秒で 1,000 万件のレコードを MySQL データベース テーブルに挿入する方法

私が使用しているデータベースはMySQLデータベースバージョン5.7です

まずデータベーステーブルを自分で準備する

実は、1000 万のデータを挿入するときにいくつか問題が発生しました。まずはそれらを解決します。最初は、100 万のデータを挿入するときにエラーが発生しました。コンソール情報は次のとおりです。

com.mysql.jdbc.PacketTooBigException: クエリのパケットが大きすぎます (4232009 > 4194304)。サーバー上でこの値を変更するには、max_allowed_pa​​cket 変数を設定します。

上記のエラーは、データベース テーブルの max_allowed_pa​​cket 構成が十分大きくないために発生します。デフォルトは 4M です。その後、これを 100M に調整したところ、エラーは報告されなくなりました。

グローバルmax_allowed_pa​​cketを100*1024*1024*に設定する

設定後にデータベースに再度ログインして、設定した値を確認する必要があることに注意してください。

'%max_allowed_pa​​cket%' のような変数を表示します

コードは次のとおりです。

添付文書;
java.sql.Connection をインポートします。
java.sql.DriverManager をインポートします。
java.sql.SQLException をインポートします。
java.util.Date をインポートします。
com.mysql.jdbc.PreparedStatement をインポートします。
パブリッククラス InsertTest {
   パブリック静的void main(String[] args)はClassNotFoundException、SQLExceptionをスローします{
     最終的な文字列 url = "jdbc:mysql://127.0.0.1/teacher" ; 
     最終的な文字列名 = "com.mysql.jdbc.Driver"; 
     最終的な文字列 user = "root" ; 
     最終的な文字列パスワード = "123456" ; 
     接続 conn = null; 
     Class.forName(name); //接続タイプを指定します conn = DriverManager.getConnection(url, user, password); //接続を取得します if (conn!= null ) {
       System.out.println("接続が正常に取得されました");
       挿入(conn);
     } それ以外 {
       System.out.println("接続を取得できませんでした");
     }
   }
   パブリック静的void挿入(接続conn) {
     // 開始時刻 Long begin = new Date().getTime();
     // sql プレフィックス String prefix = "INSERT INTO t_teacher (id,t_name,t_password,sex,description,pic_url,school_name,regist_date,remark) VALUES ";
     試す {
       // SQL サフィックスを保存します。StringBuffer suffix = new StringBuffer();
       // トランザクションを非自動コミットに設定します。conn.setAutoCommit( false );
       // PST は ST よりも優れています PreparedStatement pst = (PreparedStatement) conn.prepareStatement( "" ); // ステートメントを実行する準備をします // 外側のループ、コミットされたトランザクションの合計数 for ( int i = 1 ; i <= 100 ; i++) {
         サフィックス = 新しいStringBuffer();
         // j 番目の送信ステップ for ( int j = 1 ; j <= 100000 ; j++) {
           // SQL サフィックスを構築 suffix.append( "('" + uutil.UUIDUtil.getUUID()+ "','" +i*j+ "','123456'" + ",'Male'" + ",'Teacher'" + ",'www.bbk.com'" + ",'XX University'" + ",'" + "2016-08-12 14:43:26" + "','Note'" + ")," );
         }
         // 完全なSQLを構築
         文字列 sql = prefix + suffix.substring( 0 , suffix.length() - 1 );
         // 実行SQLを追加
         pst.addBatch(sql);
         // 操作を実行 pst.executeBatch();
         // トランザクションをコミットします conn.commit();
         // 最後に追加されたデータをクリアします suffix = new StringBuffer();
       }
       //ファーストクラスの接続 pst.close();
       接続を閉じる();
     } キャッチ (SQLException e) {
       e.printStackTrace();
     }
     // 終了時刻 Long end = new Date().getTime();
     // 時間がかかります System.out.println( "1000 万件のレコードを挿入するのにかかる時間: " + (end - begin) / 1000 + " 秒" );
     System.out.println("挿入が完了しました");
   }
}

要約する

上記は、編集者が紹介した、88秒で1000万件のデータをMySQLデータベーステーブルに挿入する操作方法です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残してください。編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySql クイック挿入数千万の大規模データの例
  • Java で JDBC を使用して MySQL に数百万のデータを挿入するサンプル コード
  • MySQLに何百万ものテストデータを素早く挿入する方法
  • 6秒でMySQLに100万件のレコードを挿入する方法を教えます

<<:  CenterOS7 インストールおよび構成環境 jdk1.8 チュートリアル

>>:  JavaScriptオフセットは、ウィンドウ内でのマウス座標の取得とモジュールのドラッグを実装します。

推薦する

HTML で 2 列レイアウトを実装する方法の例 (左側は固定幅、右側は適応幅)

HTMLは2列レイアウトを実装し、左側は固定幅、右側は適応幅です。実装1: <スタイル>...

ウォーターフォールレイアウト+ダイナミックレンダリングの実装

目次典型的なウォーターフォールウェブサイトウォーターフォールフローレイアウトの原則一般的な考え方具体...

Vueカスタムディレクティブの詳細

目次1. 背景2. ローカルカスタム指示3. グローバルカスタム指示4.1 カスタムコマンドフック関...

vue-pdf はオンラインファイルプレビューを実現します

この記事では、参考までに、ファイルのオンラインプレビューを実現するためのvue-pdfの具体的なコー...

Vueは単一ファイルコンポーネントの完全なプロセス記録を実装します

目次序文単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...

Linux システム (Centos6.5 以上) のインストール JDK チュートリアル分析

記事の構成1. 準備2. Java JDK8.0をインストールする3. 環境変数を設定する3. イン...

React プロジェクトにおける TypeScript の使用の概要

序文この記事では、TS の基本的な概念ではなく、プロジェクトで TypeScript (以下、TS ...

Docker のタイムゾーンの問題とデータ移行の問題

最新のソリューション: -v /usr/share/zoneinfo/Asia/Shanghai:/...

jQueryは広告の表示と非表示のアニメーションを実装します

数秒後に広告が表示されて消えることがよくあります。この機能を実装するには、JQuery フレームワー...

Bootstrap 3.0 学習ノートボタンスタイル

この記事では主にボタンのスタイルについて説明します。 1. オプション2. サイズ3. 活動状況4....

JavaScript のクロージャによって発生する問題を回避する

閉鎖による問題を回避するためのletについてオブジェクト指向の考え方を使用して、購入者情報の削除機能...

Jenkins + Docker + ASP.NET Core の自動デプロイメントの問題について (落とし穴を避ける)

このブログを書くつもりはなかったのですが、実際の操作中に、ネットワークの問題に圧倒されたこと (ネッ...

スライドボタン効果を実現するネイティブJS

Jsで作ったスライドボタンの具体的なコードは参考までに。具体的な内容は以下のとおりですまずエフェク...

node.js の require メソッドの読み込みルールの詳細な説明

require メソッドの読み込みルールキャッシュからの読み込みを優先するコアモジュールパス形式のモ...

Vueは画像のドラッグと並べ替えを実装します

この記事の例では、画像のドラッグと並べ替えを実装するためのVueの具体的なコードを参考までに共有して...