Existe-t-il un moyen de pré-allouer ma base de données SQLite à une certaine taille? Actuellement, j'ajoute et supprime un certain nombre d'enregistrements et je voudrais éviter cela au moment de la création.SQLite - pré allocation de la taille de la base de données
Répondre
Il y a un hack - Insérez un tas de données dans la base de données jusqu'à ce que la taille de la base de données est ce que vous voulez, puis supprimez les données. Cela fonctionne parce que:
« Quand un objet (table, index, ou déclenchement) est passé de la base de données, il laisse derrière lui un espace vide Ce espace vide sera réutilisé la prochaine nouvelle information temps est. ajouté à la base de données Mais en attendant, le fichier de base de données peut être plus grand que strictement nécessaire. "
Naturellement, ce n'est pas la méthode la plus fiable. (De plus, vous devrez vous assurer que la fonction auto_vacuum est désactivée pour que cela fonctionne). Vous pouvez en apprendre plus ici - http://www.sqlite.org/lang_vacuum.html
Comme je l'ai dit dans ma question, c'est ce que je fais actuellement. Mais merci pour l'indice auto_vacuum! – paul
Content de vous aider. Une autre chose qui pourrait vous aider à améliorer légèrement les performances de la base de données SQLite est de s'assurer que vous défragmentez le fichier db (surtout si vous utilisez Windows). – Sam
Le meilleur moyen de le faire est avec la fonction zero_blob:
Exemple:
Y:>sqlite3 large.sqlite
version SQLite 3.7. 4
Entrez ".help" pour les instructions
Entrez les instructions SQL terminées par un ";"
sqlite>créer une grande table (a);
sqlite>insérer en grandes valeurs (zéroblob (1024 * 1024));
sqlite>drop table large;
sqlite>.q
Y:>dir large.sqlite
Volume dans le lecteur Y est personnelle
Volume Numéro de série est 365J-6110
Répertoire des Y: \
01/27/2011 12:10 PM 1 054 720 grand.sqlite
Note: Comme Kyle l'indique correctement dans son commentaire:
Il y a une limite à la taille de chaque BLOB, donc vous devrez peut-être insérer plusieurs blobs si vous prévoyez que votre base de données soit plus grande que ~ 1GB.
Notez qu'il existe une [limite] (http://www.sqlite.org/limits.html) à la taille de chaque blob, donc vous devrez peut-être insérer plusieurs blobs si vous pensez que votre base de données est plus grande que ~ 1 Go –
@Kyle: Bon point, j'ai mis à jour la réponse pour inclure cette information – Noah
- 1. Données de base Problème SQLite pré-rempli, z-metadata
- 2. Outil d'estimation de la taille de la base de données
- 3. Récupération de la base de données de MySQL vers SQLite
- 4. Déterminez la taille de la base de données SQL Server
- 5. Vider uniquement une partie de la base de données sqlite
- 6. taille de la base de données tfs - contrôle de version
- 7. Meilleure façon de synchroniser la base de données client avec la base de données du serveur
- 8. Taille de la base de données via WMI dans .NET
- 9. Crypter la base de données SQLite en C#
- 10. Comment utiliser la base de données SQLite dans JME?
- 11. la taille des colonnes de base de données pour les données à base de caractères
- 12. Gestion de la mémoire lors de l'utilisation de la base de données sqlite dans l'iphone
- 13. Est-il possible de connaître la taille/taille de vos tables de base de données?
- 14. C++ Allocation dynamique de la mémoire
- 15. iPhone - Base de données SQLite Lecture
- 16. Quelle est la meilleure façon de convertir une base de données mysql en une base sqlite?
- 17. Chargement de la base de données iPhone
- 18. Utilisation de plusieurs bases de données SQLite à la fois
- 19. Obtenir la valeur de la clé primaire à partir de la base de données SQLite en utilisant des données de base dans Iphone
- 20. Meilleur moyen de rechercher base de données sqlite
- 21. Problème de base de données Adobe Air/Flex + SQLite
- 22. Remplacement du fichier SQLite de données de base dans l'application
- 23. Modification de la base de données sous SQLObject
- 24. lire des guillemets et des guillemets simples à partir de la base de données Sqlite
- 25. conserver une table de journal dans la base de données sqlite?
- 26. Charger la base de données SQLite à partir de SQL Server distant?
- 27. Certaines modifications apportées à la base de données SQLite ne persistent pas après la fermeture et la relance de l'application
- 28. Synchronisation d'une base de données client SQLite avec une base de données MySQL
- 29. Quelle est la taille maximale d'une base de données MySQL dans la version 5 et supérieure?
- 30. Copier la base de données de la base de données Mysql
Pourquoi supposez-vous qu'il existe un surdébit que vous pouvez éviter? Cela compte-t-il même pour votre application si vous le pouvez? Je pense que vous essayez de faire une "optimisation prématurée" http://en.wikipedia.org/wiki/Optimization_(computer_science) et de Donald Knuth nous avons appris que "Nous devrions oublier les petites économies, disons environ 97% du temps: L'optimisation prématurée est la racine de tout Mal." – lothar
Il y a un besoin légitime de faire cela qui n'est pas lié à l'efficacité. [Certains systèmes de fichiers] (http://blogs.technet.com/b/mikelag/archive/2011/02/09/how-fragmentation-on-incorrectly-formatted-ntfs-volumes-affects-exchange.aspx) ont une limite sur le nombre de fragments que le fichier peut avoir. Si vous connaissez la taille de votre base de données, vous pouvez éviter le problème en pré-allouant le fichier. –