1

電話番号をデータのハッシュにマッピングする、約 1 億個のキーを含む巨大な Redis データベースがあります。

時々、このすべてのデータを集約して SQL データベースに保存する必要があります。集計中に、保存されているすべてのキーを反復処理し、それらの配列を確認する必要があります。

Redis.keysキーのリスト全体を取得してメモリに保存し、完了するまでに非常に長い時間がかかるため、使用は適切なオプションではありません。次のように、すべてのキーを反復処理するために使用できる列挙子を返すものが必要です。

redis.keys_each { |k| agg(k, redis.hgetall(k)) }

これはRedisでも可能ですか?

これにより、Ruby はメモリ内に 1 億要素の配列を構築できなくなり、おそらくはるかに高速になります。プロファイリングでは、Redis.keysコマンドを使用すると Ruby が CPU を 100% 占有しますが、Redis プロセスはアイドル状態のようです。

キーを使用してキーからセットを構築することはお勧めできませんが、キーからセットを構築し、smembers を使用してそれを取得したとしても、同じ問題が発生します。

4

1 に答える 1