私はRedisを見てきました。とても面白そうです。しかし、実用的な観点から、MySQLよりもRedisを使用する方が良い場合はどのような場合ですか?
6 に答える
NoSQLとSQLの議論全体を無視すると、最善のアプローチはそれらを組み合わせることだと思います。つまり、システムの一部(複雑なルックアップ、トランザクション)にはMySQLを使用し、他の部分(パフォーマンス、カウンターなど)にはredisを使用します。
私の経験では、スケーラビリティ(多くのユーザー...)に関連するパフォーマンスの問題により、最終的にはMySQLサーバーから負荷を取り除くために何らかのキャッシュを追加する必要があり、redis/memcachedはその点で非常に優れています。
私はRedisの専門家ではありませんが、私が集めたものとは、どちらもかなり異なります。Redis:
- リレーショナルデータベースではありません(派手なデータ編成はありません)
- すべてをメモリに保存します(より高速で、スペースが少なく、クラッシュした場合の安全性が低くなります)
- さまざまなウェブホストにあまり広く展開されていません(自分でホスティングしていない場合)
MySQLが提供するリレーショナル構造を必要とせず、高速アクセスを必要とする少量のデータがある場合は、Redisを使用することをお勧めします。これは、たとえば、頻繁かつ高速にアクセスする必要がある動的Webインターフェイスのセッションデータである可能性があります。
Redisは、頻繁にアクセスされるMySQLデータのキャッシュとしても使用できます(つまり、ユーザーがログインしたときにデータをロードします)。
間違った方法で質問していると思います。どのアプリケーションがシステムに適しているかではなく、どちらがアプリケーションに適しているかを自問する必要があります;)
MySQLはリレーショナルデータストアです。構成されている場合(たとえば、innodbテーブルを使用して)、MySQLはACIDトランザクションを提供する信頼性の高いデータストアです。
RedisはNoSQLデータベースです。速度と信頼性(これはパフォーマンスを劇的に低下させるため、fsyncで実行することはめったにありません)とトランザクション(SETNXで概算できます)のため、より高速です(正しく使用されている場合)。
Redisには、セット、リスト、ソートされたリストなど、非常に優れた機能がいくつかあります。
Redisのこれらのスライドには、例として統計収集とセッション管理がリストされています。例としてredisで記述されたTwitterクローンもありますが、それはTwitterがredisを使用することを意味するわけではありません(Twitterは大量のmemcacheキャッシングでMySQLを使用します)。
MySql-
1)構造化データ2)ACID 3)大量のトランザクションとルックアップ。
Redis-
1)非構造化データ2)シンプルで迅速なルックアップ。たとえば、セッションのトークン3)キャッシュレイヤーに使用します。
Redis、SQL(+ NoSQL)には利点と欠点があり、多くの場合、共存しています。
- Redis-ローカル変数を別のアプリケーションに移動
- ローカル変数/プロトタイプからの移動が簡単
- 永続的なストレージ
- 複数のユーザー/アプリケーションはすべて同じデータを見る
- スケーラビリティ
- フェイルオーバー
- (-)データに対してより高度なクエリ/質問を行うのは難しい
- NoSQL
- 生データを「データベース」にダンプします
- すべて/ほとんどのRedis機能
- (-)SQLと比較して、高度なクエリを実行するのが難しい
- SQL
- データ間の高度なクエリ
- すべて/ほとんどのRedis機能
- (-)データを「スキーマ」に配置する必要があります(シート/ Excelを考えてください)
- (-)Redis/NoSQLよりも単純な値を出し入れするのが少し難しい
(SQL / NoSQLソリューションは異なる場合があります。1つのシステムですべてを同時に提供できない理由については、 CAP定理とACIDを確認する必要があります)
公式ウェブサイトによると、Redisはオープンソース(BSDライセンス)のインメモリデータ構造ストアであり、データベース、キャッシュ、メッセージブローカーとして使用されます。実際、Redisは高度なKey-Valueストアです。1秒あたり約110000SET、1秒あたり約81000 GETを実行できるため、文字通り超高速で、驚くほど高いスループットを実現します。また、保存するデータ型の非常に豊富なセットをサポートします。実際のところ、Redisはデータを毎回メモリ内に保持しますが、永続的なオンディスクデータベースも保持します。したがって、トレードオフがあります。データセットのサイズ制限(メモリごと)による驚くべき速度です。この記事では、MySQLと比較していくつかのベンチマークを作成するために、Redisをキャッシングエンジンとしてのみ使用します。
ここを読む:RedisとMySQLのベンチマーク