4

20 個のフィールドを持つオブジェクト A があり、オブジェクト A のインスタンスが 100 万個あります。

それらを Redis に保存したいのですが、毎回 100 を超えるインスタンスを取得する必要があります。

今、私は2つの解決策を持っています

  1. オブジェクト A のインスタンスを json でシリアル化し、保存して使用するSET key json
  2. 各フィールドをハッシュ フィールドに格納します。すべてのインスタンスがハッシュ マップに対応します。前述したように、毎回 100 を超えるインスタンスを取得する必要があります。したがって、redis ハッシュを使用する場合、何百ものパイプラインを呼び出す必要HGETALL keyがあり、非常に遅くなります。ハッシュを使用して速度を改善できるかどうか知りたいですか?
4

2 に答える 2

3

これは、いくつかのことに依存します。

  1. Redis サーバーで使用できる RAM の量
  2. 保存したいオブジェクトの数
  3. シリアル化されたオブジェクトとそのフィールドのサイズ

シリアル化されたオブジェクトを格納すると、生データと共にすべての言語固有の追加情報が格納されるため、より多くのスペースが必要になります。RAM が不足している場合、または大量のオブジェクトを保存する必要がある場合は、おそらく、このすべてのデータをハッシュに保存するのが最善でしょう。100 万行あるので、ハッシュを使用するとおそらくかなりのスペースを節約できます。

私は最近、非常によく似た問題に遭遇しました。最初はシリアル化されたオブジェクトを Redis DB に保存しようとしましたが、500 万を超えるオブジェクトを保存する必要があり、各オブジェクトには DB に保存する必要のない余分なデータがたくさん含まれていました。これにより、DB サイズが肥大化し、かなりの量の RAM が浪費されました。

あなたの要件はおそらく私のものとはかなり異なるので、自分でベンチマークするのが最善です。オブジェクトをシリアライズしてみて、結果の大きさを確認してください。それをキーの合計のサイズと比較し、2 つのサイズの差を比較します。シリアル化されたオブジェクトがそれほど大きくない場合は、単にシリアル化することをお勧めします。また、シリアル化解除は無視できる操作ではないことに注意してください。

于 2013-04-02T20:54:34.747 に答える