2010-07-13 5 views

Répondre

3

Qu'entendez-vous par compact/shrink? Rendre une base de données existante plus petite? Ou voulez-vous compresser la base de données? L'un des rôles est defragmentation. Cela libère de l'espace inutilisé dans la base de données. Lorsque vous supprimez des objets, la base de données ne rétrécit pas. Au lieu de cela, l'espace est marqué comme libre pour de nouveaux objets. Cependant, avec le temps supplémentaire avec la manipulation de la base de données, le fichier est fragmenté. La défragmentation ramène donc l'espace inutilisé dans la base de données.

Lorsque vous stockez beaucoup de chaînes, vous devez envisager d'utiliser UTF8 encoding au lieu d'unicode complet par défaut. Cela économise beaucoup d'espace, car un caractère utilise désormais un seul octet.

EmbeddedConfiguration config = Db4oEmbedded.newConfiguration(); 
config.common().stringEncoding(StringEncodings.utf8()); 
ObjectContainer database = Db4oEmbedded.openFile(config,"database.db4o"); 

Notez que vous ne pouvez pas modifier ce paramètre pour les bases de données existantes! Vous devez défragmenter la base de données afin de changer le codage de chaîne.

Pour compresser la base de données, vous pouvez utiliser une compression storage-implementation. Cependant, je ne connais aucune implémentation disponible qui le fait.

+0

bien la raison pour laquelle je demande est parce que j'utilise un programme appelé RSSOwl (off of sourceforge). La base de données pour le programme est maintenant à près de 2 Go et on m'a dit sur leurs forums qu'il est possible de supprimer des nouvelles du programme, mais que le db ne sera jamais plus petit. Donc, si les objets sont supprimés de la base de données, mais la taille ne diminue pas, je supposais qu'il devait y avoir un moyen de perfrom une opération compacte ou rétrécir. Juste je ne peux pas le trouver ... – NinjaCat

+0

db4o Défragmenter fera ce que vous voulez. Vous devriez l'exécuter avec les sources RSSOwl dans le CLASSPATH. Vous pouvez demander aux gars RSSOwl d'inclure Defragment dans leur produit. C'est vraiment facile pour eux. C'est juste 3 lignes qu'ils doivent ajouter à leur code et un élément de menu supplémentaire pour leur application. –

+0

Wow ... existe-t-il un utilitaire pour cela, ou dois-je écrire une petite application? – NinjaCat