web-dev-qa-db-ja.com

MySQL-INSERT DELAYED <-廃止されました。

私はMySQLドキュメントの https://dev.mysql.com/doc/refman/5.7/en/insert-delayed.html を見てきました

INSERT DELAYEDを使用するつもりでしたが、これは非推奨であることがわかりました。

いくつかのPHPコードが非常に大きなデータ転送を処理しているコードとの互換性のために、この機能がまだ必要です。PHPを更新して非常に満足していますが、現在、同じ機能をどのように実現するかはわかりません。

非推奨になった今、従来のINSERT DELAYEDと同じ結果をどのように達成しますか?

7
TolMera

MySQL 5.5。Documentation によると

INSERT DELAYEDは、MyISAM、MEMORY、ARCHIVE、およびBLACKHOLEテーブルでのみ機能します。 DELAYEDをサポートしないエンジンの場合、エラーが発生します。

MySQL 5.5にダウングレードできます(もちろん、冗談です)。 3つの提案があります。それらを調べてください。

提案#1

MySQLレプリケーションをセットアップして、次を実行できます。

  • ストレージエンジンがブラックホールであるマスターのテーブルに一括挿入します。
  • スレーブ上の同じテーブルはInnoDBになります。スレーブでSELECTを実行する
  • 3.5年前の投稿をご覧ください MySQLでUPDATE DELAYEDのようなものを行う方法

提案#2

より高速な書き込みを処理するためのInnoDB環境のチューニング。 4.5年前の投稿をご覧ください InnoDBエンジンで挿入遅延を使用し、挿入ステートメントの接続を減らす方法 および ハードドライブで待機しているinfileスタックからのMysqlロード

提案#3

Mysqldumpのように一度に一定数の行をロードする拡張挿入を使用するようにバルク挿入をカスタマイズします。

5
RolandoMySQLDBA

あなたの質問は、あなたが一定の期間が経過するまで仕事を延期する必要があることを意味していると思います。

このような状況では、キューを使用して、キュージョブを必要な時間延期します。

例として https://laravel.com/docs/5.3/queues#delayed-dispatching

このドキュメントでは、「テーブルが他のスレッドで使用されていないときに挿入するためにキューに入れられる」という方法ではこの方法では達成できないが、必要に応じてこの機能をジョブに実装する必要があります。

1
64k