NoSQL Redis アプリケーションを設計する際に考慮すべきこと
1) Redis で正しく開発するには、RDBMS 用のリレーショナル モデルではなく、C# コレクション クラスなど、C# プログラムで関係を構造化する方法についてもっと考える必要があります。RDBMS テーブルではなく、ドキュメント データベースのようなデータ ストレージについて考えるほうがよいでしょう。基本的にすべてがキー (インデックス) を介して Redis にブロブされるため、独自の「キー名前空間」に保持されるプライマリ エンティティ (つまり、集約ルート) が何であるか、または非プライマリ エンティティであるかどうかを判断するだけで済みます。親エンティティと一緒に永続化する必要があるメタデータ。
プライマリ データ ストアとしての Redis の例
以下は、Redis を使用して簡単なブログ アプリケーションを作成する手順を説明した優れた記事です。
http://www.servicestack.net/docs/redis-client/designing-nosql-database
Redis を使用した別の実世界の例については、RedisStackOverflowのソース コードを参照することもできます。
基本的に、各タイプのアイテムを個別に保存および取得する必要があります。
var redisUsers = redis.As<User>();
var user = redisUsers.GetById(1);
var userIsWatching = redisUsers.GetRelatedEntities<Watching>(user.Id);
エンティティ間の関係を保存する方法は、Redis のセットを利用することです。たとえば、ユーザー/ウォッチャーの関係を概念的に保存できます。
SET["ids:User>Watcher:{UserId}"] = [{watcherId1},{watcherId2},...]
Redis はスキーマレスでべき等です
ID を redis セットに格納することは冪等です。つまり、watcherId1を同じセットに複数回追加することができ、その出現は 1 回だけになります。これは、リレーションシップの存在を確認する必要がなく、関連する ID が存在しなかったかのように自由に追加し続けることができることを意味するため、優れています。
関連: 存在しない Redis コレクション (リストなど) への書き込みまたは読み取りは、空のコレクションへの書き込みと同じです。既存のリストは単に 0 の結果を返します。スキーマを使用するために事前にスキーマを定義する必要がないため、摩擦がなく、生産性が向上します。必要に応じて、Redis はEXISTS操作を提供してキーが存在するかどうかを判断するか、TYPE操作を提供してそのタイプを判断できるようにします。
書き込み時に関係/インデックスを作成する
覚えておくべきことの 1 つは、Redis には暗黙的なインデックスがないため、通常、書き込み中に自分自身を読み取るために必要なインデックス/関係をセットアップする必要があることです。基本的に、すべてのクエリ要件を事前に検討し、書き込み時に必要な関係を設定する必要があります。上記の RedisStackOverflow ソース コードは、これを示す良い例です。
注: ServiceStack.Redis C# プロバイダーは、主キーであるIdという一意のフィールドがあることを前提としています。ModelConfig.Id()構成マッピングで別のフィールドを使用するように構成できます。
Redis の永続性
2) Redis は、すぐに使用できる RDB と追加のみのファイル (AOF) の 2 種類の永続化モードをサポートしています。RDB は定期的なスナップショットを書き込みますが、追加専用ファイルはスナップショット間のすべての変更を記録するトランザクション ジャーナルのように機能します。それぞれの機能とアプリケーションのニーズに慣れるまで、両方を追加することをお勧めします。Redis の永続性はすべてhttp://redis.io/topics/persistenceで読むことができます。
注意 Redis は、http: //redis.io/topics/replicationで詳細を読むことができる単純なレプリケーションもサポートしています。
Redis は RAM が大好き
3) Redis は主にメモリ内で動作するため、最も重要なリソースは、データセット全体をメモリ内に保持するのに十分な RAM と、スナップショットをディスクに作成するときのバッファがあることです。Redis は非常に効率的であるため、小さな AWS インスタンスでも多くの負荷を処理できます。必要なのは、十分な RAM があることです。
Redis 管理 UI を使用してデータを視覚化する
最後に、 ServiceStack C# Redis クライアントを使用している場合は、エンティティの視覚的なビューを提供するRedis 管理 UIをインストールすることをお勧めします。http://servicestack.net/RedisAdminUI/AjaxClient/でライブ デモを見ることができます。