sql >> データベース >  >> RDS >> Mysql

Hibernateリレーションシップマッピング/バッチ挿入の高速化

    ID生成戦略は、Hibernateでのバッチ挿入にとって重要です。特に、IDENTITYの生成は通常ありません 動作します(AUTOは通常IDENTITYにもマップされることに注意してください)。これは、バッチ挿入中に、Hibernateに「requiresImmediateIdAccess」と呼ばれるフラグがあり、生成されたIDがすぐに必要かどうかを示すためです。その場合、バッチ処理は無効になります。

    これは、「ID挿入をすぐに実行します」と表示されている場合、DEBUGレベルのログで簡単に見つけることができます。これは、挿入直後に生成されたIDが必要であると通知されたため、バッチ処理をスキップしたことを意味します。

    通常行う生成戦略 HibernateはIDを事前に生成できるため、作業はTABLEとSEQUENCEです。これにより、バッチ挿入が可能になります。

    BatchingBatcherが実行中のバッチサイズを明示的に通知するため、バッチ挿入が機能するかどうかをすばやく確認する方法は、DEBUGレベルのログをアクティブ化することです(「Executingbatch size:」+ batchSize)。

    さらに、バッチ挿入を実現するには、次のプロパティが重要です。私はHibernateの専門家が十分ではないので、それらが必要であるとは言いません-おそらくそれは私の特定の構成です-しかし、私の経験では、それらはそれでも必要でした:

    hibernate.order_inserts = true
    hibernate.order_updates = true
    

    これらのプロパティはほとんど文書化されていませんが、SQLINSERTステートメントとUPDATEステートメントをバッチ実行用に適切にグループ化できるようにしたと思います。これはあなたが求めている複数行の挿入かもしれないと思います。私がこれについて間違っていても撃たないでください、私は記憶から思い出しています。

    また、次のプロパティを設定したと仮定します。そうでない場合、これはリマインダーとして機能するはずです:

    hibernate.jdbc.batch_size = xx
    

    ここで、xxは当然のことながら希望するバッチサイズです。



    1. SQLAlchemyを使用して2つのデータベースのテーブルを結合する

    2. SQLServerデータベースでID列を持つすべてのテーブルを検索する方法-SQLServer/T-SQLチュートリアルパート45

    3. SQLで一時テーブルを作成する方法は?

    4. auto_increment値を再利用する方法は?