2016-08-26 3 views
0

J'ai une base de données Redis avec plusieurs millions de clés. Au fil du temps, les touches sur lesquelles j'ai écrit et lu ont changé, et il y a donc beaucoup de clés que je n'utilise tout simplement plus. La plupart n'ont pas de TTL non plus.Déterminer le pourcentage de clés inutilisées dans un grand redis DB

Je veux savoir quel pourcentage des clés de la base de données Redis n'est plus utilisé. Je pensais que je pourrais utiliser hyperloglog pour estimer la cardinalité du nombre de clés qui sont en cours d'écriture, mais il semble que beaucoup de travail pour faire un PFADD pour chaque clé qui est écrite et à lire.

Pour être clair, je ne veux pas encore supprimer quoi que ce soit, je veux juste faire une analyse sur le nombre de clés utilisées dans la base de données.

Répondre

0

Vous pouvez analyser les données avec une fenêtre temporelle et utiliser hyperloglog pour estimer la cardinalité de chaque fenêtre temporelle.

Par exemple, vous pouvez utiliser un hyperloglog pour l'analyse de chaque jour:

// 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 

Dans ce cas, vous pouvez obtenir une estimation du nombre de clés qui sont actives dans Dayn avec le hyperloglog dont la clé est key-count-dayN.

Avec pfcount, vous pouvez obtenir le nombre de clés actives pour chaque jour ou plusieurs jours.

// 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 

Avec ces 2 chefs d'accusation, vous pouvez calculer le pourcentage de clés qui sont inutilisés depuis day2: (count-total - count2)/count-total

0

Je commencerai par la commande scan à itérer les touches, et utilisez la commande sur object idletime chacun pour collecter le nombre de secondes écoulées depuis la dernière utilisation de la clé. De là, vous pouvez générer des métriques comme bon vous semble. Une façon, en utilisant Redis, serait d'utiliser un ensemble trié avec le idletime de la clé comme score. L'avantage de ceci sur HLL est que vous pouvez alors dire "donnez-moi des clés inutilisées il y a entre x et y secondes" en utilisant zrange et/ou zrevrange. Les résultats de ce que vous pourriez ensuite utiliser pour des opérations telles que la suppression, l'archivage ou la définition d'une durée de vie. Avec HLL, vous ne pouvez pas faire cela.

Un autre avantage est que, sauf si vous stockez le résultat dans Redis, il n'y a qu'un coût Redis lorsque vous l'exécutez. Vous n'avez pas besoin de modifier votre code pour effectuer des opérations supplémentaires lors de l'accès aux clés, par exemple.

La précision du temps d'inactivité de l'objet est d'environ dix secondes si je me souviens bien. Mais pour avoir une idée du nombre et des clés qui n'ont pas été consultées dans un délai donné, cela devrait fonctionner correctement.