Dans la base de données du Cabinet de Kyoto en utilisant la base de données de Hash du fichier, comment peut éviter la taille des fichiers de plus en plus?

StackOverflow https://stackoverflow.com/questions/4320913

Question

J'utilise le suivi pour ouvrir:

db.open("db.kch#tune_defrag=10000", DB.OWRITER | DB.OCREATE)

Je suis en train et en supprimant des éléments. A la fin de l'exécution, la base de données est « vide », la fonction retourne le nombre (0), car je supprimer tous les éléments. Pourquoi la taille du fichier toujours augmenter quand je répète le test? Est-il possible d'exécuter quelque chose comme « garbage collector » pour nettoyer les registres supprimés? Si j'exécute le même test 100 fois, j'ai une base de données de taille de 500 Mo, même je n'ai que deux dossiers.

J'ai essayé de mettre le « tune_defrag = 10000 » mais je pense que ça n'a pas très bien.

Obs .: un registre est uniquement inférieur à 1K, je ne comprends pas pourquoi les registres prennent tant de place dans le disque.

Merci pour toute aide

Était-ce utile?

La solution

Essayez ceci:

db.kch#dfunit=8

Cela signifie que le KC fonctionne defrag pour chaque 8 fragmentation détectée, et 8 est effectivement recommandé par Mikio.

Les options disponibles sont énumérées ici, mais il pourrait utiliser un polonais.

http://fallabs.com/kyotocabinet/command.html

Autres conseils

en cours d'exécution:

kchashmgr defrag path_to_kcabinet_file

est ce que je fais pour obtenir le fichier db 'redimensionnée. Je ne trouve pas l'accès api à cela, qui est la raison pour laquelle je le fais avec une commande shell en utilisant l'utilitaire de kchashmgr (obviosuly cela peut être appelé à l'intérieur d'un programme).

Je ne l'ai pas utilisé ce db particulier, mais dans quelques autres un hack pour résoudre ce problème est de copier le db dans un nouveau, puis supprimez l'ancien. Après s'être assuré qu'il copie bien:)

.

J'ai mis ce processus dans les systèmes de production, tant qu'il est codé vraiment très bien cela devrait fonctionner.

D'un coup d'œil à travers la documentation de kyoto il ne semble pas que vous avez un moyen de redimensionner ou autrement nettoyer la base de données des enregistrements supprimés ... ou vraiment pour le gérer en toute nature ou forme.

Ce projet a ressemble, il est loin d'être « prêt pour la production ». Si vous voulez vraiment la mettre en œuvre, je vous suggère de contacter les propriétaires du projet (http://fallabs.com/) et de voir s'ils ont des plans pour certaines fonctions utilitaires indispensables.

Dans le cas contraire, je vous suggère de passer à une base de données de style NoSQL différent qui est un peu plus mature.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top