SQLite sur un serveur de production? [fermé]

9

Je connais SQLite depuis longtemps et je sais qu'il est très rapide, mais je ne l'ai jamais essayé sur un serveur de production. Je n'ai jamais pu trouver une estimation solide sur la quantité de trafic qu'il pouvait gérer avant d'échouer.

Quelqu'un at-il des chiffres ou un article à ce sujet?

Dr Hydralisk
la source
2
Avertissement: la question et certaines réponses contiennent des idées fausses, des malentendus et des informations obsolètes!
Chris S
Nous avons évalué SQLite comme une solution de mise en cache en production: uri.agassi.co.il/2014/10/using-sqlite-for-production.html
Uri Agassi

Réponses:

4

Malheureusement, je n'ai pas de chiffres pour vous sur les capacités de chargement, mais quelques commentaires sur certains des facteurs limitant les performances:

  • La vitesse de SQLite est affectée par la vitesse du disque sur lequel il se trouve et par le nombre d'insertions / mises à jour en cours (c'est-à-dire l'accès en écriture). Le verrouillage en écriture est limité par la vitesse de rotation du disque

  • Les transactions sont démarrées par défaut, mais vous obtenez de meilleures performances si vous démarrez et validez la transaction. J'ai eu des insertions de masse très rapides lors du traitement de la transaction par programme

  • Si vous ne lisez généralement que des données, vous obtenez de bonnes performances d'après mon expérience. Ainsi, SQLite peut être utilisé comme système de mise en cache pour stocker les lectures du serveur de base de données, en particulier celles à distance ou les requêtes complexes.

  • Il utilise moins de ressources qu'un serveur de base de données, ce qui peut affecter les performances du site en libérant plus de ressources pour le serveur Web et le code d'application

  • Si vous avez besoin d'un certain nombre d'écritures simultanées pour être possible, alors un serveur de base de données (par exemple MySQL, Postgres) pourrait bien vous servir mieux

Comme l'a déclaré Devrim , le site SQLite indique qu'environ 100 000 utilisateurs / jour devraient être corrects. Un système Trac nécessite des écritures, donc les performances seraient probablement plus lentes dans ce cas

Cez
la source
Merci pour les réponses, donc fondamentalement, vous ne pouvez écrire que dans la base de données 1 à la fois? Mais vous pouvez toujours faire lire plusieurs personnes à partir de la base de données sans être verrouillé? Si c'est le cas, je viens de me faire quelques idées pour un système de mise en cache.
Dr Hydralisk
Le nombre "100K" lancé est inutile. Les documents lisent "En règle générale, tout site qui obtient moins de 100 000 visites par jour devrait fonctionner correctement avec SQLite." Un «hit» est généralement défini comme une requête HTTP. Cela inclut une demande pour chaque .js, .css et image sur un hit. Qu'est-ce que cela a à voir avec les performances de la base de données? En supposant que les auteurs voulaient dire "page vue", c'est toujours inutile. Combien de requêtes par page vue? Rapport des lectures aux écritures? Sur quel type de matériel la DB fonctionne-t-elle? Ce n'est pas une bonne idée d'utiliser SQLite pour un site Web alors qu'il existe au moins une douzaine d'autres meilleurs outils pour le travail.
jamieb
@Dr Hydralisk Oui, les lectures peuvent se produire en parallèle .. tout comme un fichier
Cez
@jamieb Le point sur les "hits" est juste. Personne n'a mentionné les ressources matérielles ou serveur disponibles, il pourrait donc s'agir d'un petit serveur virtuel pour tout ce que nous savons. L'implication de bases de données SQLite dans un système de mise en cache, ou principalement des tables en lecture seule, peut améliorer les performances, en particulier lorsque le serveur de base de données est distant. Le cache mémoire + le cache SQLite des requêtes de base de données battront le coup sur les requêtes de base de données seules.
Cez
3

J'ai quelques points à ajouter à ces bonnes réponses.

La version actuelle de SQLite a WAL (Write-Ahead Logging) afin que la lecture et l'écriture puissent se poursuivre simultanément. Ainsi, la limitation d'écrivain unique traditionnelle mentionnée dans les réponses précédentes n'existe plus. Je n'ai pas encore vu WAL en production, donc je ne peux pas dire à quel point il évolue.

En utilisant WAL ou non, si votre base de données SQLite est en lecture seule (ou est mise à jour par lots) et qu'elle tient dans la RAM (votre système d'exploitation a suffisamment de RAM disponible pour la garder dans des tampons), elle peut très bien évoluer sur une application Web de production. Personnellement, j'étais très sceptique quant à ses performances, son évolutivité et sa robustesse, mais maintenant, après neuf mois de production, il s'est avéré qu'il fonctionnait très bien, même les parties les plus complexes du système .

XDF
la source
1

Sqlite est idéal pour l'intégration dans des applications, et c'est pour cela qu'il est conçu, mais il n'est certainement pas "extrêmement rapide". Je l'utilise pour plusieurs de mes propres applications, uniquement pour la commodité de n'avoir que deux fichiers qui peuvent être copiés sur une autre machine pour donner une application pleinement fonctionnelle. Les tests contre MySQL, utilisant la même structure, les mêmes index, etc., montrent que Sqlite est considérablement plus lent, même pour les petites bases de données. Je m'attendrais à ce que la différence de performances augmente à mesure que la taille de la base de données augmente, même si je ne peux pas dire avec certitude que je ne l'ai utilisée qu'avec des bases de données de moins de 100 Mo.

John Gardeniers
la source
PRAGMA peut être ajusté pour des performances accrues au détriment de la corruption potentiellement occasionnelle de la base de données (sans perte de données cependant). D'après mon expérience, j'ai pu obtenir SQLite pour prendre des insertions à environ 250-300rps sur une vieille machine WindowsXP.
djangofan
-1, parce que je ne suis pas d'accord. J'ai construit et interrogé des bases de données SQLite de plusieurs Go et je n'obtiendrais jamais le même nombre de requêtes par seconde en utilisant MySQL par exemple (dans le même type de matériel). SQLite peut facilement faire 120 000 requêtes d'écriture par seconde si vous savez comment le masser correctement .
Alix Axel
0

Je pense que sqlite est seulement plus rapide qu'un fichier texte / xml (vous pourriez être surpris si vous l'essayez). Et il ne prend pas en charge la concurrence, si vous souhaitez créer un site pour intranet où les gens enregistrent leurs heures de travail ou utilisent la billetterie Trac, cela peut bien servir. En dehors de cela, il doit être évité et remplacé par mysql ou couchdb.

Le site Web de sqlite indique que 100 000 utilisateurs / jour devraient être corrects, mais j'en doute fortement, car un simple projet Trac est souvent coincé avec une utilisation de bureau de 10 personnes.

Devrim
la source
0

Sqlite n'est pas une application de base de données client / serveur traditionnelle. Il s'agit essentiellement d'une bibliothèque intégrée à une autre application. Il est conçu pour les applications de bureau mono-utilisateur. Vous ne voulez absolument pas essayer de l'utiliser comme une sorte de remplacement MySQL / PostgreSQL / MS-SQL autonome dans un environnement multi-utilisateur car la base de données entière est verrouillée en écriture. Vous serez confronté à des problèmes de contention, même sur une charge légère, ce qui détruira les performances.

jamieb
la source
Dans WAL, seuls les écrivains simultanés sont bloqués. De plus, le moteur MySQL par défaut (MyISAM) verrouille également les tables complètes chaque fois qu'il y a une requête d'écriture.
Alix Axel
1
@AlixAxel Cette réponse a été écrite six mois avant que WAL ne soit disponible.
jamieb