3

FacebookでSinatra&Redisを使用して恋人を再構築しています。

  • ユーザー間のリクエストと関係を管理するための操作を設定します
  • 近くのアプリユーザーを表示するための地理空間インデックス

現在のRedisの実装

各ユーザーには、uidを格納する2つのRedis順序セット( reqSent& )があります。リクエストを注文するのは、リクエストが行われたreqRecv(UNIXタイムスタンプ)です。ユーザーはリクエストタイプ(rid)のみを作成できるため、リストの代わりに順序セットを使用しています。リクエストタイプ(rid)は数値としてエンコードされ、uidの前に付加されます。(rid | uid)たとえば、uid = 100のユーザーの場合、次のようになります。SCOREtime

100:reqSent => ["1|123", "2|123", "2|134"]  # format: ["rid|tid"]
100:reqRecv => ["3|343", "5|142", "4|2224"] # format: ["rid|uid"]

MongoDBは地理空間インデックスをネイティブにサポートしているので、それに切り替えることを考えています。

それ以外の場合、Redisで地理空間インデックスをどのように実装する必要がありますか?Sunspot(localsolr)でやるべきですか?どうやら、 RedisでSunspotを使用できます。

4

2 に答える 2

7

私は複数のプラットフォームを避けるのが好きで、redis を使用して同様のものを実装しました。地理空間インデックス作成は、redis で他のものにインデックスを作成することとそれほど違いはありません。緯度/経度を適切な地域をカバーする単一の数値に変換する関数が必要なだけで、数値をその地域のすべてのユーザーを含むセットのキーとして使用します。適切なエリアを選択した場合、そのセットとおそらくその近隣の一部を取得すると、最終的なフィルタリング/並べ替えのために実際の距離計算を実行するのに適切な数のユーザーが得られます。

地理空間クエリの一般的なケースを実装するのは非常に困難ですが、それは必要ありません。いずれにせよ、redis はアドホック クエリには不適切なプラットフォームです。

于 2011-01-10T02:15:03.157 に答える
4

MongoDBが有効なオプションであると考える場合、Redisに地理空間インデックスを実装するのは非常に時間がかかるように思われます。Mongoは高速で、操作が非常に便利です。クエリの大部分が地理空間インデックスに対するものである場合、私の意見では、Mongoを使用しない理由はありません。

同じプロジェクトでMongoとRedisの両方を使用していることがよくあります。どちらも非常に便利なプロパティを備えており、Mongoで非常にうまく機能するユースケースもあれば、Redisでうまく機能するユースケースもあります。ただし、その逆も当てはまります。Redisで正しく処理するのが非常に難しいものもあれば、Mongoでは実際には不可能なものもあります。地理空間インデックスは前者の例であり、集合演算は後者の例です。

また、Sunspotについてあまり知らなくても、本当にRedisを使用するのでしょうか。ストレージにファイルシステムを使用するSolrを使用していませんか?Redisをそこに入れることができるように私には聞こえません。私が完全に間違っていない限り、MongoDBを使用する必要があると思います。

于 2011-01-09T07:53:51.000 に答える