Redis データベースを次のように使用します。
key -> (file1, file2, file3)
値は常に 3 つの圧縮ファイルのリストです。
すべてのキーに 3 つのファイルがあるわけではありません。
key2 -> (file4, file5)
ファイルは zlib を使用して圧縮されます。ファイルのサイズは 50 ~ 120 K 圧縮されています。
「完全な」キー(リストに3つのファイルがあるもの)をデータベースに保存したい。
これまで、データを MySQL テーブルに保存していました。
key_id : INTEGER , PRIMARY KEY
first : BLOB
second : BLOB
third : BLOB
これは、挿入が遅いことを除いて、かなりうまく機能します (Mysql Server は同時に他のことも行います)。
データをクエリすることはめったにありませんが、1 つずつ簡単に取得できるようにしたいと考えています。
Redis はデータベースであり、ファイル (rdb ファイル) にダンプできることを知っています。
したがって、別の DBMS を使用するのは冗長性だと思います。しかし、redis データベースはメモリが限られているため、値 (ファイル) の作成が完了するのを待ってから、rdb ファイルにダンプすることはできません。
「完全な」キーのみを含む小さな rdb ファイルを作成したいと考えています。すなわち
時間 1 で、redis には以下が含まれます。
key3 -> (a, b, c)
key14 -> (e, f)
key1 -> (g, h, i)
次に、ダンプファイルを 1.rdb にダンプすることにした場合、次のもののみを含める必要があります。
key3 and key14
ダンプが成功したら、ダンプされたキー (key3、key4) を削除します。
redis には以下が必要です。
key14 -> (e, f)
5 の時点で、redis には以下が含まれます。
key5 -> (i, j , k)
key14 -> (d, e, f)
key6 -> (l, m)
したがって、2.rdb に保存すると、ファイルには以下のみが含まれます。
キー5、キー14
次に、上記のキーを redis から削除する必要があります。
それは可能ですか?問題があれば、私はpythonを使用しています。
このタスクについて別のアイデアはありますか? 別の DBMS 、ファイルシステムなどに直接保存します。
PS合計で約15.000.000個のキーがあるため、15.000.000 * 3ファイルになることを忘れていました。
また、ext3ファイルシステムでLinuxを使用しています