2009-08-24 8 views
9

j'ai vu quelques questions de performance SQLite ici sur Stackoverflow, mais l'accent était mis sur les sites Web, et j'envisage d'utiliser cette base de données dans un scénario client-serveur:SQLite pour le client-serveur

  • Je prévois 1-10 clients pour un serveur pour l'instant, pourrait aller jusqu'à 50 ou plus dans le futur.
  • un peu plus lectures que l'écriture
  • la DB s'asseyait derrière un processus serveur (par exemple: ne pas utiliser l'accès DB directe à travers un réseau)

Would à l'aide de SQLite rendre l'application moins sensible, par opposition à l'utilisation de PostgreSQL ? Mon intuition me dit que ça devrait aller pour ces charges, mais peut-être que quelqu'un a une expérience pratique avec ce genre de scénario.

+2

Depuis un site Web * est * une application client-serveur lication, je ne comprends pas pourquoi c'est différent. Que pensez-vous est différent? Pourquoi dites-vous qu'une application de serveur client n'est pas essentiellement la même chose qu'une application de serveur Web? –

+0

Essentiellement, c'est la même chose, mais la question de l'évolutivité de SQLite était un compteur de rep de Stackoverflow, donc j'imagine qu'il avait des modèles d'accès totalement différents. Une autre différence importante serait que je peux contrôler étroitement toute la pile technologique, alors qu'avec un navigateur certains choix sont prédéterminés pour vous. – rpg

+1

@rpg: Oui, lorsque vous avez votre propre configuration c/s, vous avez plus de contrôle sur l'ensemble comme dans une configuration de site Web. Cela, à mon avis, parle pour SQLite - quand il est évolutif dans une configuration de site Web, pourquoi ne devrait-il pas être dans votre configuration, où vous avez plus de contrôle? En outre, les modèles d'accès peuvent être un problème, bien sûr. Beaucoup d'écritures (mélangées avec des lectures) mettent plus de contrainte sur un moteur de DB comme configuration pure de lecture seule. Sûr! Je dirais que cela dépend de la quantité de données que vous changez habituellement en un aller-retour (nombre de lignes, de colonnes et de tableaux ...). Êtes-vous capable de mettre ces écritures en une seule transaction ... et ainsi de suite – Juergen

Répondre

13

J'ai utilisé SQLite pour un produit client/serveur majeur utilisé avec ~ 10 utilisateurs simultanés et je regrette profondément cette décision. À mon avis, PostgreSQL est beaucoup plus adapté aux scénarios client/serveur que SQLite en raison de sa granularité de verrouillage.

Vous ne pouvez pas très loin quand est verrouillé la base de données complète chaque fois que quelqu'un a besoin d'écrire quelque chose ..

J'aime SQLite très (j'ai même écrit un utilitaire commercial pour comparer les bases de données SQLite - SQLite Compare mais je ne pensez pas que cela correspond à la facture quand vous avez des scénarios client/serveur

Même l'auteur de SQLite says devrait être utilisé en remplacement des formats de fichiers personnalisés et non comme un serveur de base de données complet. des conseils plus sérieux ..

+0

À mon avis, vous ne pouvez avoir des problèmes avec la granularité de verrouillage fine lorsque vous avez plusieurs processus serveur accédant à un fichier DB ou vos clients accèdent directement à la base de données. 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 ...)? – Juergen

+1

En fait, j'ai un seul serveur qui accède à la base de données au nom de plusieurs processus clients. Et alors? Dans mon cas - chaque client est représenté par un thread de travail dans le serveur et lorsque vous avez plusieurs clients travaillant sur le serveur, vous aurez également plusieurs threads qui travaillent simultanément sur le moteur de base de données. Comme il est très difficile de prédire à l'avance comment l'accès à la base de données sera effectué (par exemple, les accès en lecture et en écriture), je recommande fortement de ne pas prendre de décision limitative (en utilisant SQLite au lieu de PostgreSQL). –

+1

Y a-t-il une nouvelle maison pour votre utilitaire SQLite Compare? – Flimzy

3

Vous n'avez pas mentionné les versions du système d'exploitation et de Postgres que vous utilisez. Cependant, avant d'envisager un changement de moteur de base de données, essayez de faire un peu de journalisation et d'analyse comparative de votre base de données actuelle avec une utilisation typique, puis d'optimiser les questions les plus "lourdes". Et peut-être que votre charge de traitement backend rend l'heure de la question DB non pertinente? Comme SQLite est un SGBD à base de fichiers, l'accès simultané de plusieurs processus dégrade les performances lorsque le nombre de clients augmente jusqu'à (sous la direction après un commentaire)

La question suivante peut être utile: How Scalable is SQLite?

+0

La dégradation des performances ne se produira qu'avec un accès simultané direct - mais comme le dit le PO, les accès sont indirects avec un processus serveur entre ... cela pourrait donner un peu de ralentissement, mais pas de dégradation. – Juergen

+1

À droite, j'ai raté le serveur un par plusieurs clients partie. Quoi qu'il en soit, si la construction DB est si simple, il peut être migré vers SQLite (pas de traitement côté DB, déclencheurs et autres), je ne pense pas que les performances du SGBD peuvent être un problème sérieux lorsque DB est raisonnablement indexé. – tomash

+0

N'a pas encore écrit de code. Je travaille sur la liste des risques du projet, et l'évolutivité en fait partie. Ne pas utiliser de Postgres, mais les systèmes d'exploitation seront probablement XP, Vista au début, plus tard Linux. – rpg

1

je confirme à S. La réponse de Lott. Je ne sais pas comment SQLite fonctionne par rapport à PostgreSQL, car je ne connais pas de mesures plus récentes, mais ma propre expérience avec SQLite dans un environnement assez similaire est plutôt bonne.

La seule chose qui pourrait causer des problèmes à mon avis est que vous avez plutôt plusieurs écritures. Mais tout dépend du nombre total par seconde je dirais.

Votre configuration pour avoir un processus de serveur est également optimale pour SQLite - vous évitez ainsi sa faiblesse dans le multitâche.