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

SpringBatchMyISAMシーケンステーブルのInnoDBへの移行

    MyISAMシーケンステーブルをInnoDBに変更するだけで、update...set...=last_insert_id()の後にシーケンステーブルに更新ロックが作成されることを確認しました。 ステートメントですが、トランザクションがコミットされる前です。 MyISAMシーケンスを使用する場合、これらのロックは作成されません。したがって、「簡単な」アプローチはパフォーマンスに悪影響を与える可能性があります。

    これが私が思いついたものです。これが最も簡単な方法かどうかはわかりませんが、機能しています。

    1. これ ごと 答えて、既存のシーケンステーブルを削除し、単一の列で再定義しますuid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
    2. 次のストアドプロシージャを作成します。a)引数としてシーケンス名を取り、b)シーケンスへの挿入を行い、c)LAST_INSERT_ID()を返します
    3. MySQLMaxValueIncrementerを拡張するJavaクラスを記述します getNextKey()でストアドプロシージャを呼び出します 方法。 SimpleJdbcCallを使用しています これを行うインスタンス。
    4. DataFieldMaxValueIncrementerFactoryを実装するJavaクラスを記述します getIncrementer()からステップ#3のインスタンスを返します メソッド
    5. バッチ構成で、org.springframework.batch.core.repository.support.JobRepositoryFactoryBeanを更新します 手順4のインクリメンターファクトリを使用するための構成



    1. SQL正規表現の最後の文字検索が機能しない

    2. データウェアハウジングにおけるスターvsスノーフレークスキーマ?

    3. PL/SQLのUPDATEの影響を受ける行数

    4. Opencart管理者側の空白ページ