大きなキーのメモリ使用量をテストするために、Redis で実験を行いました。私は50 ~ 60 文字(バイト) の1600 万個の文字列 をロードし、ディスク上のおよそ802 MBを Redis のソート済みセットに取りました。このソートされたセットのために3.12 GB の RAMを使い果たしました (肥大化しました) 。
次に、ディスク上の 220 MB のスペースを占有する 1600 万個の短い文字列(10 ~ 12 文字) を別の並べ替えられたセットにロードしましたが、それでも2.5 GB の RAM を使用していました。ディスク上のスペース使用量の削減率が非常に高い (~72% 削減) ことは明らかですが、Redis の並べ替えられたセットは、大きな文字列によって使用されるかなりの量のメモリを使用しています。
同じことが Redis ハッシュの場合にも当てはまります (短い文字列は、長い文字列が使用するメモリのほぼ 80% を使用します)。Redis データ構造によって使用されるメモリは、データ構造 (ソートされたセットまたはハッシュ) 内の要素の数のみに依存し、各要素の長さには依存しませんか (文字列が短い => メモリが少ないと考えるのは自然なことです)?
理由が分かれば最高です
1600 万の長い文字列は、1600 万の短い文字列とほぼ同じスペースを使用します
sorted setで、短い文字列が占めるメモリを減らすためにできることがあれば(メモリの最適化)?