J'envisage d'utiliser SQLite comme base de données de production pour un site pouvant accueillir 20 utilisateurs simultanés, mais avec un potentiel de pic pouvant être multiple de celui-ci (car le site serait accessible sur Internet ouvert et qu'il y a toujours possibilité que quelqu'un publie un lien quelque part qui pourrait amener plusieurs personnes sur le site en même temps).
SQLite est-il une possibilité?
Je sais que ce n'est pas un scénario de production idéal. Je demande seulement si cela relève de la possibilité réaliste.
SQLite ne prend en charge aucun type de concurrence, vous pouvez donc rencontrer des problèmes pour l'exécuter sur un site Web en production. Si vous recherchez une base de données «plus légère», envisagez peut-être d'essayer un magasin de documents-objets contemporain comme CouchDB.
De toute façon, continuez à vous développer contre SQLlite, et vous pourrez probablement l’utiliser au début. Si vous trouvez que votre application a plus d'utilisateurs en bas de la piste, vous allez vouloir passer à postgres ou à mysql.
L'auteur de SQLlite adresse cette sur le site Web :
SQLite fonctionnera généralement très bien comme moteur de base de données pour les sites Web à trafic faible à moyen (c'est-à-dire 99,9% de tous les sites Web). La quantité de trafic Web que SQLite peut gérer dépend, bien entendu, de la fréquence à laquelle le site Web utilise sa base de données. De manière générale, tout site qui reçoit moins de 100 000 hits par jour devrait fonctionner correctement avec SQLite. Le chiffre de 100 000 hits/jour est une estimation prudente et non une limite supérieure stricte. Il a été démontré que SQLite fonctionnait avec 10 fois plus de trafic.
SQLite fonctionnera normalement correctement en tant que base de données d’un site Web. Mais si votre site Web est tellement occupé que vous envisagez de scinder le composant de base de données sur une machine distincte, vous devez absolument envisager d'utiliser un moteur de base de données client/serveur de classe entreprise au lieu de SQLite.
Donc, je pense que la solution est simple: allez-y, et si cela ne fonctionne pas bien pour vous, faire la transition vers une base de données de classe entreprise est quand même assez trivial. Prenez toutefois soin de votre schéma et concevez votre base de données dans l’optique de la croissance et de l’efficacité.
Voici un fil } avec quelques commentaires plus indépendants sur l'utilisation de SQLite pour une application Web de production. On dirait que cela a été utilisé avec des résultats mitigés.
Edit (2014) :
Depuis que cette réponse a été publiée, SQLite propose désormais un mode multithread _ et mode de journalisation en écriture anticipée , ce qui peut influencer votre évaluation de son adéquation aux sites à trafic faible à moyen.
Charles Leifer a écrit un article de blog sur la fonctionnalité WAL (enregistrement anticipé) de SQLite et sur des opinions bien pensées sur les cas d'utilisation appropriés.
Le petit extrait de SQLite website dit tout.
Les données sont-elles séparées de l'application par un réseau? → choisissez client/serveur
Plusieurs simultanés écrivains? → choisissez client/serveur
Big data ? → choisir client/serveur
Sinon → choisissez SQLite !
SQLite "fonctionne" (jusqu'à ce que ça ne fonctionne pas, bien sûr)
Nous utilisons souvent SQLite pour les bases de données internes; L’annuaire des employés, notre calendrier d’événements et d’autres services intranet fonctionnent tous sur des bases de données légères. L'exécution de ces applications à la même échelle que nous le ferions sur une "vraie" base de données telle que MySQL serait extrêmement lourde. Cela est particulièrement vrai lorsque vous prenez en compte le fait qu'elles s'exécutent aux côtés de 4 autres machines virtuelles sur un seul ordinateur de milieu de gamme.
À un moment donné, nous avions un site tourné vers l'extérieur qui fonctionnait sur une base de données sqlite pendant des mois avec un seul redémarrage requis. De toute évidence, le trafic était très faible, mais il a bien résisté pour ce qu'il a fait.
Nous avons rencontré une option similaire sur un environnement avec absolument aucune écriture , et nous avons choisi SQLite.
Voir mon billet de blog sur le sujet:
Eh bien, la principale hypothèse qui rend théoriquement cette solution Possible est que notre base de données SQLite est totalement en lecture seule. Le code de notre serveur Ne devrait jamais le changer. Cela résoudrait tous les problèmes de verrouillage, car Il n'y a pas de verrou de lecture. Nous n'avons pu trouver nulle part sur Internet personne Disant qu'il y avait un problème de lecture à haut débit de SQLite quand Il n'y a pas d'écriture - cela pourrait être possible!
Les gens parlent de problèmes de simultanéité, mais SQLite dispose d'un moyen de mettre en cache les demandes entrantes et de les laisser attendre un peu. Il n'y a pas de délai d'attente immédiat.
J'ai lu des informations sur le paramètre de délai d'attente par défaut, begin zero, ce qui signifie qu'il expire immédiatement et que cela n'a aucun sens. Peut-être que les gens n'ont pas ajusté ce paramètre?
Je pense que cela dépendra principalement de votre ratio lecture/écriture. Si vous lisez principalement à partir de la base de données, tout ira bien. L'écriture multi-utilisateur dans SQLite peut poser problème en raison du verrouillage de la base de données.
Il semble qu'avec la mise en file d'attente, vous pouvez également éviter beaucoup de problèmes d'écriture simultanée avec SQLite. Au lieu d'écrire directement sur la base de données sqlite, vous écrivez dans une file d'attente qui écrit à son tour séquentiellement sur la base de données sqlite dans le mode premier entré, premier sorti. Vous ne savez pas si votre application aboutira là où vous en auriez besoin s'il vaut la peine d'être écrit ou si vous souhaitez simplement passer à la base de données client/serveur ... mais une pensée.
Je l'utilise dans un serveur Web à très faible trafic (c'est une base de données génomique) et je n'ai aucun problème Mais il n'y a que des instructions SELECT, pas d'écriture dans la base de données impliquée .
Pour ajouter à une réponse déjà brillante: puisque vous travaillez avec une solution sans serveur dans ce cas, vous pouvez dire adieu à la réplication, à n’importe quelle sorte de mise à l’échelle horizontale de votre base de données, ainsi qu’à d’autres options avancées. Ce n'est pas non plus le meilleur choix si plusieurs utilisateurs mettent à jour le même bloc d'informations. Si vous deviez partager la base de données à l'avenir, il vous faudrait migrer les données et passer à autre chose. De plus, si vous utilisez un équilibreur de charge et plusieurs systèmes, il serait difficile de conserver la centralité des données si vous utilisez sqlite. Ce ne sont que quelques-unes des raisons pour lesquelles ce n'est pas recommandé. C'est idéal pour les petits projets et pour le développement.
Dépend de l'utilisation du site. Si, la plupart du temps, vous ne faites que lire des données, vous pouvez pratiquement utiliser n'importe quoi pour une base de données et mettre en cache les données dans l'application pour obtenir de bonnes performances.