Pourquoi SQL n'est pas si répandu dans les grandes applications de bureau?

28

En tant que développeur de logiciels, j'ai travaillé sur des projets allant de minuscules applications maison aux applications d'entreprise de taille moyenne. Dans presque tous les projets, j'ai utilisé une base de données ou j'ai regretté d'avoir choisi de ne pas l'utiliser depuis le début.

Maintenant, je me pose quelques questions sur les bases de données et leur utilisation dans les applications générales:

  • Pourquoi Windows lui-même n'utilise aucune base de données SQL "centrale"? Par exemple:
    • Les données de rapport d'erreurs sont stockées dans un tas de fichiers,
    • Windows Update stocke tout dans des fichiers plats,
    • Le cache des icônes est stocké dans un fichier unique très étrange qui ne semble pas être accessible via SQL, etc.
  • Pourquoi tant de grandes applications évitent d'utiliser des bases de données? Par exemple, Microsoft Outlook ne gagnerait-il pas à utiliser une vraie base de données au lieu de réinventer la roue en ayant son propre format pour les fichiers .pst et en stockant certaines données dans le registre?

Si la base de données ajoute une couche supplémentaire d'une complexité globale et d'une perte de performances minime, c'est un énorme avantage de simplifier le code dans la plupart des circonstances, surtout quand il s'agit de stocker de petits morceaux de données organisés au lieu de gros binaires ruisseaux. Alors pourquoi si peu de produits utilisent réellement des bases de données? La seule application que je connaisse qui utilise réellement la base de données Sqlite est probablement Firefox, et peut-être Microsoft Exchange (mais la dernière n'est pas une application de bureau)?

De plus, un ensemble d'applications, comme Microsoft Office ou Microsoft Expression, ne bénéficierait-il pas d'une base de données SQL unifiée , facilitant le déploiement des applications, la mise à jour / mise à niveau des données, le partage de données entre ces applications, la réalisation de sauvegardes , etc.?

Arseni Mourzenko
la source
4
Parlez pour votre propre plateforme. ;) De nombreuses applications Mac / iPhone utilisent CoreData, qui utilise généralement une base de données SQLite pour le stockage.
mipadi
8
Les bases de données ne sont également que «un tas de fichiers». Je dirais que tous les exemples que vous avez présentés sont en fait des bases de données, mais pas des bases de données relationnelles interrogeables SQL.
Allon Guralnek
8
Par base de données, il entend une base de données relationnelle.
Olivier Jacot-Descombes

Réponses:

20

1) D'une manière générale, les frais généraux liés à l'exécution d'un SGBDR complet sont trop importants et cela ajouterait une charge inutile au système et à la complexité.

En avoir un installé vous facilite la vie en tant que développeur, mais aggrave la vie du propriétaire de la machine, car sa machine est susceptible de fonctionner plus lentement et avec plus de problèmes. Dans les confrontations développeur / utilisateur, l'utilisateur devrait presque toujours gagner.

2) De nombreux magasins de données ont des besoins spécifiques qui ne sont pas satisfaits par quelque chose comme SQL Server Express.

Par exemple, les journaux d'erreurs doivent être écrits sur la chose la plus simple possible pour maximiser les chances que l'écriture se produise et que les données soient disponibles. SQL Server ne sera jamais aussi simple.

Pour les applications plus complexes, l'argument tend à être plus axé sur l'optimisation pour des cas d'utilisateurs très spécifiques - les fichiers plats peuvent être rapides comme l'éclair.

Jon Hopkins
la source
5
Je ne pense pas qu'il voulait dire le type de base de données où vous devez installer un serveur entier. SQLite fonctionne sans serveur et est répandu dans les applications open source.
laurent
@Laurent - s'il ne l'a pas fait alors pourquoi l'a-t-il marqué comme réponse acceptée alors qu'il aurait pu accepter la réponse SQL Lite ci-dessous?
Jon Hopkins
30

De nombreuses applications intègrent SQLite . Citant de leur site Web:

SQLite est une bibliothèque de logiciels qui implémente un moteur de base de données SQL transactionnel autonome, sans serveur et sans configuration. SQLite est le moteur de base de données SQL le plus déployé au monde. Le code source de SQLite est dans le domaine public. ".

Vous utilisez simplement l'une des API disponibles, créez une base de données, des tables, etc. et le moteur SQL stockera tout dans un fichier binaire que vous pouvez placer n'importe où dans le système de fichiers de l'utilisateur. Le meilleur de tous, c'est FLOSS.

Rafael Vega
la source
23

Windows est fourni avec et utilise un moteur de base de données nommé Extensible Storage Engine (ESE) .

ESE est utilisé par Active Directory, Exchange Server, Windows Mail et Desktop Search parmi de nombreux autres services et applications Windows.

Pour le développement, des wrappers ESE open source existent:

Avec la livraison ESE avec chaque version moderne de Windows, vous n'avez aucun problème de déploiement de base de données. Sur le plan architectural, ESE remplit un rôle similaire aux bases de données intégrées telles que SQLite.

Ed James
la source
Peut-être à cause d'un échec de promotion de cette fonctionnalité !! ?? Comment se fait-il que je développe presque exclusivement avec les technologies Microsoft depuis les années 90 et que je n'en ai jamais entendu parler? L'absence d'un bon front-end pourrait être une autre raison. De Wikipedia: "Pendant des années, c'était une API privée utilisée par Microsoft uniquement, mais est depuis devenue une API publiée que tout le monde peut utiliser." "L'API JET Blue a été publiée en 2005 pour faciliter son utilisation par un nombre toujours croissant d'applications et de services à l'intérieur et au-delà de Windows."
Mike soutient Monica
8

Les bases de données relationnelles ne sont pas la structure de données la plus efficace pour chaque domaine. De nombreuses applications de bureau utilisent des bases de données intégrées, vous ne pouvez pas facilement dire qu'elles le font si vous ne voyez que quelques fichiers de données.

Jeremy
la source
C'est le point: pourquoi ne pas simplement utiliser Microsoft SQL Server (Express? Ou une licence spéciale pour un seul serveur local SQL Server préinstallé sur chaque plate-forme Windows?) Au lieu de bases de données intégrées (pas SQL?) Ou d'un propre format binaire extraterrestre comme Microsoft Outlook le fait ?
Arseni Mourzenko
Parce que, comme il l'a dit, SQL n'est pas optimal pour tout. De nombreux magasins de données spécifiques à l'application seront hautement optimisés pour une tâche et, par conséquent, seront plus rapides que SQL avec une empreinte plus petite.
Jon Hopkins
3
@MainMa: Vous venez d'ajouter une dépendance supplémentaire: l'utilisateur doit avoir installé et exécuté SQL Server. Ce n'est pas anodin. Si un serveur local spécial SQL Server a été préinstallé sur tous les ordinateurs Windows, cela peut être différent, mais cela ne se produit pas.
David Thornley
SQLServer Compact est facile à installer: il suffit de copier quelques fichiers.
MarkJ
7

Pourquoi Windows lui-même n'utilise aucune base de données SQL "centrale"?

En fait, cette idée est en développement chez Microsoft depuis un certain temps. Il s'appelle WinFS . Il s'agit d'une technologie intrigante et elle est disponible pour les abonnés MSDN. Dans quelques jours, je vais l'installer sur une machine virtuelle et jouer avec.

Adam Crossland
la source
2
Je me souviens encore que WinFS était la "prochaine grande chose" pour Windows (à l'époque) Longhorn, à l'époque où je savais encore comment utiliser un PC. :-)
Denis de Bernardy
6

Les bases de données offrent de la flexibilité et, comme toutes les fonctionnalités, il y a presque certainement un coût. Si un fichier plat fonctionne, vous pouvez supposer que personne n'aura besoin d'interroger les données de manière imprévue, comme dans un rapport ad hoc.

Les bases de données permettent également de gérer plusieurs connexions / entrées. Encore une fois, si ce n'est pas une exigence pour votre application de bureau, pourquoi ajouter une complexité supplémentaire? En dehors de l'interface utilisateur / de l'installation réelle d'Outlook lui-même, combien d'autres applications ou utilisateurs essaient d'écrire dans le fichier Outlook sur votre ordinateur?

Il serait plus facile si toutes les données se trouvaient dans une base de données relationnelle du point de vue "Je veux pouvoir interroger toutes les données comme je l'entends avec une seule langue comme SQL", mais c'est rarement une priorité avec de nombreuses applications.

La plupart des programmeurs l'examineront à partir de:

  • Je sais ce que l'application est censée faire, c'est tout ce qu'elle est censée faire

  • mon application est la seule à pouvoir accéder et / ou manipuler ces données

  • une structure de fichiers simple de ma propre conception fonctionnera

  • pour au moins une application, j'aimerais éviter de compter sur le code des autres et avoir un contrôle complet.

JeffO
la source
1
+1. Vous avez raison: il n'y a pas de connexions multiples pour les applications de bureau (dans la plupart des cas), ce qui réduit les avantages d'une base de données SQL.
Arseni Mourzenko