2009-07-27 7 views
3

J'écris actuellement un client IRC et j'ai essayé de trouver un bon moyen de stocker les paramètres du serveur. Fondamentalement, une grande liste de réseaux et de leurs serveurs comme la plupart des clients IRC ont.Paramètres de stockage: XML vs SQLite?

J'avais décidé d'utiliser SQLite mais j'ai voulu rendre la liste disponible gratuitement en ligne au format XML (et peut-être définitive), pour les autres applications IRC à utiliser. Alors maintenant, je peux simplement stocker les paramètres localement dans le même format. J'ai très peu d'expérience avec ADO.NET ou XML donc je ne sais pas comment ils pourraient comparer dans une situation comme celle-ci.

Est-il plus facile de travailler avec par programmation? Est-ce que c'est plus rapide? Est-ce que ça importe?

+0

Quelle est la taille de cette liste? Combien d'enregistrements? – tuinstoel

+0

Dans les centaines probablement. –

Répondre

5

C'est une question plus vague que vous ne le pensez. Les "paramètres" peuvent englober énormément de choses.

Il existe une bonne infrastructure .NET pour gérer les paramètres d'application dans les fichiers de configuration. Ceux-ci sont généralement exposés à votre programme en tant que propriétés d'un objet Paramètres global; Les classes de l'espace de noms System.Configuration se chargent de les lire et de les conserver, et des outils sont intégrés dans Visual Studio pour générer automatiquement le code permettant de les gérer. L'un des types de données pris en charge par cette infrastructure est StringCollection, vous pouvez donc l'utiliser pour stocker une liste de serveurs.

Mais pour une grande liste de serveurs, ce ne serait pas mon premier choix, pour plusieurs raisons. Je m'attendrais à ce que les éléments de votre liste soient réellement des tuples (par exemple nom d'hôte, port, description), pas des chaînes simples, auquel cas vous devrez formater et analyser les données pour les obtenir dans un StringCollection, et C'est généralement un signe que vous devriez faire quelque chose d'autre. En outre, les paramètres de l'application sont en lecture seule (sous Vista, au moins) et, bien que vous puissiez définir une portée d'utilisateur pour la rendre persistante, cela vous mène vers un chemin que vous voulez probablement comprendre avant de vous engager.

Donc, une autre chose que je considérerais: Votre liste de serveurs est-elle simplement une liste, ou avez-vous un modèle d'objet interne la représentant? Dans ce dernier cas, je pourrais envisager d'utiliser la sérialisation XML pour stocker et récupérer les objets. (La seule chose que je garderais dans le fichier de configuration de l'application serait le chemin vers le fichier d'objet sérialisé.) Je le ferais car la sérialisation et la désérialisation d'objets simples en XML est vraiment facile; Vous n'avez pas à vous soucier de concevoir et de tester un format de sérialisation approprié car les outils le font pour vous. La principale raison pour laquelle je regarde l'utilisation d'une base de données est si mon programme effectue un tas d'opérations dont les résultats doivent être atomiques et durables, ou si pour une raison quelconque je ne veux pas toutes mes données en mémoire à la fois. Si chaque fois que X arrive, j'en veux un enregistrement permanent, cela m'amène à utiliser une base de données. Vous ne voulez pas utiliser la sérialisation XML pour quelque chose comme ça, en général, car vous ne pouvez pas sérialiser de manière réaliste un seul objet si vous enregistrez tous vos objets dans un seul fichier physique. (Bien que ce ne soit certainement pas fou de simplement sérialiser votre modèle d'objet entier pour sauvegarder un changement, c'est exactement ce que fait le produit de mon entreprise et cela indique une autre circonstance dans laquelle je n'utiliserais pas de base de données: changer fréquemment.)

+0

Je ne suis pas sûr de ce que signifie "atomique et durable", pourriez-vous expliquer? –

+3

Ils sont les deux attributs des transactions. Une transaction est indivisible, comme un atome: soit toutes les opérations d'une transaction ont lieu, soit elles ne le sont pas toutes. "Durable" signifie qu'une fois que la transaction est engagée, elle est sauvegardée sous une forme qui supportera, disons, la panne de courant. (Ils sont également cohérents et isolés: voir l'article de Wikipedia pour ACID.) –

2

Personnellement, j'utiliserais XML pour les paramètres - .NET est déjà conçu pour cela et dispose de nombreuses fonctions intégrées pour stocker vos paramètres dans les fichiers de configuration XML. Si vous souhaitez utiliser un schéma personnalisé (que ce soit XML ou DB) pour stocker les paramètres, je dirais que XML ou SQLite fonctionnera aussi bien puisque vous devriez utiliser une API décent autour du magasin de données.

+0

Il existe un wrapper .NET pour SQLite – Sorantis

2

Chaque outil a son propre droit

Il y a beaucoup de battage médiatique arround XML, je sais. Mais vous devriez voir, que XML est fondamentalement un format d'échange - pas un format de stockage (sauf si vous utilisez une base de données XML native qui vous donne plus d'options - mais pourrait aussi ajouter quelques maux de tête). Lorsque votre configuration est plutôt petite (disons moins de 10.000 enregistrements), vous pouvez utiliser XML et être bien. Vous allez charger le tout dans votre mémoire et accéder aux entrées là-bas. Terminé. Mais quand votre configuration est si grande, que vous ne voulez pas la charger complètement, que vous repensez votre décision et restez avec SQLite, ce qui vous donne l'option de charger dynamiquement les parties de la configuration dont vous avez besoin.

Vous pouvez également fournir un petit outil pour créer un fichier XML à partir du contenu DB - la création de XML à partir d'un DB est une tâche plutôt simple.

1

On dirait que vous avez deux applications distinctes ici: un serveur web et un client de bureau (parce que c'est traditionnellement le lieu où ces choses fonctionnent), chacun avec ses propres besoins de stockage. Côté serveur: allez avec un stockage de données relationnel, pas Xml. Fondamentalement, à un certain point, vous devez conserver les données utilisateur séparées des autres données utilisateur sur le serveur. XML n'est pas un bon magasin pour ça.

Sur le client: cela n'a pas vraiment d'importance. Xml sera probablement plus facile à manipuler. Et ne pensez pas que parce que vous utilisez une technologie dans un contexte, vous devez l'utiliser dans l'autre.

+0

Je faisais référence au fait de servir le fichier XML sur le Web pour que d'autres puissent l'utiliser. –

+1

La persistance est un problème avec le Web et les fichiers. Il est souvent plus facile de stocker les données dans une base de données, puis - si nécessaire - de transformer les résultats en XML. Les bases de données rendent la persistance facile (ok, plus facile). –

+0

Ah, je n'avais pas pensé à ça, merci. –

Questions connexes