1. はじめに:
ここ数年、NoSQL データベースは高同時実行性と大規模なデータ ストレージ ソリューションの代名詞となり、対応する製品も雨後の筍のように出現しました。ただし、多くの製品の中で際立った製品は、Redis、MongoDB、BerkeleyDB、CouchDB など、ほんの一握りです。各製品には異なる特性があるため、アプリケーション シナリオにも一定の違いがあります。以下に簡単に説明します。
1) BerkeleyDB は、特定の状況下でストレージ エンジンで使用できます。たとえば、BerkeleyDB は Oracle に買収される前に MySQL のストレージ エンジンとして使用されており、この製品は優れた同時実行性の拡張性、トランザクションとネストされたトランザクションのサポート、およびその他の重要な機能を備えていることが予測されます。リアルタイム データを保存するための値。ただし、この製品のライセンスは GPL であるため、あらゆる場合に無料で使用できるわけではないことに注意してください。
2) MongoDB は、BerkeleyDB とは異なり、Oriented-Document データベース サーバーとして定義され、独立して実行でき、他のリレーショナル データベース サーバーと同様に関連するデータ サービスを提供します。この製品の公式ドキュメントから、MongoDB は主に同時実行性の高いフォーラムやブログ Web サイトに適していることがわかります。これらの Web サイトの主な特徴は、同時アクセスの多さ、読み取りの増加と書き込みの減少、大量のデータ、単純な論理関係です。 、プライマリ データ ソースとしてのデータなど。 BerkeleyDB と同様に、この製品のライセンスは GPL です。
3). 代表的な NoSQL データベース サーバーである Redis は、BerkeleyDB と比較して、サービス プログラムとして独自のサーバー ホスト上で独立して実行できます。多くの場合、人々は Redis をキー/値データベース サーバーとしてのみ考えていますが、現在のバージョンでは、キー/値に加えて、リスト、ハッシュ、セット、順序付きセットなどのデータ構造もサポートしています。なので用途も広がります。この誤解については、Redis 公式 Web サイトでも対応する説明が提供されています。上記 2 つの製品とは異なり、Redis のライセンスは Apache ライセンスであり、現時点では完全に無料です。
4) memcached、データ キャッシュ サーバー。なぜここでこの商品の説明が行われるのでしょうか?使い方は Redis に最も似ていると思うので、非常にシンプルです。結局のところ、これは Redis に関する技術ブログ シリーズであるため、これら 2 つの製品を簡単に比較します。まず、両者の最大の違いについて説明します。Memcached はデータ キャッシュ サービスのみを提供し、サーバーがダウンすると、以前にメモリにキャッシュされていたデータはすべて失われます。 Redis はそのような機能を提供します。さらに、Redis は、Hash や Set など、より豊富なデータ ストレージ構造を提供します。類似点としては、主に 2 つの点があります。1 つは完全に無料であること、もう 1 つは提供されるコマンド形式が非常に似ていることです。
2. Redis の利点:
1). 他の NoSQL 製品と比較して、Redis は非常に使いやすいため、同様の製品の使用経験がある開発者にとっては、1 ~ 2 日、場合によっては数時間後、 Redis を使用して独自のプラットフォームを構築できます。
2). 多くの一般的な問題を解決すると同時に、インデックス作成エンジン、統計ランキング、メッセージ キュー サービスなど、いくつかのパーソナライズされた問題に関連するソリューションも提供します。
3. 現在のバージョンの Redis の主な問題:
1) リリースされた正式バージョンは、Unix 系および MacOSX プラットフォームのみをサポートします。
2). クラスターのサポートは提供されていませんが、公式 Web サイトによると、この機能はバージョン 2.6 で追加される予定です。
3). パブリケーション/サブスクリプション機能では、マスターがダウンした場合、スレーブは自動的にマスターに昇格できません。
4. リレーショナルデータベースとの比較:
Redis の現在のバージョン (2.4.7) では、5 つの異なるデータ型がサポートされています。そのうちの 1 つである文字列型のみが Key-Value 構造とみなされ、他のデータ型が適用されます。それぞれの機能のアプリケーション シナリオについては、このシリーズの後続のブログで具体的な詳細を説明します。
リレーショナル データベースと比較すると、Redis は比較的単純なストレージ構造のため、複雑な論理関係を十分にサポートできません。ただし、Redis に適用できるシナリオでは、これにより大幅な効率向上が得られます。それでも、Redis はデータベースに必要ないくつかの基本的な概念を提供します。たとえば、同じ接続内で異なるデータベースを開くことを選択できます。ただし、違いは、Redis のデータベースはデフォルトで番号で名前が付けられることです。開かれたデータベースは 0 です。プログラムの実行中にデータベースを切り替える予定がある場合は、Redis select コマンドを使用して、select 1 などの他のデータベースを開くことができます。後でデフォルトのデータベースに戻したい場合は、select 0 を実行するだけです。
データ ストレージに関しては、Redis は既存の NoSQL データベースの主流の考え方に従っています。つまり、Key はデータ取得用の一意の識別子であり、Value がメインであると単純に理解できます。データ ストレージのキー。各値にはキーが関連付けられています。これは、インデックス内の物理データがデータ テーブルに格納される場所に似ています。 Redis では、Value は、Json、XML、シリアル化されたオブジェクトのバイト ストリームなど、任意の形式でデータを格納するために使用されるバイナリ バイト ストリームとみなされます。そのため、RDB の BLOB 型フィールドとして想像することもできます。データ クエリを実行するときは、クエリの条件としてキーのみを使用できることがわかります。もちろん、Redis で提供されるいくつかのテクニックを適用して、値を他のデータのキーとして使用することもできます。この知識については、「」で説明します。以下のブログで紹介しています。
5. メモリ データを永続化する方法:
デフォルトでは、Redis は現在のデータベース内のデータ変更の数を参照し、特定のしきい値に達した後、データベースのスナップショットをディスクに保存します。このしきい値を設定するには、構成ファイルを使用します。通常、定期的に保存するように Redis を設定することもできます。たとえば、1,000 を超えるキー データが変更されると、Redis は 60 秒ごとにデータ永続化操作を実行します。デフォルト設定では、データ変更が 9 件以下の場合、Redis は 15 分ごとに保持されます。
前述のソリューションから、この方法を採用すると、新しいデータ変更が発生するたびに、メモリ内のキャッシュされたデータのみが変更されるため、Redis の実行効率が非常に効率的になることがわかります。これにより、ほとんどの変更操作でディスク IO が回避されます。ただし、この方法では効率は向上しますが、データの信頼性は失われます。メモリ スナップショットがディスクに保存される前に Redis が配置されているサーバーがダウンした場合、ディスクに書き込まれていない変更されたデータはすべて失われます。データの高い信頼性を確保するために、Redis は別のデータ永続化メカニズムである Append モードも提供します。 Redis サーバーがこのように構成されている場合、データの変更が発生すると、その変更はすぐにディスクに保存されます。
上記は Redis チュートリアル (1): Redis の紹介の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。