2

私は現在、急速に巨大化する可能性のある Web アプリケーションを設計および開発しています。いくつかの一般的な情報を提供し、私の質問に移ります。私は中級レベルの Web プログラマーだと思います。

ここにいくつかの仕様があります: MySQL - データベース バックエンド PHP - フロント/バックエンドで使用されます。SOAP クライアントの HTML、CSS、JS、jQuery にも使用 - フロントエンド ウィジェット (ハイチャート、データテーブル、jquery-ui など)

これは会社のプロジェクトであるため、詳細については詳しく説明できませんが、主な目的は、何千ものユーザーがさまざまなデバイスからアクセスするダッシュボードを構築することです。

このプロジェクトのデータは、年間 50,000 アイテム (1 週間あたり ~1000 アイテム) 増加すると予測されています。

1 アイテム = データベースの 1 行

アイテムは、挿入された日から始まる毎日の履歴も記録します。

アイテムごとに 1 日の履歴 = 1 レコード

デバイスごとに 1 年あたり 365 レコード

365 * 50,000 = ~18,500,000 [初年度]

毎年、〜18,500,000レコードにxを掛けます。

(アイテムはその年を通して定期的に追加されるため、私のフォーラムは少しずれています)

すべてのアイテムと履歴は、API サービスに接続する SOAP クライアントを介してアクセスされ、レコードがデータベースに書き込まれます。

このデータの大部分は読み取られ、静的なままになります (読み取り専用)。ただし、一部の項目データは更新または変更される場合があります。データも毎日更新され、さらに x 量の履歴を書き込む必要があります。

質問:

1) MySQL はこれらのデータ要件を処理するための優れたソリューションですか? ある時点で最大 1 億レコード。

2) PHP Soap Client との同期呼び出しに制限されています (私の知る限り)。より多くのアイテムが抽出されるため、これには時間がかかります。応答を待たずに非同期要求を送信できるように、SOAP クライアントを作成するためのより良いオプションはありますか?

3) 他に考慮すべき要件はありますか?

4

3 に答える 3

1

スケーリングに伴う困難は、ほとんどの場合、ユーザーデータの関数です。ユーザー数は多いがデータが少ない場合、スケーリングは難しくありません。典型的な例は、人気のあるブログです。同様に、大量のデータがあってもユーザーがそれほど多くない場合も問題ありません。これは、会計システムやデータ ウェアハウスの状況などを表します。

ソリューションに向けた最初のステップは、大まかにスキーマを作成し、大規模にテストすることです。アプリケーションを実行するまで、アプリケーションがどのように機能するかはわかりません。2 つのアプリケーションでまったく同じ問題が発生することはありません。ほとんどの場合、スキーマを調整したり、一部のデータを非正規化したり、より積極的にキャッシュしたりする必要がありますが、これらは単なるテクニックであり、スケーリングに関する標準的なクックブックはありません。

INSERT特定のケースでは、アクティビティの割合が低く、インデックスが複雑すぎなければ、多くの問題は発生しません。おそらく最終的に行うことになるのは、これらの数億の行をいくつかの同一のテーブルに分割し、それぞれのテーブルのレコード セットをはるかに小さくすることです。

クエリの実行に問題がある場合は、インデックス、最適化、非正規化、キャッシュという標準的なアプローチを検討してください。

PHP では対応できない場合は、Python、Ruby、Java/Scala、さらには NodeJS などを使用して、データベース呼び出しを容易にすることを検討してください。SOAP インターフェースを作成している場合、多くのオプションがあります。

于 2013-01-24T18:32:58.753 に答える
0

1)MySQLは、これらのデータ要件を処理するための優れたソリューションですか?ある時点で約1億件のレコード。

絶対。すべてが適切にインデックス化されていることを確認してください。ストレージまたは1秒あたりのクエリ数の制限に達した場合は、ほとんど/すべてのDBMSに適用されるオプションがたくさんあります。より強力なハードウェアを入手したり、サーバー間でデータのシャーディングを開始したり、クラスタリングを開始したりできます。

2)PHP Soap Clientとの同期呼び出しに制限されています(私が知る限り)。より多くのアイテムが抽出されるにつれて、これは時間がかかるようになっています。応答を待たずに非同期要求を送信できるように、SOAPクライアントを作成するためのより良いオプションはありますか?

PHP 5+では、CURLと並行して複数のリクエストを実行できます。これについては、 curl_multi_exec()などのcurl_muli*関数を参照してください。私の知る限り、これには、SOAP/XML処理をリクエストとは別に処理する必要があります。

3)私が考えるべき他の要件はありますか?

おそらく。ただし、適切にインデックス付けされ、正規化されたデータベースから始めれば、通常は正しい方向に進んでいます。このデータベースについては、少なくともほとんど正しくオブジェクトについて考えています。非正規化によって既存または明らかな近い将来の効率の問題が解決される場合は、非正規化を開始します。ただし、土星の衛星が整列した場合に問題になる可能性のあるものを最適化しないでください。ユーザーがある程度定期的に気付く問題に対してのみ最適化してください。

于 2013-01-24T18:44:47.267 に答える