約 1 億 5000 万のキーと値のペアを保存する必要があります。キーは整数で、値は整数のセット (順不同) です。32 GB の RAM と 8 コアの CPU を搭載した個人用デスクトップで、単一のインスタンスとして redis を使用しています。
これには「SADD」コマンドを使用します。私が使用するクライアントは、hiredis とパイプラインです。したがって、コマンドは次のようになります。
redisAppendCommand(context,"SADD %d %d %d",integer_key, integer_value1, integer_value2 );
実行時間: Linux の「time」コマンドを使用すると、次の結果が得られます。
real: 8m 30s
user: 5m 18s
sys: 0m 7s
メモリ使用量:
redis では、データベースは約 18 GB を使用し、redis のメモリ フットプリントは 28 GB まで増加します。
キーは「94190049249988」のようになります。
"keys.bytes-per-key": (整数) 1830。
以下は、速度を向上させ、メモリフットプリントを削減するために私が試した最適化です:-
1) 速度を向上させるためのパイプライン処理。
2) メモリ フットプリントを削減するための整数のセットの格納。これは int-set エンコーディングを使用します。
これらの 1 億 5000 万個の Key-Value を保存するためのメモリ効率と速度効率の良い方法はありますか?
どうにかして HSET のような他のデータ型を使用する必要がありますか? それは役に立ちますか?
他に試すことができる最適化はありますか?
私のユースケースでの他のデータストアの推奨も高く評価されます。