2016-08-26 12 views
0

私は数百万のキーを持つレディスデータベースを持っています。時間の経過とともに、私が書き込んだり読んだ鍵は変わってしまったので、これ以上使用していない鍵がたくさんあります。ほとんどの場合、TTLもありません。大規模なレディスDBの未使用キーの割合を確認

Redisデータベースのキーのうち何パーセントが使用されていないのかがわかります。私は、ハイパーログを使用して、書き込まれているキーの数の基数を見積もることができると考えていましたが、書き込まれて読み込まれるすべてのキーに対してPFADDを行うのはたくさんの作業のようです。

明らかに、私はまだ何かを削除したくない、私はちょうどデータベースの使用されたキーの数のいくつかの分析をしたいと思います。

答えて

0

時間ウィンドウでデータを分析し、hyperloglogを使用して各時間ウィンドウの基数を見積もることができます。

たとえば、あなたは毎日の分析のためhyperloglogを使用することができます。

// for each key that has been read or written in day1 
// add it to the corresponding hyperloglog 
pfadd key-count-day1 a b 
pfadd key-count-day1 c d e 

// for each key that has been read or written in day2 
// add it to the corresponding hyperloglog 
pfadd key-count-day2 a 
pfadd key-count-day2 c 

をこのケースでは、そのキーhyperloglogでdayNアクティブをしている鍵の推定数を取得することができますkey-count-dayNです。

pfcountとすると、の番号を有効にしてのキーを毎日または数日間得ることができます。これら2つのカウントで

// number of active keys in day2: count2 
pfcount key-count-day2 

// number of active keys in day1 and day2: count-total 
pfcount key-count-day1 key-count-day2 

は、あなたは2日目以降使用されていないキーの割合を計算することができます(count-total - count2)/count-total

0

私は、キーを反復処理するscanコマンドで開始し、上object idletimeコマンドを使用したいです各キーは、キーが最後に使用されてからの秒数を収集します。そこからメトリクスを生成することができます。

Redisを使用する方法の1つは、キーのidletimeをスコアとしてソートされたセットを使用することです。このHLLの利点は、zrangeおよび/またはzrevrangeを使用して「xとy秒前の間に鍵をアイドル状態にしてください」と言うことができることです。その結果、削除、アーカイブ、TTLの設定などの操作に使用できます。 HLLではこれを行うことはできません。

もう1つの利点は、結果をRedisに保存しない限り、実行するとRedisコストが発生することです。たとえば、キーにアクセスするときに追加の操作を行うためにコードを変更する必要はありません。

オブジェクトのアイドル時間の正確さは、思い出すと約10秒です。しかし、与えられた時間枠でどれだけ多くの鍵がアクセスされていないのかを知るためにはうまくいくはずです。

関連する問題