Quand utiliserais-je XML au lieu de SQL? [fermé]

102

Je travaille depuis quelques années sur des applications Web basées sur des bases de données et j'ai récemment entrepris un projet impliquant un CMS compatible XML. Cela m'a amené à réfléchir à l'utilisation de XML / XSLT en général et dans quelles situations il serait plus utile que l'approche que j'ai toujours utilisée, qui consiste à stocker toutes mes données dans une base de données (My) SQL puis à utiliser PHP / Python / etc. pour l'utiliser sur le Web au besoin.

Il y a évidemment quelque chose que je ne "reçois" pas ici .. Quelqu'un pourrait-il me donner des exemples d'applications où le stockage des données dans des fichiers XML plutôt que dans une base de données serait préférable?

Patrick Lewis
la source
4
Je pense que la question est plus précisément XML vs un SGBDR, pas vs SQL.
JAL
4
Je pense que la question est plus précisément FILE vs un SGBDR, pas XML vs SQL.
pfeds
Si vous avez le temps, Michael Stonebraker, récent lauréat du prix Turing, "What Goes Around Comes Around" est un excellent article sur cette histoire des bases de données, y compris la façon dont les bases de données XML ont répété les erreurs du passé.
Jeffrey Bosboom

Réponses:

100

Pour citer ce livre (XML efficace: 50 façons spécifiques d'améliorer votre XML):

«XML n'est pas une base de données. Il n'a jamais été conçu pour être une base de données. Ce ne sera jamais une base de données. Les bases de données relationnelles sont une technologie éprouvée avec plus de 20 ans d'expérience dans la mise en œuvre. Ce sont des produits solides, stables et utiles. Ils ne s'en vont pas. XML est une technologie très utile pour déplacer des données entre différentes bases de données ou entre des bases de données et d'autres programmes. Cependant, ce n'est pas en soi une base de données. Ne l'utilisez pas comme tel. "

Je pense que cela résume les choses, même si c'est un peu brutal. XML est un format d'échange de données. On peut avoir des bibliothèques d'analyse XML qui peuvent interroger un DOM avec des expressions XPath, mais ce n'est pas la même chose qu'un SGBD. Vous pouvez créer un SGBD avec une interface DOM / XPath, mais pour obtenir des propriétés ACID ou évoluer vers de grands ensembles de données, vous devez implémenter un moteur de SGBD et un format de données avec des index, la journalisation et d'autres artefacts d'un SGBD - ce qui (par définition) fait c'est autre chose que XML.

ConcernedOfTunbridgeWells
la source
1
Je me rends compte que cette réponse a été écrite en 2008, mais avec l'avènement d'un certain nombre de systèmes de base de données basés sur des fichiers, je me demande s'ils ont plus de sens que le SGBDR conventionnel dans un certain nombre de situations. SQL a été conçu à l'époque sombre, lorsque l'espace disque était coûteux, et c'est devenu une façon de penser dans l'industrie du logiciel. Cela ne veut pas dire que c'est juste en termes de méthodes modernes.
pfeds
Cela ne fait toujours pas de XML une base de données, juste un format de sérialisation pour quelque chose que vous stockez dans un BLOB. Cela peut vous être utile, mais cela ne fait pas de XML un substitut à une fonction de requête complète.
ConcernedOfTunbridgeWells
2
La gestion plus efficace de l'espace disque n'est pas le seul avantage des bases de données relationnelles. La plupart des bases de données relationnelles fonctionnent avec des longueurs de champ et d'enregistrement fixes, ce qui les rend capables de répondre en un temps constant à toute demande, tandis que les stockages de données XML, Yaml, JSon et autres sont essentiellement basés sur du texte, donc tous les requêtes sont effectuées par le biais d'une analyse de texte qui a une surcharge de temps processeur énorme et peut être effectuée dans un laps de temps imprévisible. Cela ne pourrait être résolu qu'avec un pré-tampon coûteux (en termes de temps CPU) avec d'énormes besoins en mémoire.
mg30rg
Si j'écris un SQL SP pour récupérer les données et que j'utilise HTML pour afficher au lieu du fichier XSLT, est-ce plus rapide ou à peu près le même?
SearchForKnowledge
1
de nos jours, vous pouvez utiliser XQuery pour les bases de données XML.
Don Dilanga
23

Utilisez XML pour créer des fichiers qui doivent être envoyés à d'autres applications. XML est plus adapté comme format d'échange de données que comme format de stockage de données.

Le lien suivant n'est pas mal à décrire lors de l'utilisation de XML: Pourquoi utiliser XML?

Veynom
la source
Mise à jour du lien à partir du 06/09/2012
wip le
15

SQL est de bonnes données tabulaires - des données qui s'intègrent facilement dans des lignes et des colonnes. XML est bon pour les données hiérarchiques - des données qui ont plusieurs niveaux de tailles différentes.

SQL est bon pour le stockage et la recherche. XML est bon pour la transmission et le formatage.

James Curran
la source
10

1) Lorsque vous devez échanger vos données avec d'autres. XML est la " lingua franca " du Web - à peu près tout le monde peut le lire et l'interpréter, contrairement à un fichier de base de données.

2) Lorsque votre volume de données est petit et que vous n'avez pas à effectuer de requêtes complexes contre lui. Les fichiers XML sont utiles pour des tâches telles que le stockage de configurations ou de modèles de documents.

3) Lorsque vous n'avez pas beaucoup d'écrivains qui essaient d'accéder aux mêmes données. Les bases de données SQL impliquent des mécanismes de concurrence qui fonctionnent pour vous en coulisse. Les bases de données SQL peuvent prendre en charge les index pour la récupération rapide d'informations sur de grands ensembles de données ...

Dave Markle
la source
5

Choses pour lesquelles j'utilise XML:

  • Persistance d'une hiérarchie d'objets.
  • Déplacement de données d'un processus ou d'une machine à une autre.
  • Des données qui changent rarement, voire pas du tout; paramètres de configuration et autres.
  • Au fur et à mesure que l'entrée de XSLT se transforme: de manière générale, si l'un de mes programmes émet du HTML, il utilise XSLT pour le faire, et les données source seront donc représentées sous forme de XML à certains
  • Balisage de texte. (N'oublions pas ça!)

Il n'y a pas beaucoup de chevauchement entre ces cas d'utilisation et les cas d'utilisation d'une base de données. Certains, mais pas beaucoup.

Ironiquement, là où je fais le plus grand usage de XML pour le moment, c'est dans une application de bureau qui crée un ADO DataSet en mémoire et utilise les méthodes WriteXml et ReadXml du DataSet pour le conserver et le récupérer. J'utilise ADO car il est beaucoup plus facile de créer dynamiquement un modèle de données défini par méta-information en utilisant ADO que d'implémenter mon propre modèle objet pour la tâche.

Voici donc un cas qui semble utiliser XML comme base de données. Mais je ne le suis vraiment pas. J'utilise un modèle objet qui implémente de nombreuses fonctionnalités de type base de données, et j'utilise XML comme format de persistance.

Robert Rossney
la source
3

Je pense qu'il existe de nombreuses applications commerciales qui utilisent largement XML comme support de stockage. Je l'ai fait pour une application de planification de projet, où l'utilisateur stocke chaque projet dans son propre fichier. L'application vit sur une clé USB et ne nécessite aucune installation. Toutes les données sont extraites du XML et travaillées en mémoire, donc getRecord (id) est très rapide.

Donc ma réponse serait ... lorsque les données sont suffisamment petites pour être conservées en mémoire, une base de données est en train de tuer.

baash05
la source
1

Chaque fois que vous n'avez pas le luxe d'avoir une base de données (pensez aux applications mono-utilisateur) ou que vous avez besoin d'un format de stockage très léger.

Comme l'a mentionné l'affiche précédente, un format d'échange.

billb
la source
1

XML et RDMS peuvent être utilisés comme banques de données, mais chaque implémentation a ses propres avantages et inconvénients.

L'utilisation de XML pour stocker des données pour une application Web n'est généralement pas un gros problème jusqu'à ce que vous commenciez à traiter de grandes quantités de données ou que vous décidiez de découvrir d'autres informations à partir de vos données (exemple: exploration de données). En d'autres termes, le stockage de grandes quantités de fichiers XML pour une source de données n'est pas très évolutif, mais il facilite le déplacement des données. XML peut également être utilisé pour sérialiser des objets complexes dans un format non relationnel, ce qui pourrait éliminer le besoin d'un ORM si vous pouvez sérialiser / désérialiser vos objets directement à partir du XML

Les SGBDR (bases de données) sont généralement plus évolutifs, offrent une meilleure prise en charge de la concurrence et sont beaucoup plus rapides lorsque vous travaillez avec de grandes quantités de données. Le modèle relationnel facilite l'exploration des données par la suite. Les bases de données souffrent de l'inadéquation de l'impédance relationnelle objet ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ) qui peut vous obliger à écrire du code laid ou à utiliser des ORM complexes.

IAmCodeMonkey
la source
1

J'irais si j'ai des bases de données mysql limitées sur mon hôte, alors je verrais l'opportunité d'utiliser XML comme magasin de données.

Milot
la source
1

Voici un exemple d'utilisation de XML avec SQL: Les utilisateurs authentifiés lisent et écrivent des données dans diverses bases de données, qui ne sont pas toutes le même SGBD. Les utilisateurs de la société A utilisent les données d'une base de données SQL Server locale. Les utilisateurs de la société B utilisent les données d'une base de données Oracle distante. Etc. Une douzaine de bases de données différentes, chacune avec des schémas légèrement différents pour les mêmes données de base.

Le développeur du site Web n'a pas la possibilité de créer des procédures stockées sur les bases de données distantes. SQL doit être envoyé directement de l'application Web à la base de données. Étant donné que chaque base de données a une syntaxe et un schéma SQL légèrement différents, il est nécessaire d'utiliser un SQL différent pour chacune des 12 bases de données pour la même opération (SELECT, INSERT, etc.).

L'un des choix pour incorporer les instructions SQL dans l'application Web consiste à les placer dans des fichiers XML. Chaque fichier XML contient l'ensemble des instructions SQL pour l'une des douzaines de bases de données. Le code détermine à quelle base de données accède l'utilisateur connecté et récupère le SQL approprié à partir du fichier XML spécifié.

Tout comme avec les procédures stockées, le SQL du fichier XML peut être mis à jour sans arrêter ni recompiler l'application.

DOK
la source
0

Certaines applications utilisent des fichiers XML pour stocker la configuration, je préfère utiliser SQLite pour le faire.

CMS
la source
0

Je n'aurais jamais aucun type de XML pour stocker mes données.

Nous utilisons les transformations XSLT comme couche d'abstraction de données dans notre application SOA. Tous les objets s'envoient des données en XSLT, il n'y a donc qu'un seul langage qu'ils doivent comprendre. Sauf pour le connecteur de base de données, qui doit pouvoir transformer les données en SQL, pour les envoyer à la base de données.

De cette façon, la génération de chaînes SQL n'est pas distribuée sur un million d'objets dans votre application. Rend la maintenance beaucoup plus facile.

Treb
la source
"Tous les objets s'envoient des données dans XSLT," Sérieusement?
Goran
Tous ceux qui communiquent via le bus de service.
Treb
XSLT est le langage pour transformer le XML pour ne pas porter d'informations. J'imagine que vous pourriez utiliser XSLT pour envoyer des données car il s'agit d'un sous-ensemble de XML, mais pourquoi le voudriez-vous?
Goran
Oui, vous avez raison - je dois reformuler cela.
Treb