J'ai vu quelques questions de performance SQLite ici sur Stackoverflow, mais l'accent était mis sur les sites Web, et je envisage d'utiliser cette base de données dans un scénario client-serveur: P>
Utiliser SQLite rendrait l'application moins réactive que par opposition à l'utilisation de PostgreSQL? Mon intuition me dit que cela devrait être correct pour ces charges, mais peut-être que quelqu'un a une expérience pratique avec ce type de scénario. P>
3 Réponses :
Vous n'avez pas mentionné ce que vous utilisez le système d'exploitation et les versions Postgres. Toutefois, avant d'envisager le changement de moteur de base de données, essayez de faire de la journalisation et de comparer votre base de données actuelle avec une utilisation typique, puis optimisez les questions "les plus lourdes". Et peut-être que votre charge de traitement de backend rend la DB Question Heure sans importance? Comme SQLite est un SGBD basé sur un fichier, un accès simultané à partir de plusieurs processus dégradera les performances lorsque le numéro de client augmente s> (édité après commentaire) p>
La question suivante peut être utile: Quelle évolutive est SQLite? P>
La dégradation des performances ne se produira qu'avec un accès concurrent direct - mais comme l'a dit l'OP, les accès sont indirects avec un processus de serveur entre ... Cela pourrait donner un peu de ralentissement, mais pas de dégradation.
Droite, j'ai raté le seul serveur par plusieurs clients. Quoi qu'il en soit, si la construction de DB est si simple, elle peut être migratie vers SQLite (pas de traitement de latéral de la DB, de déclencheurs et de trucs), je ne pense pas que les performances du SGBD peuvent être un problème grave lorsque DB est raisonnablement indexé.
N'ont pas encore écrit de code. Je travaille sur la liste des risques du projet ATM et l'évolutivité en fait partie. Ne pas utiliser de postgres, mais les OSES seront probablement XP, Vista au début, plus tard Linux.
@RPG: Comme je l'ai dit dans ma réponse, tout dépend de la souche réelle sur la DB. Je dirais aussi que SQLite est dans une plage de performances similaire à celle de PostgreSQL, lorsque vous pouvez traverser les accès simultanés - de sorte que votre configuration décrite, je prétendrais (sans connaître la post-progressité à beaucoup) que la différence sera petite. La dépendance de l'évolutivité de votre codage réel sera probablement beaucoup plus élevée. Lorsque vous n'avez pas besoin de tout le matériel DB plus élevé (par exemple, des déclencheurs), je recommanderais SQLite - et 50 utilisateurs / clients ne se couche pas beaucoup pour moi!
@Juergen: Peut-être 50 utilisateurs / clients ne vous semblent peut-être pas beaucoup, mais vous devez considérer que chacun d'entre eux peut potentiellement générer plusieurs déclarations SQL qui doivent être exécutées simultanément avec des requêtes courues par d'autres clients. Dans mon expérience - SQLite Verrouillage provoque des retards majeurs et des délais d'interface graphique, même lorsque ~ 10 utilisateurs fonctionnent simultanément. Il est vrai que SQLite est une base de données très rapide (lorsque seul un utilisateur unique y travaille). Il est également très facile d'administrer. Cependant - SQLite est tout sauf une solution de base de données évolutive (et j'ai appris cette leçon de manière difficile) ...
Je confirmerais la réponse de S.Lott. P>
Je ne sais pas comment SQLite se produit en comparaison avec PostgreSQL, car je ne connais aucune mesure plus récente, mais ma propre expérience avec SQLite dans un environnement assez similaire est plutôt bonne. P>
La seule chose qui pourrait causer des problèmes à mon avis est que vous avez plutôt beaucoup écrit. Mais tout dépend du nombre total par seconde que je dirais. P>
De plus, votre réglage doit avoir un processus de serveur est optimal pour SQLite à mon avis - vous avez donc contourner sa faiblesse dans la multi-tâche. P>
J'ai utilisé SQLite pour un grand produit client / serveur utilisé avec ~ 10 utilisateurs simultanés et je Vous ne pouvez tout simplement pas être très loin lorsque toute la base de données est verrouillée chaque fois que quelqu'un doit écrire quelque chose .. p>
J'aime beaucoup SQLite (j'ai même écrit un utilitaire commercial pour comparer des bases de données SQLITE - SQLite Comparez mais je ne pense pas que cela correspond à la facture lorsque vous avez des scénarios client / serveur. P>
Un auteur de SQLITE dit qu'elle doit être utilisée comme remplacement des formats de fichier personnalisés et non un serveur de base de données respecté. J'aimerais avoir pris son conseil plus au sérieux .. p>
À mon avis, vous ne pouvez avoir aucun problème avec une granularité de verrouillage fine lorsque vous disposez de plusieurs processus de serveur accédant à un fichier DB ou à vos clients d'accéder directement à la DB. Lorsque vous avez un processus de serveur, comment pouvez-vous obtenir des problèmes de verrouillage (OK, je dois ajouter que vous n'utilisez pas de threads ...)?
En fait, j'ai un seul serveur qui accède à la base de données au nom de plusieurs processus client. Et alors? Dans mon cas - chaque client est représenté par un thread de travailleur sur le serveur et lorsque vous avez plusieurs clients travaillant sur le serveur, vous aurez également plusieurs threads fonctionnant sur le moteur de base de données simultanément. Comme il est très difficile de prédire à l'avance comment l'accès à la base de données sera réellement effectué (c'est-à-dire Lire les modèles d'accès à l'écriture), je suggère fortement de ne pas faire une décision aussi limite (en utilisant SQLite au lieu de PostgreSQL) dès le début.
Y a-t-il une nouvelle maison pour votre utilitaire de comparaison SQLite?
Depuis un site Web est i> une application client-serveur, je ne comprends pas pourquoi cela est différent. Que pensez-vous est différent? Pourquoi dis-tu qu'une application cliente n'est pas essentiellement identique à celle d'une application Web Server?
C'est essentiellement la même chose, mais la question de l'évolutivité de la SQLite était un compteur de repère Stackoverflow, alors j'imagine que cela avait des habitudes d'accès totalement différents. Une autre différence importante serait que je peux contrôler étroitement toute la pile technique, alors qu'avec un navigateur, certains choix sont prédéterminés pour vous.
@RPG: Oui, lorsque vous avez votre propre configuration C / S, vous avez plus de contrôle dans l'ensemble comme dans une configuration de site Web. Ceci à mon avis parle de SQLite - quand il est évolutif dans une configuration du site Web, pourquoi ne devrait-il pas être dans votre configuration, où vous avez plus de contrôle? De plus, les modèles d'accès peuvent être un problème, bien sûr. Beaucoup d'écrivies (mélangées à des lectures) pondent plus de souches sur un moteur à base de données en lecture seule en lecture seule. Sûr! Je dirais que cela dépend de la quantité de données que vous modifiez généralement en un aller-retour (nombre de lignes, colonnes et tables ...). Êtes-vous capable de mettre ces écritures en une transaction ... et ainsi de suite