Je travaille sur une classe de base de données basée sur pdo, la base de données utilisée est une base de données mysql, mais je veux mettre en cache la base de données pour obtenir plus de performance. Serait-ce une bonne idée de mettre en cache la base de données dans une base de données en mémoire SQlite et de faire les SELECT sur ce (et mettre à jour la base de données sur un INSERT, UPDATE, ...) db? Mais, quand j'écris "cache = new PDO ('sqlite: memory');" en crée-t-il un nouveau ou utilise-t-il le db existant? En outre, si un serveur héberge plusieurs sites Web, comment utiliser différentes bases de données en mémoire?PHP: Cache de base de données (avec sqlite in-memory)
Répondre
Chaque base de données SQLite en mémoire est spécifique à la connexion. Même lorsque vous ouvrez deux connexions à : memory: dans le même processus deux bases de données en mémoire distinctes sont créées. La réponse est donc qu'une nouvelle base de données est toujours créée et n'utilise jamais une base de données existante.
Soyez prudent lorsque vous utilisez un nom correct pour créer une base de données en mémoire. Tout autre nom que : mémoire: (comme : memorry: ou mémoire ou /: mémoire:) ne crée pas en mémoire la base de données, mais une base de données de fichiers réguliers. Cela arrive silencieusement.
Le gain de performances que vous obtiendrez avec la mise en cache suggérée est susceptible d'être faible. Si vous choisissez MySQL et que l'ordinateur dispose de suffisamment de mémoire, il est probable que les données soient déjà dans la RAM en raison de la mise en mémoire tampon du disque du système d'exploitation. Donc, l'ajout d'une autre couche de RAM sous la forme d'une base de données en mémoire SQLite n'aidera pas beaucoup.
La mise en cache suggérée conduit facilement à une logique de mise en cache complexe ou incorrecte si le système n'est pas en lecture seule. Si un processus effectue une mise à jour de données, il doit mettre à jour son cache, mettre à jour la base de données MySQL et créer un mécanisme pour indiquer aux autres processus que leurs caches ne sont plus valides et qu'ils doivent lire les données de MySQL. Sinon, vos données deviennent rapidement un gâchis. Et pensez-vous que se passe-t-il lorsque deux processus décident de mettre à jour les mêmes données en même temps mais à des valeurs différentes? Vous avez un conflit.
Pour obtenir plus de performance, je voudrais d'abord régler le serveur et MySQL. Si ce n'est pas assez, je voudrais ajouter un cache comme Memcached qui n'est pas spécifique au processus d'application mais un processus séparé. Même dans ce cas, vous devez veiller à créer la logique de l'application de manière à ce que les données restent cohérentes lors des mises à jour. Si vous n'utilisez que MySQL et que vous faites des transactions correctes avec InnoDB, MySQL le fait pour vous.
- 1. Peut-être sqlite être une base de données inmemory également?
- 2. Base de données InMemory pour l'application DotNet
- 3. infrastructure de données inmemory
- 4. PHP SQlite Formulaire de base de données
- 5. Xcode UIWebView avec base de données SQLite
- 6. Accéder à la base de données SQLite avec PHP
- 7. Suming valeurs dans la base de données SQLite avec php
- 8. base de données SQLite
- 9. base de données sqlite
- 10. base de données SQLite
- 11. Base de données SQLite avec FMDatabase Wrapper
- 12. Base de données SQLite, objets avec Bitmap
- 13. Données de base avec plusieurs fichiers sqlite
- 14. Base de données Android SQLite
- 15. Synchronisation des données de base de données en ligne avec base de données sqlite locale android
- 16. Cache de requête dans SQLite
- 17. Structure de base de données simple (SQLite-)
- 18. Base de données SQL Compact avec PHP
- 19. base de données SQLite application
- 20. Base de données Android-SQLite
- 21. Base de données sécurisée SQLite
- 22. base de données SQLite Android
- 23. Le script PHP crée une base de données SQLite corrompue
- 24. Base de données LocalStorage ou SQLite?
- 25. sqlite aide de base de données
- 26. Création d'une base de données de cache de courrier électronique
- 27. phonegap - question de base de données sqlite
- 28. android sqlite curseur de base de données
- 29. Android schéma de base de données Sqlite
- 30. Sécurité de base de données Sqlite
vous savez que mysql a un moteur de mémoire, non? –
mais SQlite est local et mysql peut être distant (-> lent) – joschua011