フォロワーをサポートするredisの簡単なニュースサイトを作成します。Twitterのようにユーザーのタイムラインをどのように整理できるか想像できません。Retwis( http://redis.io/topics/twitter-clone )について読んだのですが、そのフィード作成方法はばかげているようです。エントリを削除したい場合はどうすればよいですか?フォロワーフィードからすべてのエントリ参照を削除する必要があります。一部のユーザーをまだフォローしていない場合はどうなりますか?
1 に答える
少し想像力を使ってあなたが説明するものを攻撃するいくつかの方法があります、ここにあなたの質問に対処するいくつかの例があります:
エントリを削除したい場合はどうすればよいですか?
post:$postid:users
フィードに投稿を含めることができるすべてのユーザーIDを保持して、投稿ごとなどのセットを管理できます。uid:$userid:posts
投稿を削除する場合は、このセットからすべてのメンバーを抽出し、IDを反復処理して各セットから削除する必要があります。個々のアイテムを抽出して削除できるようにするには、元の記事が示唆しているようなリストではなく、最後の1つをセットに変換する必要がありますが、それは簡単ですが、ロジックは非常に似ています。
一部のユーザーをまだフォローしていない場合はどうなりますか?
個々のユーザーごとにフィードが生成される場合、作成者のユーザーpost:$postid
IDにアクセスできる各キーを必ず繰り返して読み取る必要があります。したがって、投稿を表示する前に、このIDを読んでuid:$userid:following
セットで検索します。そこにある場合は投稿を表示し、そうでない場合は削除してuid:$userid:posts
表示しません。
一言で言えば、これは、この種のロジックをredisで構築するために覚えておく必要があることです。
- 多くのコマンドが必要になりますが、それは問題ありません。Redisはそれをうまく処理するのに十分な速度であるはずです。
- データは繰り返されますが、それも問題ありません。各ユーザーがすでに投稿のセットを持っている場合、リレーショナルDBMSのバックグラウンドを持つユーザーが各投稿のユーザーのセットを保存するのは非常識に見えるかもしれませんが、これがredisのような非リレーショナルデータストアで関係を構築する唯一の方法です。
- 一般的に言えば、Redisでリレーショナルなものを設計するときは、セットとソートされたセットについて考えてください。
redisを使用すると、すべてを自分で行うことができますが、頭を悩ませると、実際にはかなり強力になります。