ホームページ >バックエンド開発 >PHPの問題 >php、mysql、同時実行ソリューション

php、mysql、同時実行ソリューション

藏色散人
藏色散人オリジナル
2020-08-12 09:40:532869ブラウズ

php MySQL 同時実行ソリューション: 1. 1 つの SQL ステートメントで複数のデータを挿入します; 2. 挿入ステートメントを「INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `) に変更します`)」と入力してください。

php、mysql、同時実行ソリューション

推奨: 「PHP ビデオ チュートリアル

プロジェクトでは、次のような場合によく遭遇します。たとえば、ある時点で 100 人のユーザーが同じデータに変更を加えた場合、問題が発生し、結果のデータが不正確になります。高い同時実行性を解決する通常の方法には、読み取り時のキャッシュが含まれます。データ、書き込み データが入力されると、キューに追加されます。参考までに、高い同時実行性に対処するための一般的な方法をいくつか示します。

1. MySQL バッチ挿入の最適化

大量のデータを含む一部のシステムでは、クエリ効率が低いことに加えて、データベースは長いデータ保存時間などの問題に直面します。特にレポート システムの場合、データのインポートに費やす時間が毎日数時間から 10 時間以上かかる場合があります。したがって、データベース挿入のパフォーマンスを最適化することは理にかなっています。
MySQL innodb でいくつかのパフォーマンス テストを行った結果、挿入効率を向上させるいくつかの方法が見つかりましたので、ご参照ください。

1. 1 つの SQL ステートメントで複数のデータを挿入します。
一般的に使用される挿入文 (

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
    VALUES ('0', 'userid_0', 'content_0', 0);INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
    VALUES ('1', 'userid_1', 'content_1', 1);

など) は、次のように変更されます。

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
    VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);

変更された挿入操作により、プログラムの挿入効率が向上します。ここで 2 番目の SQL 実行効率が高い主な理由は、マージ後のログ量 (MySQL の binlog と innodb のトランザクション ログ) が減り、ログ フラッシュの量と頻度が減り、効率が向上するためです。 SQL ステートメントをマージすることにより、SQL ステートメントの解析数を減らし、ネットワーク送信 IO を削減することもできます。
ここでは、単一のデータをインポートしてインポート用の SQL ステートメントに変換するテスト比較データと、それぞれ 100、1,000、および 10,000 個のデータ レコードをテストするテスト比較データを示します。

php、mysql、同時実行ソリューション

#トランザクション内で挿入処理を行うこともできます。

以上がphp、mysql、同時実行ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。