499 votes

SQLite vs MySQL

SQLite est un fichier unique en fonction de la base de données et MySQL est une base de données normale. C'est très bien, mais je ne suis pas sûr de ce qui est plus rapide ou mieux, où pour ce...quels sont les avantages et les inconvénients de chaque option?

327voto

Justin Standard Points 15312

SQLite est grande de test et de prototypage, ou pour l'intégration dans les applications. MySQL est digne d' (à grande échelle) des environnements de production.

Ce site a des conseils sur quand utiliser SQLite

Voici mon résumé:

SQLite:

  • plus facile à installer
  • idéal pour temporaire (tests de bases de données)
  • idéal pour le développement rapide de
  • idéal pour l'intégration dans une application
  • n'a pas de gestion des utilisateurs
  • n'a pas beaucoup de caractéristiques de performance
  • n'est pas à l'échelle.

MySQL:

  • beaucoup plus difficile/complexe
  • de meilleures options pour le réglage des performances
  • pouvez échelle eh bien, si bien réglé
  • peut gérer les utilisateurs, les autorisations, etc.

145voto

Michal Sznajder Points 6292

Vérifier l'utilisation Appropriée Pour SQLite sur le SQLite page d'accueil. Je pense que c'est tout à fait raisonnable, et il est difficile d'ajouter quelque chose de plus.

61voto

jaredg Points 1610

SQLite est beaucoup utilisé dans les données côté client des magasins: Firefox utilise intensivement et les diverses applications, Apple a écrit pour l'iPhone utiliser, yum sur Linux a été réécrit pour l'utiliser. Il est probablement plus souple (en particulier dans les structures de données et indexation) et facile à utiliser que le Berkeley DB et personnalisé formats binaires que certaines de ces choses auparavant dépendait.

Toutes ces choses ont quelque chose en commun: un seul processus/thread aurez probablement envie d'écrire dans la base de données à la fois, et un relativement petit nombre de choses vont avoir envie de lire. SQLite bloque tous les autres IO sur la table pendant une écriture, qui n'est pas tellement pour multi-utilisateurs/multi-threaded l'ensemble de la table quand vous commencez à faire une mise à jour.

Si vous prototype avec SQLite, être prudent. C'est "faiblement typé" par défaut-vous pouvez mettre une chaîne de caractères dans une colonne de type integer, sauf si vous activez le strict mode d'affinité et je ne sais pas si c'est encore été mise en œuvre.

46voto

dbr Points 66401

Il semble que pour l'immense majorité des sites de l'utilisation de MySQL, SQLite serait plus adéquate. Il semble juste être un état d'esprit "si c'est quelque chose ressemblant à de la production, je dois utiliser MySQL!"

Je dirais que si vous n'avez pas à faire toute la performance de jongler avec MySQL, vous pouvez vous en sortir avec l'aide de SQLite..

39voto

akc42 Points 806

Malgré les diverses réponses ici, il me semble que l'équilibre a été légèrement modifié lors de SQLite introduit WAL mode. De ce que j'ai pu découvrir, ce qui permet simulataneous mises à jour sans se faire (trop) de verrouillage.

Le grand downsite de sqlite a été que pendant une transaction qui implique des mises à jour de la base de données de l'ensemble de la base de données est verrouillée plutôt que de la beaucoup plus fine de verrouillage d'autres bases de données. Avec WAL mode, chaque utilisateur est effectivement en mesure de voir une vue cohérente des données, même si d'autres personnes ont écrit à la base de données - et donc les verrous qui sqlite s'applique peut être appliquée moins fréquemment.

La documentation à ce sujet lorsque la WAL est re-encorporated dans la base de données principale n'est pas aussi claire qu'elle pourrait être, et il s'avère que la dernière connexion à fermer l'écrire (ainsi que les autres mécanismes prévus). Dans un scénario où la base de données sqlite est le soutien d'un site web, à condition qu'il existe un moment où il n'y a pas une demande de page web en cours, le wal obtient réutilisés. Le 100K hits/jour figure donne sur une 1.15 sec par coup, à moins que la base de données utilise beaucoup de requêtes par page, à la fin de la plupart des demandes de page, ou juste après une rafale si c'est la façon dont ils viennent, les WAL sera écrit. C'est bien sûr, si elle doit être - la plupart des coups sont susceptibles d'être d'un accès en lecture seule de la nature.

L'autre chose qui semble être important avec sqlite site web est de s'assurer que toutes les requêtes sont enfermés dans une transaction unique couvrant l'ensemble de l'affichage de la page. Quelques tests sur mon ordinateur de bureau a montré environ 7 inserts par seconde lorsque chacun a une transaction et 1000/seconde quand ils étaient tous enfermés dans une seule transaction.

Avec les avertissements ci-dessus sur ce qui ralentit SQLite vers le bas - le à l'envers est sa bibliothèque, avec le code qui s'exécute dans le processus qui l'appelle, par rapport à mysql où il y a une communication interprocessus pour chaque instruction sql. Cela devrait faire sqlite plus rapide surtout quand des jointures complexes, etc. sont en fait dans le code plutôt que de sql.

Ce que j'aime vraiment, c'est la simplicité de sauvegarde et restauration de la base de données. C'est un peu simpliste de dire que vous avez juste besoin de copier le fichier, depuis une opération qui se passe quand vous faites cela, - mais il y a une api de sauvegarde qui est utilisé par l'utilitaire de ligne de commande

sqlite3 /path/to/live.db '.backup /backup/path.db'

pour obtenir une sauvegarde instantanée dans le cas où vous ne pouvez pas arrêter le processus de faire les mises à jour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X