0

少し前に、非常に高い並行性を持つ REST サービスを作成しました。

SQL クエリの最適化を行った後でも、考える時間が増えましたが、サービスの MySQL DB サーバーについて心配し始めています。

サービス:

  • 高い同時実行性に対処するための NGINX リバース プロキシの背後にある負荷分散用の複数の Apache サーバー
  • PHP オペコード キャッシュと Memcached データ キャッシュ
  • 64 ビット OS 上の InnoDB テーブル スキーマを持つ 1 つの MySQL DB サーバー
  • SQL クエリはストアド プロシージャです

比較的近い時間枠で直面する可能性のある問題は次のとおりです。

  • MySQL DB サーバーは数 TB のデータのストレージ制限に達しています
  • MySQL DB サーバーが専用 CPU/RAM/TCP の同時クエリの最大数に達する

私が見つけた解決策と私が検討していること:

  • MySQL Clusters ですが、Integrity (FK?) をサポートしていないようです
  • 負荷分散のための複数のレプリケートされた MySQL サーバー (短所: 過剰なストレージ)
  • シャーディング (短所: 現時点では、できるだけ早く解決策が必要な場合に実行するのはかなり複雑に見えます)
  • PostegreSQL に切り替えて、この特定の SQL Server についてさらに調査を行う

MySQL サーバーの負荷を軽減するための提案、最善の策は何ですか? 私が何もしなければ、最終的にはクラッシュします。

前もって感謝します!

4

1 に答える 1

0

あなたが心に留めることができる別の解決策。

ニーズの優先度が最も高いいくつかのクエリであるプール サービスを使用できます。たとえば、ここのスタックオーバーフローでは、API を使用したいほとんどの人が最新の質問をします。そのため、最初の人は自分のデータベースから入手できる最新の質問を求めます。ただし、優先度の高いクエリである限り、プールに追加されるため、必要な人は誰でもプールから直接取得でき、サーバーから要求するほど時間はかかりません。

プールの実装については、議論すべきもう 1 つの基準です。

まだ必要なもう 1 つの解決策は、非常に大規模なデータ クラスターがあり、select ステートメントが大幅に増加している場合、hadoop から hdfs を使用し、必要な数のサーバーに Hadoop を適用することです。このメソッドは、Facebook、linkedIn、および yahoo で使用されます。

于 2012-12-23T19:20:41.340 に答える