2017-01-19 1 views
0

Dans LMDB, si vous remplacez une entrée précédente dans la même transaction, il semble que l'espace de l'entrée précédente n'est pas libéré tant que les données n'ont pas été validées. Dans mon application, j'ai rencontré un cas où LMDB a manqué d'espace parce qu'une entrée particulière a été écrasée tant de fois, donc j'ai simplement augmenté la taille de la base de données pour contourner ce problème.LMDB utilisant de l'espace supplémentaire lors de l'écrasement d'entrées

Existe-t-il un moyen de libérer de l'espace inutilisé dans LMDB pour empêcher cette situation de se produire?

Répondre

0

Il n'y a pas de mécanisme de compactage dans lmdb. S'il existe des lecteurs actifs lorsqu'un auteur effectue des modifications sur des entrées, ces entrées sont copiées sur les nouvelles pages afin de préserver les lectures cohérentes. Lorsque les lecteurs ont terminé, les anciennes pages d'entrées sont renvoyées aux pages libres, disponibles pour les prochaines modifications. Donc, pour limiter le stockage à la consommation, il faut effectuer plusieurs petites écritures sans lecteurs actifs.