2016-09-01 7 views

答えて

3

ことで非常に大きく、2^64-1 64のビットシステム、および2^32 -1 32ビットシステム、 https://groups.google.com/d/msg/redis-db/eArHCH9kHKA/UFFRkp0iQ4UJ

1)すべてのRedisのデータベース内のキーの数:2^64ビットシステムで64-1。 32ビットシステムで2^32-1。 2)各ハッシュのハッシュフィールドの数: 64ビットシステムで2^64-1。 32ビットシステムにおける2^32-1。

32ビットインスタンスが最大4GBのアドレス指定可能なスペースを持つと仮定すると、 には到達できません。 64ビットインスタンスの場合、2^64-1の大きさを考慮すると、 には到達できません。

実用的な観点から見ると、鍵とハッシュは、ご使用のRAMの量によって制限されています。

サルヴァトーレ

+0

良い情報 – Jason

2

Redis documentationによると、このような制限はありません。

実際にはハッシュの内側に置くことができるフィールドの数は、(使用可能なメモリ以外)は実用上の限界

を持っていない私はHASHにデータを保存するためにも、パフォーマンスペナルティはありませんと思います。しかし、あなたが非常に大きいHASHを持っているなら、HGETALLに電話することは常に悪い考えです。 HGETALLはのすべてのフィールドと値を返し、HASHが非常に大きい場合、Redisインスタンスを長時間ブロックします。

HASHがキー値ストアより優れているかどうかは、シナリオによって大きく異なります。

+0

をとても100000キーのパフォーマンス値のペアは1つのキーとほぼ同じで、ハッシュのあるフィールドは100000です。 – Jason

+0

@Jasonはい、パフォーマンスはほぼ同じです。理論的に言えば、Redisはキー索引を最初に検索してから、HASHのフィールド索引を検索する必要があるため(2つの索引検索VS 1索引検索)、「HASH」が遅くなる可能性があります。ただし、索引検索は非常に高速で、その違いを無視することができます。私は一度同様のテストを行いましたが、パフォーマンスはほぼ同じです。 –

+0

、あなたの情報をありがとう。 – Jason

3

私はLuaのクライアントを使用して、このための簡単なテストのカップルをしました。

私は、単一hmsetコマンドを使用して、個々のhmsetコマンド100,000フィールドを格納しようとした、および個々のコマンドをパイプライン化し、彼らが完了するまでにかかった時間時限:

hmset 100000のフィールド:3.164817

hmset個々のフィールドを:パイプラインの9.564578

hmset:4.784714

1,000,000+が長すぎる取っていたが、あなたがいじくり回すしたい場合は、コードはここにあるように私は大きな値をしようとしませんでした。 https://gist.github.com/kraftman/1f15dc75649f07ee044eccab5379a8e3

あなたはあまりにも多くのフィールドを追加したら、あなたはハッシュのストレージ効率を失う念頭に置いてアプリケーションクマに応じて、(「あまりにも多くの」設定することができ、詳細はhereを参照してください。

+0

あなたのテストをありがとう、私のシナリオは1つのキーと10000フィールドです。 – Jason

+0

私は間違った用語を使用したと思います:私は1つのキー 'newhash'を設定し、10万フィールドで、私は私の答えを編集します。 –

関連する問題