J'utilise la base de données sqlite dans ma plate-forme linux embarquée arm9. Je veux réduire les écritures sur la base de données de disque parce que mon disque est une mémoire flash et il a besoin de cycles d'écriture minimum. J'ai donc essayé d'incrémenter SQLITE_DEFAULT_CACHE_SIZE en tant que 5000. Mon objectif était d'écrire des données dans le cache et lorsque le cache est rempli, vider automatiquement sur le disque. Mais en incrémentant SQLITE_DEFAULT_CACHE_SIZE, je ne peux pas confirmer si cela fonctionne ou non. Je ne vois aucun changement dans les opérations! Est-ce que mon chemin est correct? Quelqu'un peut-il me donner des suggestions? Merci AneeshComment limiter le vidage de la base de données sur le disque?
Répondre
Le dernier SQLite has a feature for backing up hot databases il est encore au stade expérimental, mais ma recommandation serait d'utiliser une base de données sur la mémoire et la fusion avec la base de données du disque lorsque vous pensez est approprié.
Oui Robert vous avez raison, mais le problème est que je dois vider la base de données périodiquement, cela semble être trop risqué. Mon intention est de savoir si Sqlite supporte tout type de vidage par défaut basé sur Cache plein? J'ai fait quelques expériences basées sur le scénario ci-dessus en réglant PRAGMA journal_mode = MEMOIRE, PRAGMA SQLITE_DEFAULT_CACHE_SIZE = 5000 et PRAGMA synchrone = FULL, Mais le taux de rinçage semble être similaire sur la taille du cache de 2000 (par défaut) et 5000.Cela me fait me demander.please aide? –
Malheureusement ces options n'affecteront pas la vitesse à laquelle il va frapper le disque –
Tout d'abord merci pour vos suggestions valeur, vous dites que, le cache complet ne peut pas être utilisé comme un critère pour rincer les données de Ram à fichier disque? Si c'est le cas, alors mon problème peut résoudre sans aucun facteur de risque. Vous avez une autre option à proposer? Avancé merci, Aneesh –
Vous avez le code source SQLite - pourquoi ne pas simplement l'instrument pour enregistrer les informations que vous êtes intéressé par
Ouais ... c'est aussi simple que ça! – tylerl
S'il vous plaît élaborer, je n'ai pas compris votre suggestion !!!! –
Mmm, cette réponse est totalement sans rapport pour autant que je comprenne ... –
Ok Neil .Si le « SQLite utilise une forme de mise en cache d'écriture à travers », puis sur la. débordement de cache, il va essayer de vider les données à un fichier temporaire ou un fichier disque. C'est le même point que j'essaie d'expérimenter en augmentant la taille du cache et ainsi acquérir le contrôle sur le taux de rinçage mais il ne se passe pas. .
Tout d'abord, vous devriez probablement modifier votre question originale pour demander cela. Deuxièmement, la mise en cache à écriture immédiate signifie que toutes les écritures sont immédiatement validées sur le disque, mais les données écrites sont également conservées dans le cache. La taille du cache a donc peu ou pas d'effet sur la fréquence d'écriture sur disque. Comme je l'ai dit, je ne peux pas être sûr à 100% que cela se passe - regardez le code vous-même. –
SQLite doit être ACID db flushes à chaque validation OU à chaque insertion/suppression/mise à jour non encapsulée avec transaction. Utilisez les transactions pour regrouper les opérations OU désactivez ACIDity et réglez PRAGMA synchrone = OFF.
"PRAGMA synchrone = OFF" et SQLite ne seront pas données à chasse d'eau du tout (en laissant effectivement que pour OS Cache)
SQLITE_DEFAULT_CACHE_SIZE est seulement pour la taille du cache. Et le cache est utilisé UNIQUEMENT pour lire les données.
Il existe une autre option: vous pouvez implémenter votre propre couche VFS et empêcher l'enregistrement de la page avant que votre propre tampon ne soit plein. Mais je suis sûr que sync = off (ou beaucoup mieux d'utiliser les transactions) fera le travail assez bien (tout en ayant une bonne chance de corrompre votre db en cas de coupures de courant ou hard reset pour sync = off) .
Une autre indication est de mettre JOURNAL en mémoire ou de l'éteindre complètement. Encore une fois - il est en train de désactiver l'acidité, mais cela supprime également certaines touches du disque.
Je suis d'accord; structure de transaction est probablement où le plus grand avantage pourrait être trouvé. –
- 1. La structure de la base de données et le disque dur cherchent la confusion
- 2. Importer un vidage SQLite3 dans la base de données
- 3. Enregistrement sur disque d'une base de données en mémoire
- 4. Meilleure approche pour limiter le trafic de base de données sur les requêtes volumineuses?
- 5. Comment écrire un blob binaire sur le disque sur Informix
- 6. Limiter l'ajout de contrôle sur le panneau
- 7. Exécuter immédiatement sur le lien de la base de données
- 8. Enregistrer NSMutableArray sur le disque
- 9. Comment afficher un tableau de doubles sur le disque dur?
- 10. Comment limiter les ressources de mémoire globales de la base de données Oracle 10g
- 11. ADO.NET Entity: limiter la sélection de données basée sur Afficher
- 12. connexion de base de données SQL sur le serveur distant
- 13. C#: capture des données, affichage sur l'utilisateur, sauvegarde sur disque, téléchargement vers la base de données: approche BEST
- 14. Comment internationalisez-vous le texte dans la base de données?
- 15. Post-construction sur le projet de base de données
- 16. Enregistrement d'un fichier WAV sur le disque
- 17. Aide pour le vidage de la pile du serveur SQL
- 18. Comment trouver le fichier de base de données sur un périphérique virtuel Android?
- 19. SQL Server 2000 - Limiter par programme l'accès au propriétaire de la base de données?
- 20. Enregistrement d'images sur la base de données
- 21. Le fichier journal de la base de données est plein
- 22. Déterminer le chemin du fichier de la base de données
- 23. Base de données locale vs base de données basée sur le service lors de la création d'une application client WPF
- 24. Automatiser le déploiement d'un projet de base de données CLR à la base de données
- 25. Comment enregistrer un fichier xml sur le disque?
- 26. Limiter le nombre de résultats sur un ListView ASP.NET
- 27. comment imprimer le diagramme de base de données sql
- 28. Mettre en surbrillance le code de la base de données
- 29. Comment limiter le vote des utilisateurs sur leur propre modèle
- 30. Meilleure approche pour le transfert de données de la base de données distante à la base de données locale
Je ne suis pas sûr si je comprends votre exigence. Habituellement, les bases de données sont utilisées pour garantir les garanties transactionnelles. Pour ce faire, la base de données doit écrire sur le disque. Si vous avez des changements d'état qui ne sont pas importants, pourquoi prenez-vous la peine de mettre à jour la base de données? Vous pouvez simplement garder les changements d'état en mémoire et ne mettre à jour la base de données que lorsque vous devez persister vos modifications. – lothar
Normalement, cela ne signifie pas toujours. sqlite est utilisé dans de nombreux environnements exotiques comme mécanisme de stockage temporaire. Caches de données à distance sur un téléphone, par exemple - si le cache disparaît, il peut toujours être reconstruit, c'est juste plus lent. Dans ce cas, je veux que ce soit rapide, et je veux savoir si c'est corrompu. Mais la corruption est OK, aussi longtemps que je sais que mon magasin est invalide. Je peux le jeter de temps en temps. –