4

非常に多くのユーザーを集めるアプリ(Rails)を作成することを計画しています。最初は小さいですが、100万以上を処理できるようにしたいと考えています。

1秒あたり2500以上のリクエストを処理できるシステムを構築したいと思います。各リクエストには、書き込み(ロギングの目的で)と、ユーザー名でインデックス付けされた膨大なユーザーリストからの読み取り(この目的でMongoDBを使用することをお勧めします)が必要であり、読み取りの結果がユーザーに返送されます。 。

mongoが読み取りと書き込みの両方をどのように処理するかについては少しわかりません。そのため、Mongoを使用してレコードを永続的に保存し、サーバーが起動するたびにRedisにロードして、Mongoがさらに高速にアクセスできるようにするというアイデアを思いつきました。書き込み以外は何も処理する必要はありません。

それは合理的に聞こえますか、それともMongoとRedisの大きな誤用ですか?

配達のスピードは最も重要です。

4

3 に答える 3

3

実際、Redis だけを使用してアプリケーション全体を作成することは可能です。やりたいことは、Redis の設計パターンを調査することです。開始するのに適した場所は、Karl Seguin によるThe Little Redis bookと呼ばれるこの PDFです。

たとえば、Redis のハッシュを使用して、すべてのユーザーの情報を保存します。

さらに、うまく計画すれば、Redis 自体が永続的であるため、Redis と組み合わせて Mongo や MySQL などの別の永続ストレージを用意する必要はありません。将来の体系的な変更に十分柔軟に対応できるように、適切なシャーディング/レプリケーション戦略を選択する必要があります。

于 2012-07-03T16:11:59.030 に答える
2

あなたが求めているスタックは確かに非常に優れたソリューションであり、高性能サイトでかなりのバトルテストが行​​われていると思います。Trello(このサイトを作成したのと同じ人々によって作成された)は、同様のアーキテクチャとクレイグリストを使用しています。

Trello Tech Stack Writeup

Craigslistもこれを使用しています

Redisは高速で、通常の無効化タイプの機能に加えて、優れたpub / subメカニズムを備えているため、ほとんどの場合よりも優れたキャッシュになります。Mongoは、私がよく知っているデータベースであり、あらゆる種類のデータストアの目的に最適であるだけでなく、拡張性が高く、データの整合性を保護し、SLAエンタープライズ用語のチェックリストにある多数のマークをチェックする堅固なエンタープライズデータベースであると考えています。

素晴らしい組み合わせだと思いますが、本当に問題になるのは、これが必要なのかということです。あなたの負荷については、Mongo自体がこれを非常にうまく処理できると思います(そしてデータの整合性を提供します)。また、本当に必要な場合は、データセットがメモリ内に収まるように十分なメモリを備えたサーバーで実行できます(非正規化と優れたスキーマ設計が重要です) 。Foursquareは、メモリ内のMongoでのみ実行されます。

したがって、これが必要かどうかを考えてください。ただし、単純なものが常に優先されることを忘れないでください。Redis / Mongoは非常に強力ですが、2つのデータストアをマスターして管理するには、さらに多くの作業が必要になります。

ありがとう、プラシス

于 2012-07-03T21:06:28.357 に答える
1

他の人が述べたように、単一のサービスを使用することは、私にとってより理にかなっています. ただし、ログ データをメモリに保持する理由があります。可能であればログファイルを使用するか、書き込みを分散する必要がある場合は Scribe または Flume を使用してみます。

于 2012-07-04T13:30:31.230 に答える