Question

J'ai lu récemment cette Question sur SQLite vs MySQL et la réponse a souligné que SQLite n'est pas à l'échelle et le site officiel tri de la confirme ce, cependant.

Comment évolutive est SQLite, et quels sont ses supérieurs la plupart des limites?

Était-ce utile?

La solution

Hier, j'ai publié un petit site* pour le suivi de vos rep utilisé un partage de base de données SQLite pour tous les visiteurs.Malheureusement, même avec le modeste de la charge qu'il a mis sur mon hôte, il a couru très lentement.C'est parce que l'ensemble de la base de données a été verrouillé chaque fois que quelqu'un a consulté la page parce qu'il contient des mises à jour/inserts.Je me suis vite passé à MySQL et bien que je n'ai pas eu beaucoup de temps pour le tester, il semble beaucoup plus évolutive que SQLite.Je me souviens juste de ralentir le chargement de la page et parfois obtenir une base de données verrouillée erreur lorsque vous tentez d'exécuter des requêtes à partir de l'interpréteur de commandes dans sqlite.Cela dit, je suis en cours d'exécution à un autre site de SQLite très bien.La différence est que le site est statique (c'est à direJe suis la seule qui peut changer la base de données) et il fonctionne très bien pour simultanées lit.Morale de l'histoire:seule l'utilisation de SQLite pour les sites web où les mises à jour de la base de données se produisent rarement (moins souvent que chaque page chargée).

modifier:Je viens de réaliser que je ne peut pas avoir été juste à SQLite - je n'ai pas d'index des colonnes dans la base de données SQLite quand j'étais à servir à partir d'une page web.Cette partie imputable au ralentissement de la que je vivais.Cependant, l'observation de la base de données de verrouillage de stands - si vous avez particulièrement lourdes mises à jour, SQLite performance ne correspond pas MySQL ou Postgres.

une autre édition: Depuis que j'ai posté ce presque 3 mois j'ai eu l'occasion d'examiner de près l'évolutivité de SQLite, et avec quelques astuces, il peut être très évolutive.Comme je l'ai mentionné dans ma première édition, la base de données des indices de réduire considérablement le délai de requête, mais c'est plus une observation générale sur les bases de données qu'il est à propos de SQLite.Cependant, il est une autre astuce que vous pouvez utiliser pour accélérer SQLite: les transactions.Chaque fois que vous avez à faire plusieurs écritures de base de données, les mettre à l'intérieur d'une transaction.Au lieu d'écrire (et de verrouillage) le fichier à chaque fois une écriture de la requête est émise, l'écriture ne sera possible une fois l'opération terminée.

Le site que j'ai mentionné que j'ai publié dans le premier paragraphe a été remis à SQLite, et ça marche plutôt bien une fois que je l'écoute de mon code en quelques endroits.

* le site n'est plus disponible

Autres conseils

Sqlite est évolutive en termes de mono-utilisateur, j'ai plusieurs gigaoctets de données qui fonctionne très bien et je n'ai pas eu beaucoup de problèmes avec elle.

Mais il est mono-utilisateur, donc, cela dépend de quel type de mise à l'échelle vous parlez.

En réponse aux commentaires.Notez qu'il n'y a rien qui empêche à l'aide d'une base de données Sqlite dans un environnement multi-utilisateur, mais à chaque transaction (en effet, chaque instruction SQL qui modifie la base de données) prend un verrou sur la fichier, qui empêche les autres utilisateurs d'accéder à la base de données à tous.

Donc, si vous avez beaucoup de modifications apportées à la base de données, vous êtes essentiellement va frapper de mise à l'échelle des problèmes très rapide.Si, d'autre part, vous avez beaucoup de l'accès en lecture par rapport à l'accès en écriture, il pourrait ne pas être si mauvais.

Mais Sqlite sera bien sûr la fonction dans un environnement multi-utilisateur, mais il ne sera pas effectuer bien.

SQLite lecteurs de la sqlite.org site web et d'autres qui ont beaucoup de trafic.Ils suggèrent que si vous avez moins de 100k hits par jour, SQLite devrait fonctionner correctement.Et qui a été écrit avant qu'ils ont livré la "Writeahead de l'abattage en fonction.

Si vous voulez accélérer les choses avec SQLite, procédez de la manière suivante:

  • la mise à niveau vers SQLite 3.7.x
  • Activer write-ahead logging
  • Exécuter les opérations suivantes pragma:"PRAGMA cache_size = Nombre de pages;" La taille par défaut (Nombre de pages) est de 2000 pages, mais si vous augmentez le numéro, puis vous augmenter la quantité de données qui est en cours d'exécution tout droit sorti de la mémoire.

Vous pouvez prendre un coup d'oeil à ma vidéo sur YouTube appelé "Améliorer SQLite Performance Avec Writeahead De Journalisation"qui montre comment utiliser write-ahead logging et démontre un 5x amélioration de la vitesse pour l'écrit.

Sqlite est un bureau ou en cours de processus la base de données.SQL Server, MySQL, Oracle, et de leurs frères sont les serveurs.

Bases de données de bureau sont de par leur nature, pas un bon choix pour tout application qui a besoin de l'appui d'écriture simultanées accès à la banque de données.Cela inclut à un certain niveau, la plupart des sites web jamais créé.Même si vous devez ouvrir une session pour quoi que ce soit, vous avez probablement besoin d'un accès en écriture de la DB.

Avez-vous lu ce SQLite docs - http://www.sqlite.org/whentouse.html ?

SQLite généralement sera parfait comme le moteur de base de données de faible à moyenne le trafic des sites web (c'est-à-dire, 99,9% de tous les sites web).La quantité de trafic web que SQLite peut gérer dépend, bien sûr, sur la façon dont beaucoup de la site web utilise sa base de données.En général générale, tout site qui devient de moins en moins de 100K hits/jour devrait fonctionner correctement avec SQLite.Le 100K hits/jour figure est une estimation conservatrice, qui n'est pas dur la limite supérieure.SQLite a été démontrée à travailler avec 10 fois que la quantité de trafic.

SQLite évolutivité dépendra fortement de données utilisées, et leur format.J'ai eu de mauvaises expérience avec les extra-longues tables (GPS dossiers, un enregistrement par seconde).L'expérience a montré que SQLite serait de ralentir dans les stades, en partie due à la constante de rééquilibrage de la croissance des arbres binaires de la tenue de l'index (avec le temps-et estampillé index, vous venez de savoir cet arbre se passe pour obtenir un rééquilibrage de beaucoup, il est cependant indispensable de vos recherches).Donc en fin de compte, à environ 1 go de ram (très approximatif, je sais), les requêtes devenu lent dans mon cas.Votre kilométrage peut varier.

N'oubliez pas une chose, en dépit de toutes les vantards, SQLite n'est PAS faite pour l'entreposage de données.Il y a différentes utilisations pas recommandé pour SQLite.Les personnes derrière SQLite disent eux-mêmes:

Une autre façon de regarder SQLite est ceci:SQLite n'est pas conçu pour remplacer Oracle.Il est conçu pour remplacer fopen().

Et cela conduit à l'argument principal (et non quantitative, désolé, mais qualitatif), SQLite n'est pas pour tous les usages, alors que MySQL peut couvrir de nombreux usages variés, même si n'est pas idéalement.Par exemple, vous pourriez avoir MySQL stocker les cookies de Firefox (au lieu de SQLite), mais vous auriez besoin de ce service, exécution de tous les temps.D'autre part, vous pourriez avoir un site web transactionnel en cours d'exécution sur SQLite (comme beaucoup de gens) au lieu de MySQL, mais attendez-vous beaucoup de temps d'arrêt.

je pense qu'un (dans les numéros 1) serveur web de servir hunderts des clients s'affiche sur l'arrière-plan avec une seule connexion à la base de données, n'est-ce pas?

Donc, il n'y a pas d'accès simultanés dans la base de données d'une nous pouvons donc dire que la base de données fonctionne en "single user mode".Il ne fait aucun sens de diskuss accès multi-utilisateur dans une telle circonstance, et ainsi de SQLite fonctionne aussi bien que tout autre serverbased base de données.

Pensez-y de cette façon.SQL Lite sera verrouillé à chaque fois que quelqu'un l'utilise (SQLite n'a pas de verrou sur la lecture).Donc, si votre portion d'une page web ou une application qui dispose de plusieurs utilisateurs simultanés seulement on pouvait utiliser votre application en même temps avec SQLLite.Donc, à droite il y a un problème d'évolutivité.Si ses un une personne demande de dire une Bibliothèque Musicale où que vous détenez des centaines de titres, notes, informations, d'utilisation, de jouer, de jouer SQL Lite, magnifiquement à l'échelle de la tenue des milliers, sinon des millions de documents(disque Dur prêt)

MySQL sur l'autre main fonctionne bien pour les serveurs d'applications où les gens de tous sur la volonté de l'utiliser simultanément.Il ne ferme pas à clé et elle est assez grande taille.Donc, pour votre bibliothèque de musique MySql serait plus tuer, comme une seule personne serait de le voir, à MOINS que ce soit une musique partagée la bibliothèque, où des milliers d'ajouter ou de mettre à jour.Puis MYSQL serait le seul à utiliser.

Donc, en théorie, MySQL échelles de mieux que de Sqllite cause qu'il peut gérer plusieurs utilisateurs, mais est trop pour un seul utilisateur de l'app.

SQLite du site web (la partie que vous avez référencé) indique qu'il peut être utilisé pour une variété de multi-utilisateur situations.

Je dirais qu'il peut manipuler un peu.Dans mon expérience, il a toujours été très rapide.Bien sûr, vous avez besoin d'indexer vos tables et lors du codage contre, vous devez vous assurer que vous utilisez parameritized requêtes et la comme.Fondamentalement la même chose que vous feriez avec toute base de données pour améliorer les performances.

Il pourrait être utile de vérifier REAL SQL Server, qui est un serveur de base de données construite sur SQLite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top