J'ai développé une base de donnée et pour ne pas avoir à tout charger en mémoire ( les données pouvant faire plusieurs dizaines de méga, voir plus ), j'y ai rajouté un système pour stoquer les données sur le disque, dans un fichier cache. Lors de la lecture/écriture, j'accède donc à un fichier pour en tirer ce que je veux.
Les données stoquées peuvent faire quelques octets mais aussi plusieurs méga ( cependant il y en a plus qui font 1 octet que 1 Mo ). J'utilise donc des blocs de taille variable en fonction de l'espace disponible dans le cache et la demande ( par exemple, pour une donnée de 10 octets je peut prendre deux blocs libres de 4 octets et alouer 2 octets supplémentaires au cache ). Lorsque je supprime une donnée, l'opération libère les blocs alloués ( contigues ou non ).
Mon problème est qu'au final après quelques centaines d'opérations mon cache est hyper fragmenté : je me retrouve avec des données de 2 Mo organisées en des milliers de blocs de 1 octet et c'est un vrai calvaire.
Je voudrais donc savoir, y a t il des algos spéciales qui pourraient me permettre de gérer mon problème de fragmentation, ou plutot, des théories sur la création d'un cache pour des données de taille variables en ayant beaucoup de petits blocs mais de très gros blocs ?
Merci d'avance ...
Partager