Sites Web à usage interne: existe-t-il une preuve convaincante contre SQLite?

23

De nombreux frameworks Web, tels que Flask ou Django, utilisent SQLite comme base de données par défaut. SQLite est convaincant car il est inclus dans python, et la surcharge administrative est assez faible.

Cependant, la plupart des sites de production publique à fort trafic finissent par utiliser une base de données plus lourde: mySQL, Oracle ou postgresql.

Les questions :

Assumer:

  • Le trafic du site est modéré et un accès simultané en lecture / écriture à la base de données se produira
  • Nous utiliserons SQLAlchemy avec des verrous d'écriture SQLite (bien que ce commentaire me rende un peu nerveux)
  • La base de données contiendra peut-être 60 000 enregistrements
  • Les structures de données ne nécessitent pas de fonctionnalités avancées trouvées dans des bases de données plus lourdes

Existe-t-il un argument convaincant contre la concurrence SQLite pour les sites Web qui servent d'outils d'entreprise internes à trafic modéré? Si tel est le cas, quelles conditions entraîneront des problèmes d'accès concurrentiel pour SQLite ?

Je recherche des causes profondes spécifiques connues, au lieu de la peur générale / du doigt non justifié.

Mike Pennington
la source
Comment sqllite avec des fonctionnalités telles que la réplication, etc., pourrait être utile pour les sauvegardes, etc.? Dans SQLlite, j'ai l'impression que l'application possède la base de données. Pouvez-vous exécuter des scripts d'administration, etc. pendant que votre application est active?
Doug T.
1
Quelques anecdotes sur SQLite et la concurrence (principalement positive): accès simultané sqlite3
Daniel B
1
Dans le cas d'un site Web interne, quelle est la raison impérieuse de SQLite? Des restrictions sur l'installation d'un SGBDR?
JeffO
Outre la simplification de l'environnement de développement sur les ordinateurs portables des développeurs individuels, il n'y a aucune raison. La question est bien sûr de savoir si nous pouvons raisonnablement simplifier l'environnement de développement et de production
Mike Pennington

Réponses:

23

Je recommande de lire la réponse officielle à votre question, Utilisations appropriées pour SQLite . Plus précisément, les «Situations où un autre SGBDR peut mieux fonctionner» avertissent que SQLite ne prend pas en charge l'écriture simultanée:

SQLite prend en charge un nombre illimité de lecteurs simultanés, mais il n'autorisera qu'un seul écrivain à tout instant. Dans de nombreuses situations, ce n'est pas un problème. Chaque application fait son travail de base de données rapidement et continue, et aucun verrouillage ne dure plus de quelques dizaines de millisecondes. Mais certaines applications nécessitent plus de simultanéité, et ces applications peuvent avoir besoin de rechercher une solution différente.

Du point de vue de la pertinence, j'ai tendance à voir SQLite comme un format de fichier très sophistiqué qui prend en charge les requêtes SQL. J'aurais tendance à éviter SQLite si je voulais séparer ma base de données de mon application web, car elle n'est pas optimisée pour ce cas. En bref, SQLite n'est pas suffisamment évolutif pour être utilisé dans certains scénarios, donc les personnes qui gèrent des sites Web qui espèrent devenir un jour populaires peuvent être mieux en commençant par quelque chose d'évolutif, plutôt que d'aller avec SQLite et d'être ensuite obligées de changer.

Cela étant dit, SQLite convient probablement à la plupart des sites Web internes; les sites Web généralement internes ne nécessitent pas le même niveau de simultanéité et d'évolutivité.

Brian
la source
La plupart des sites Web externes non plus. Le moteur de base de données peut être remplacé si quelque chose comme EF est utilisé, bien que PostGres soit probablement un meilleur choix dès le départ.
Robert Harvey
@RobertHarvey qu'est-ce que EF?
Mike Pennington
@MikePennington: Entity Framework. J'imagine qu'il existe d'autres ORM qui ont également la transparence de la base de données, ou au moins peuvent échanger les pilotes.
Robert Harvey
1
L'équivalent pythonique serait quelque chose comme SQL Alchemy
Wyatt Barnett
"J'ai tendance à voir SQLite comme un format de fichier très sophistiqué qui prend en charge les requêtes SQL." Définition parfaite.
Wildcard
4

En mettant mon chapeau de directeur informatique, je vois quelques no-gos ici:

  • Risque de corruption des données. Peut-être plus perçu que réel, mais en fin de compte, il s'agit d'une base de données de type de fichier non transactionnel qui n'a pas beaucoup, sinon aucun recours à de mauvaises écritures, en plus de demander si vous avez une sauvegarde récente. En parlant de ça. . .
  • Comment puis-je sauvegarder cette chose? D'une certaine manière, je sais que j'en ai un bon exemplaire. De préférence sans mettre l'application hors ligne.
  • Comment sécuriser l'accès à la base de données? Ma compréhension générale est que SQL Lite n'en a pas en dehors de l'accès au système de fichiers, ce qui est un début décent, mais pas le tout-en-un. Surtout pour les applications Web où vous voudrez peut-être plus d'autorisations graduées que DBA ou rien.

Du point de vue du développeur, je pense qu'il est important de savoir pourquoi SqlLite est la valeur par défaut - c'est parce qu'il est facile et qu'il fonctionne bien. Si vous "vendez" une plate-forme à de nouveaux développeurs, il est essentiel de lancer une application Web fonctionnelle avec un minimum de bruit. Et devoir se lever et configurer correctement un serveur de base de données serait un obstacle majeur à éviter.

Wyatt Barnett
la source
1
Eh bien, les sauvegardes peuvent être effectuées via l' API de sauvegarde SQLite . Je reconnais que SQLite n'est peut-être pas aussi sûr par défaut, car, contrairement aux systèmes orientés services, les clients SQLite parlent plus directement au fichier de base de données. Cela dit, SQLite utilise un journal pour se protéger contre les défaillances du système et devrait être fiable si le système d'exploitation hôte prend correctement en charge les primitives de verrouillage utilisées par SQLite (les E / S de disque réseau ne le font pas). Le site officiel répertorie plusieurs scénarios qui conduiront à une base de données SQLite corrompue.
Brian
SQLite est transactionnel . Utilisez l' API de sauvegarde ou adaptez le script de sauvegarde de MediaWiki pour effectuer des sauvegardes en ligne. Votre compréhension générale du modèle de sécurité de SQLite est correcte. Le conseil de sécurité officiel est «faites preuve de bon sens»: réfléchissez à la façon dont les gens peuvent accéder à votre fichier de base de données et concevez votre application Web en conséquence.
Iain Samuel McLean Elder
@Brian - J'aurais du mal à penser à une autre base de données qui a une page entière dédiée à "comment cette base de données peut être corrompue". J'ajouterai que je trouve le projet sql lite incroyable - ils ont probablement cette page parce qu'ils sont un peu fous et ont également quelque chose comme 10 lignes de code de test pour chaque ligne de code de production et aiment vraiment être sûrs et approfondis.
Wyatt Barnett