2011-08-04 4 views
1

これはもっと理論的な質問かもしれませんが、私は実用的な答えを探しています。Redisのソートセットはスケールされますか?

私は、計算された値に基づいて、私のデータベースでモデルのランキングを格納するのにRedis's Sorted Setsを使用する予定。現在、私のデータセットは小さいです(250人組)。私はソートされたセットが5,000人以上のメンバーになるかどうかは分かりません。 Redisは1GBの最大値を要求し、私の値はモデルのIDなので、ソートされたセットの値のスケーラビリティについては本当に心配していません。

ZRANGEはOの時間複雑度(ログ(N)+ M)を有します。私が最も頻繁にセットから上位5位のアイテムを取得しようとしている場合、N個のセットアイテムのlog(N)が懸念されるかもしれません。

Iはまた、O(N * K)+ O(M *ログ(M))の時間計算量を有するZINTERSTOREを使用する予定。私は頻繁にZINTERSTOREを使用して、私は私の質問は2倍だと思いZRANGE 0 -1

使用して結果を取得する予定。

  1. Redisはスケールを5,000のメンバーに問題なくソートしましたか? 10,000? 50,000?
  2. ZRANGEとZINTERSTORE(ZRANGEと組み合わせて)は、大きなセットに適用するとパフォーマンスの問題を表示し始めますか?

答えて

4

は私がソートされたセット内のキーの数十万人と何の問題もなかったしています。確かにセット全体を取得するには時間がかかりますが、セットが大きくなると予想されますが、I/Oスタンドポイントからでもそうです。

そのような場合は、それらの中に50Kへ> 150kのキーで使用されているいくつかのDBと、いくつかのソートセットとサーバ上にありました。高い書き込みは、1日に150Mを超えるレコードでリアルタイムのWebサーバーログ分析がピークに達するように、多くのzincrbyコマンドを使用するため、標準であった。そして、私は一度に1週間保管します。

私の経験から、私はそれを見て、見てみましょう。あなたのサーバのハードウェアが本当にローエンドでない限り、それはうまくいくでしょう。

0

Redisでは、スケーリングの制限があるソートセットです。ソートされたセットはパーティショニングできません。その結果、ソートされたセットのサイズがパーティションのサイズを超えた場合、Redisを変更せずに何もできません。記事から

引用:

パーティショニングの粒度がキーなので、非常に大きなソートセットのような単一の巨大な鍵を使用してデータセットをシャードすることはできません[1]。

リファレンス:

[1] http://redis.io/topics/partitioning

関連する問題