2011-08-14 6 views
0

私はXとYの2種類のユーザーを持つWebサイトを構築しています。Xは数百になり、Yは数百万になります。基本的に各Xには、いくつかのYセットがあります。 Yはネットワークに友人を追加します。 Xは特定のYの集合に見えるメッセージを投稿し、そのメッセージを友人に転送することができます。友人はそのメッセージを見ることができ、友人に転送したり、送信者に返信することができます。Redis/NoSQLデータベースのユースケースに関連する質問

これは私の使用例です。私は、Webサイトの主な懸念事項としてシステムのスケーラビリティとパフォーマンスを考慮しているため、主にNoSQLデータベースのさまざまな種類のデータベースを検討していました。私はSpring Data Redis APIを使い始めており、私のユースケースには非常に役立つことがわかりました。ここでの私の質問は、RedisのNoSQLデータベースで「更新」操作を実行する方法です。 Redisに保存されているユーザー情報を更新したいとします。もう1つの質問は、30歳未満のすべてのユーザーに「年齢」フィールドを持つユーザー情報をレディスに保存している場合、どのように操作するのかです。

私はNoSQLの世界ではかなり新しく、その経験はあまりありません。また、私のユースケースに合った適切なデータベースについて、経験豊富な人から聞きたいと思うでしょう。私は以前に、データベースとしてMySQLとSpring、Hibernateの組み合わせを使用していましたが、負荷が重い場合はシステムのパフォーマンスに満足できませんでした。

おかげで、 サチン

答えて

2

はここに私の質問は、私たちが、具体的Redisの中のNoSQLに データベースを「更新」操作を実行しない方法です。 Redisに保存されているユーザー の情報を更新したいとします。

これは、ユーザーを格納する構造によって異なります。 A fifteen minute introduction to Redis data typesチュートリアルは、これらのデータ構造のより大きな図を得るのに役立ちます。通常、更新はSET操作で行われるので、ユーザー情報を​​3210構造体に保存していて、特定のフィールドを更新したい場合はHSETコマンドを使用します。

もう一つの問題は、私が30歳の下に、我々は「年齢」フィールドを持っているのRedisでユーザー 情報を格納している提供されているすべての ユーザー私を得るなどの操作を実行します方法です。

Redisは、高度なキー/値のデータストアであり、SQLワールドから慣れている可能性があるように、ad hocのデータのクエリをサポートしていません。この問合せ機能が必要な場合は、それをサポートする他のNoSQLソリューションを検討する必要があります。たとえば、MongoDBまたはthisリストを参照してください。

2

Redisが望むことができるかどうかを確認する最善の方法は、開発マシンにインストールし、redis-cliを試してみることです。この組み込みのクライアントには、コマンドの補完機能とヘルプ機能があります(カテゴリーを見るにはhelp <TAB>を打つだけです)、良い文書はhttp://redis.io/commandsにあります。

ご要望に応じて、sorted setデータ構造を調べて、ユーザーの情報を保存する必要があります。

がこれに含まれている、あなたは、データベースに18年から30年の間にすべてのユーザーを照会することができるようにしたいと仮定します。あなたが見るように、それはは、あなたの質問のいくつかの基本的な形をができないので、これは、単独のsetsよりも優れています(例として)3ユーザー:ジョー、28歳;ボブ、17歳。アダム、50年。構文はZADD [key] [score] [member]ある

ZADD age 28 Joe 
ZADD age 17 Bob 
ZADD age 50 Adam 

あなたはRedisのように移入でしょう。セットは[key]であり、ソートセットではそれぞれ[member][score]であり、はダブルでなければなりません。これは、文字列パターンや文字列値を使ってスコアを照会することができないことを意味します(この時点でMongoはより良いはずです)。

したがって、照会する時間。私は今redis-cliクエリを貼り付けます:


は18年から30年の間、すべてのユーザーを一覧表示するには、あなたはどうなる:

redis> ZRANGEBYSCORE age 18 30 
1) "Joe" 
redis> ZRANGEBYSCORE age 18 30 WITHSCORES 
1) "Joe" 
2) "28" 

オプションWITHSCORESは、結果の各メンバーのスコアを示しています。 18歳未満のすべてのユーザーを一覧表示するには


redis> ZRANGEBYSCORE age 0 (18 
1) "Bob" 
redis> ZRANGEBYSCORE age 0 (18 WITHSCORES 
1) "Bob" 
2) "17" 

(修飾子は、先頭や末尾間隔が開くことができるようになります。それはwhere age >=0 and age < 18のようになります。 30歳以上のすべてのユーザーが一覧表示するには


redis> ZRANGEBYSCORE age 30 +inf 
1) "Adam" 
redis> ZRANGEBYSCORE age 30 +inf WITHSCORES 
1) "Adam" 
2) "50" 

+infは無限大ですので、結果に上限はwhere age >= 30のように、ありません。

など。


これはまさに始まりです。最適化されたライブラリ(phpredisなど)を使用すると、ソートされたセットで交差、結合、select count(*)操作をすべて高速で行うことができます。あなたは今それの良い印象を得ることを願っています。

関連する問題