ホームページ >バックエンド開発 >PHPチュートリアル >MYSQL_PHP チュートリアルでの PHP 同時実行によるプレッシャーの解決策
PHP ページのページビュー統計は 1 秒あたり 200 の同時実行であり、挿入により mysql に多大な負荷がかかります
lnmp 環境では、他のページのコンテンツがキャッシュされるため、mysql に大きな負荷がかかるのはこのページビュー統計関数です。何か解決策はありますか?
MySQL では 1 秒あたり 200 の同時実行は難しくないと誰もが言います。また、Redis と Memcached に切り替えると、永続性は言うに及ばず、ビジネス コードと運用保守のデプロイの量も少なくありません。
いくつかの提案をさせていただきます。運用とメンテナンスの導入とビジネス コードの変更をできるだけ小さくするようにしてください。
マスターとスレーブの分離を行うことができます。多くの統計計算を実行しながら、ライブラリに対して同時実行性の高い挿入を実行しないでください。分離後、クエリはスレーブ データベースで実行され (または Hive などの特殊な分散システムにインポートされても)、挿入パフォーマンスを向上させるためにメイン データベースでインデックスを削除できます。この方法では、ビジネス コードをほとんど変更する必要はありません (データベース構成ファイルを変更するだけです)。 MySQL の運用とメンテナンスの導入は、業務の閑散期にオンラインで行うこともできます。
少量のビジネス コード (PHP) の変更を許容できる場合は、次の 2 つの提案があります:
1. データベースとテーブルを分割する。各テーブルのデータの総量が少なくなり、特にMyISAM テーブル。挿入する前に、この IP がデータベースに存在するかどうか、以前にカウントされたことがあるかどうかの確認など、いくつかのクエリが必要になる場合があります。
2. HandlerSocket プラグインを使用して SQL パーサーをバイパスし、保存されたファイルを直接操作します。ビジネスで可能であれば一括挿入も可能です。 MySQL InnoDB は、HandlerSocket と同様の InnoDB NoSQL プラグインも起動しました。これは、memcached プロトコルを使用し、InnoDB バッファを共有します。これまで、MySQL と Memcached がデータの一貫性をどのように維持していたのかを心配する必要はなくなりました。