0

PHP(Zend Framework)、MySQL、Apacheを実行するサーバーを使用してソーシャルWebサイトを構築しています。

ダッシュボードでアプリケーションがさまざまなイベント (約 12 のイベントがあります) のデータを取得し、このユーザー用のダッシュボードが更新されるという要件があります。ユーザーの総数は約 500k から 700k になると予想しています。ある時点では、平均して約 20% のユーザーがオンラインになります (ピーク時には、50% のユーザーがオンラインになると予想されます)。

問題は、現在の設計によるイベント データが MySQL データベースに配置されることです。Amazon RDS を使用したとしても、MySQL で数十万のクエリを同時に実行するのは得策ではないと思います。そのため、DynamoDB (または Redis または NoSQL db オプション) と MySQL の両方を使用することを検討しています。

問題は、MySQL と任意の NoSQL データベースの両方にデータがあると、Web アプリケーションにこのスケーラビリティの力を持たせるという利点が得られるかということです。または、他の解決策を検討する必要がありますか?

ありがとう。

4

2 に答える 2

2

データを複製する必要はありません。1 つのオプションは、Amazon が提供する ElastiCache を使用して、自分自身にインメモリ キャッシュを提供することです。これにより、データベース呼び出しがなくなり、ある意味でボトルネックが解消されますが、これには非常にコストがかかる可能性があります。相対時間の更新を犠牲にできる場合は、リクエストを遅くするか、ユーザーのためにデータをローカルにキャッシュするだけで済みます。たとえば、可能であれば次の N 個のイベントをブラウザーでキャッシュし、サーバーに別の要求を行う代わりにそれらを表示します。

リアルタイムである必要がある場合は、ElastiCache を確認し、推定トラフィック量を処理するために必要な ElastiCache の数を調整します。データを複製しても意味がありません。そこに保持することが理にかなっている場合は、単一のDBに保持します.IEには、必要なリレーショナル情報があり、可変スキーマシステムもある場合、両方のデータベースを使用できますが、それらを一緒に負荷分散することはできません.

また、アーキテクチャのボトルネックについて考え始め、予測数に達した場合にアプリケーションがどれだけうまくスケーリングできるかを考えます。

于 2012-08-31T18:59:01.090 に答える
0

@sean に同意します。データベースを複製する必要はありません。Xeroundのような自動スケーラビリティを備えたものについて考えたことはありますか。このようなソリューションは、スループットがピークに達したときに複数のノードにわたって自動的にスケールアウトし、後でスケールインできるため、季節的なピークのために、より大規模で拡張性の高いインスタンスにコミットする必要はありません。

さらに、私の理解が正しければ、この自動スケーラビリティのためにコードを変更する必要はありません。したがって、スケーラビリティ関連の問題以外の理由で MySQL と NoSQL DB の両方でデータを複製する必要がない限り、自動スケーリングを備えた単一の DB を使用することをお勧めします。

于 2012-09-20T15:58:43.720 に答える