3

パフォーマンスが問題になる大きな CakePHP プロジェクトを開始したいと考えています。ツリー動作として機能する users テーブルと、ユーザーに関連する多くの財務データを用意します。このアプリケーションは、さまざまなツリー ノードなどのデータを集約する多くの動的レポートを作成します。

githubにモデルのデータソースを redis に設定する使いやすいライブラリがあるので、アプリ全体で使用するのは良い考えでしょうか? 経験のある人はいますか?メイン/唯一のデータストレージとして redis に依存することにした場合、潜在的な問題は何ですか?

編集: 私は redis をインストールし、単純な関係 HasMany/BelongsTo を持つ 2 つのモデルに RedisModel を使用しようとしました。これらのモデルを標準の AppModels のように単純に使用しようとすると、うまくいきません (Redis エラー: キーがありません)。どうやら、Model->find Model->save などを標準的な方法で使用することはできません。代わりに redis メソッドを使用する必要があります (setKeyValue など)。これは、ページネーションやその他の CakePHP の先物も機能しないことを意味します。したがって、すべてのモデルに redisModel を使用するのは最善の考えではないかもしれません...

4

1 に答える 1

5

CakePHP について具体的に話すことはできませんが、一般的な redis と、特にあなたの質問のポイントについて話します。最終的には、選択したフレームワークに適用できるはずです。どれどれ:

  • パフォーマンスが問題となるアプリケーションを開始したいとおっしゃいましたが、事前に評価するのが難しいため、nosql ソリューションが必要になるという前提に注意する必要があることをお伝えしたかっただけです。Redis は非常に高速ですが、たとえば MySQL は、適切に構成および使用されていれば、何百万ものレコードと操作を問題なく処理できることが証明されており、多くのリレーショナル構造が必要な場合ははるかに簡単です。

  • メインで唯一のデータストアとしての Redis に関して:

    • Redis は、ジョブに対して完全に安定しています。Instagram は、ハッシュを使用して3 億のキーと値のペアを疑似シャード化して保存したと報告されており、Instagram が使用する唯一のデータ ストレージ システムではありませんが、redis がかなり信頼できることを示しています。このサイト (Stack Overflow)では、キャッシュの目的でもredisを広く使用しています。

    • Redis は、平均して全体的に優れた連続稼働時間もあると報告されています (上記の点を考慮すれば驚くべきことではありません)。

    • ダウンタイムの問題を軽減するオプションがあり、レプリケーションはある程度サポートされており、Redis クラスターは適切な分散アプローチをサポートするために間もなく登場します。

    • 直面する可能性のある主な問題は、その持続性がどのように機能するかを正しく理解していないことです。この点は重要なので、始める前に必ずこの記事とこの記事を読んでください。簡単に言えば、redis は変更をすぐにディスクに書き込むわけではありません。つまり、構成によっては、最後のディスク書き込みから数秒から数分の間、クラッシュによってデータが失われる可能性があります。ユースケースによっては、これが問題になる場合とそうでない場合があります。データが非常に機密性の高いもの (つまり、財務記録) の場合は、redis にジャンプする前によく考えてください。または、redis を排他的に使用するのではなく、別のストレージ システムと組み合わせて使用​​するシステムを構築することもできます。

  • redis のような非リレーショナル データ ストアのリレーショナル構造は、より多くの作業を行い、多くの場合、データを複製/非正規化することを意味します。それは可能ですが、考慮すべきことです。あなたの質問では、動的レポートを生成するためにデータを集約する必要があると述べていますが、これに redis を使用してもよろしいですか? リレーショナル データベースを使用すると、非常に小さなパフォーマンス コストでより多くの柔軟性が得られるように思えます。データに対して複雑なクエリを実行する必要があることが事前にわかっている場合は、どうしても必要な場合を除き、最初からやり直さないことをお勧めします。

ここでの私のアドバイスは、最初に redis とは何か、どのように機能するかをよりよく理解し、他の人に頼るのではなく独自のモデルを構築して、できることとできないことをよりよく理解し、そこからどこに行きたいかを評価することです。Redis はスタンドアロンで使用するのに十分な信頼性がありますが、最終的には、適切なツールを適切なジョブに使用することが賢明です。より伝統的なストレージシステム。

于 2012-09-22T13:54:38.570 に答える