Est-il judicieux d’utiliser un serveur de base de données si l’application ne fait que localement?

41

J'ai vu des applications qui sont essentiellement des logiciels d'application qui s'exécutent localement sur le système (elles n'ont donc pas beaucoup de communication sur le réseau). Ces applications semblent dépendre des serveurs de base de données pour stocker leurs données.

Amarok (un lecteur de musique populaire sous Linux) est un exemple d'application. Je ne sais pas s'ils le font toujours, mais je me souviens qu'il fut un temps où installer Amarok signifiait que vous deviez installer un serveur MySQL et le faire fonctionner en arrière-plan tout le temps.

Quel est l'avantage d'utiliser un serveur pour le stockage local par rapport à l'utilisation d'une solution Embedded SQL plus petite comme sqlite? Je parle de logiciel d'application en général, pas nécessairement amarok (ce n'était qu'un exemple). Existe-t-il des situations dans lesquelles l’utilisation d’un serveur de base de données a du sens par rapport à une base de données intégrée?

9a3eedi
la source
4
Avoir une base de données peut être très important. Avoir une base de données en cours de traitement ou une base de données de processus distincte est un choix / détail de mise en œuvre.
9000
2
Je comprends que. La question est plutôt de savoir pourquoi choisir une base de données de processus séparée (telle que le serveur mysql) par rapport à une base de données en cours de traitement (telle que SQLite) pour les applications locales.
9a3eedi

Réponses:

29

SQLite offre un assez bon aperçu du moment de l’utiliser ou non par rapport aux alternatives:

https://www.sqlite.org/whentouse.html

Cette ligne de résumé capture extrêmement bien le cas d'utilisation de SQLite dans mon expérience:

SQLite ne concurrence pas les bases de données client / serveur. SQLite est en concurrence avec fopen ().

L'article se développe longuement sur ce point. Il comporte également une section intitulée "Situations dans lesquelles un SGBDR client / serveur peut mieux fonctionner". En un mot, ils sont:

  • Applications client / serveur : plusieurs utilisateurs sur un réseau.
  • Sites Web volumineux : vous pouvez soit écrire intensivement, soit lire suffisamment pour exiger un sharding.
  • Très grands ensembles de données : plus gros que ce qui peut être raisonnablement stocké sur un disque.
  • Concurrence élevée : notamment les écritures concurrentes.
Denis de Bernardy
la source
@ 9a3eedi: en fait, aucun de ces quatre points ne décrit un scénario avec un serveur de base de données complet associé à un stockage local (en particulier les deux premiers sont exactement le contraire) - cela vous dérangerait-il de nous expliquer pourquoi vous avez choisi cela répondre, même si cela ne correspond pas à votre question initiale? En passant, j’ai donné à cette réponse un vote négatif pour cette raison.
Doc Brown
@ DocBrown: Les cas spécifiques dans lesquels vous devriez utiliser un SGBDR client / serveur sont [voir la réponse]; pour tout le reste, SQLite fonctionne bien. Je ne suis pas sûr de comprendre ce qui est incertain, alors n'hésitez pas à modifier la réponse si vous pensez que cela est nécessaire.
Denis de Bernardy
La question initiale concernait des cas spécifiques dans lesquels la base de données ac / s est logique si l’application ne fait que des tâches localement (cite du titre) ou utilise un serveur pour le stockage local (cite du texte de la question). Les quatre scénarios ci-dessus sont exactement l'opposé de celui (les deux premiers) ou très improbable ou peu commun en tant que scénarios "locaux" (les deux autres). Donc, ce que vous avez écrit n’est pas faux, mais cela ne correspond pas à la question.
Doc Brown
@ DocBrown - et la réponse courte est: cela n’a aucun sens si vous n’avez pas affaire à des ensembles de données démesurés ou si vous avez besoin d’écritures simultanées. (Ou, pour des raisons évidentes, le besoin de quelque chose que SQLite ne propose pas.) Encore une fois, n'hésitez pas à modifier la réponse si ce point vous est incertain.
Denis de Bernardy
Eh bien, si vous pensez vraiment que cette liste est complète (et donnez donc une déclaration cachée selon laquelle l'utilisation d'un serveur de base de données C / S n'a aucun sens pour un scénario local), alors je ne suis pas d'accord et je ne pense pas que je puisse améliorer votre réponse en ajoutant quelques précisions.
Doc Brown
28

Même pour un système unique avec un seul utilisateur, un "vrai" serveur de base de données a du sens:

  1. Il utilise un langage familier ( SQL ). SQLite utilise SQL, mais certaines bases de données incorporées (par exemple , base de données objet , NoSQL ) n'utilisent pas SQL. Celles-ci ont tendance à avoir une courbe d'apprentissage plus longue car elles sont moins courantes.
  2. Il fournit une intégrité référentielle, des contraintes, des déclencheurs, etc. que des produits tels que SQLite peuvent ne pas fournir ou du moins ne pas fournir totalement.
  3. En ciblant une véritable base de données réseau conforme à ACID multi-utilisateurs, l'application peut opérer dans un scénario utilisateur unique / poste de travail unique ou en tant qu'application hébergée multi-utilisateurs utilisant la même base de code .
  4. L’utilisateur a la possibilité d’examiner les données hors ligne à l’aide d’outils standard (par exemple, SQL Developer, MySQL Workbench, SQL Server Management Studio), de charger ou de sauvegarder des données à l’aide de ces outils, etc. Il est toutefois possible de le faire avec de nombreuses bases de données intégrées. types, les gens sont peut-être plus familiarisés avec ces outils du monde des bases de données C / S.

Le principal inconvénient est d'installer et de maintenir le logiciel du serveur de base de données, ce qui est un peu complexe pour les utilisateurs non techniques (et même pour de nombreux utilisateurs techniques). Les systèmes d'exploitation tels que Linux rendent cela plus facile: PostgreSQL et MySQL s'exécutent sur mon système Linux. J'ai installé des applications qui s'y sont accrochées avec très peu d'interaction.

Doc Brown
la source
9
En fait, il y a un système de base de données ( à savoir Sybase SQL Anywhere) avec un support complet SQL, l' intégrité référentielle, ACID, procédures stockées, qui ne pas besoin d' une configuration du serveur ou une installation en tant que service lorsqu'il est exécuté dans une configuration locale (si elle peut être configuration pour un environnement multi-utilisateur). Je ne connais pas d'autre système de base de données contenant ces propriétés. Si quelqu'un en connaissait une, cela m'intéresserait.
Doc Brown
3
@ DocBrown IIRC MS SQLServer Compact vous le fournit car il s'agit d'une dll, bien que LocalDB soit probablement le meilleur choix - il ne nécessite pas d'installation en tant que service mais requiert des droits d'administrateur.
gbjbaanb
5
Pour ajouter à la discussion sur la validité des inconvénients - outre SQLite, curieusement déjà mentionné dans la réponse, un certain nombre de bases de données non SQL et de systèmes de base de données, tels que OrientDB, Solr, etc., ont un support d’incorporation dédié .
mikołak
14
SQLite fournit une intégrité référentielle (même si elle doit être activée) et des contraintes de base. Il est également beaucoup plus rapide que la plupart des serveurs s’il est utilisé correctement. Son principal inconvénient par rapport au serveur est qu’il s’agit d’un écrivain unique.
Jan Hudec le
2
@ DocBrown: la base de données intégrée de Firebird fournit un support SQL complet, y compris l'intégrité référentielle, les garanties ACID, les processus stockés et les déclencheurs. Auparavant, il ne prenait pas en charge plusieurs connexions simultanées à une base de données intégrée. Je ne sais pas si cette limitation est toujours en vigueur ou non, mais l'ensemble des fonctionnalités SQL est présent.
Mason Wheeler
21

Je pense que cela a à voir avec l'inertie.

Amarok est basé sur XMMS, datant de 1997. Pour disposer de bonnes capacités de base de données, vous deviez utiliser un serveur, car il était bien plus puissant que les solutions basées sur des fichiers, qui ne possédaient en aucun cas de bonnes capacités de base de données.

La popularité à venir et la popularité croissante de bonnes bases de données intégrées locales telles que SQLlite sont quelque chose d'assez récent.

Pieter B
la source
D'après mes souvenirs, AmaroK 1 (qui aurait pu être basé sur XMMS) ne dépendait pas d'un serveur de base de données. C'est Amarok 2, sorti avec KDE4, qui a introduit la dépendance, et à l'époque, je trouvais très étrange qu'ils me demandent d'installer MySQL et de le laisser fonctionner à l'arrière
9a3eedi
10

La fonctionnalité discriminante la plus importante est la concurrence .

Si vous avez une seule application qui s'exécute dans une instance pour l'utilisateur, la solution intégrée (qu'il s'agisse de sqlite ou d'un stockage d'objet) est généralement correcte.

Toutefois, si plusieurs instances doivent manipuler la base de données simultanément, vous devez disposer d'un serveur pour la synchroniser. SQLite n'autorise qu'une écriture à la fois, dans l'ensemble de la base de données, de même que la plupart des autres solutions intégrées. Et si vous avez plusieurs applications, vous aurez probablement besoin de spécifications de contraintes plus détaillées que les solutions intégrées ne permettent généralement pas non plus.

Jan Hudec
la source
5

La plupart des autres réponses parlent de la simultanéité comme un avantage, mais comme la base de données est exécutée en tant que serveur, la base de données peut exécuter des tâches sans que l'exécution de l'application ne soit nécessaire. Il peut s'agir de maintenance, de sauvegardes, de synchronisation avec un autre serveur ou de n'importe quelle tâche planifiée.

Si vous pensez que votre application peut se transformer en application client / serveur, vous pouvez commencer par utiliser un SGBDR à partir du début au lieu de le transférer ultérieurement.

Je ne sais pas si l'exemple donné tire parti de ceci ou non.

JeffO
la source
2

À moins que vous n'utilisiez un système embarqué avec peu de mémoire et de ressources processeur, je ne pense pas que faire fonctionner un serveur en arrière-plan vous fasse du mal.

L'exécution d'un serveur de base de données localement est acceptable. La base de données est conçue pour accéder aux données et les manipuler. L'accès au réseau est un plus, qui peut être nécessaire ou non. Certains outils techniques et scientifiques le font.

Supposons que vous utilisez des données, sur une application locale. Pourquoi ne devriez-vous pas utiliser une base de données? par opposition à quoi?

cauchy
la source
Si je devais déployer une application sur des utilisateurs normaux (par exemple un lecteur de musique comme AmaroK), je penserais que les installer sur un serveur MySQL et le faire tourner en arrière-plan est un peu trop une exigence système et que les utilisateurs le souhaiteraient. pas comme. Mais je suppose que cela dépend de l'application. Ceci est opposé à l'utilisation de quelque chose comme SQLite.
9a3eedi
2

Cela dépend de votre abstraction de données et de votre espace applicatif global, des exigences en matière de gestion des accès, de l'investissement que vous envisagez pour la maintenance des données, de l'urgence du prototype requis, de votre position dans la courbe d'apprentissage, etc.

Si vous souhaitez garantir une base de données étroitement intégrée à une application ne nécessitant pas d'accès depuis d'autres applications, créez des îlots de base de données intégrée. L'implémentation de Mozilla Firefox Web Storage avec SQLite peut être donnée à titre d'exemple.

Si vous avez besoin d'efficacité supplémentaire avec des données limitées, une sélection de conception de bases de données en mémoire est préférable.

D'autre part, si de nombreuses applications exécutent plusieurs requêtes sur les mêmes données et qu'il est nécessaire de mieux structurer le stockage des données pour optimiser les performances, un SGBD centralisé est requis. Je le préférerai absolument pour la recherche scientifique, lorsque cela nécessite une grande quantité de données et que le temps de réponse à la requête affectera considérablement l'expérience globale de l'utilisateur.

Pour l’affaire Amarok, j’imaginais que c’était une sélection de SGBD à code source ouvert à ce moment-là, avant qu’ils choisissent le chemin des bases de données incorporées.

Si vous avez une définition spécifique du système, il sera plus facile de peser le pour et le contre.

V / r, Umut

Umut Kahramankaptan
la source