2010-09-09 7 views
2

Quel serait le meilleur format de données (XML, base de données, etc.) pour les données de grande taille lorsque nous souhaitons les charger (importer) facilement et efficacement dans des objets métier dans .NET?Comment puis-je importer et exporter facilement et facilement des données de grande taille dans .NET?

Je veux charger toutes les données en une fois et créer tous les objets métier. Les données doivent avoir une sorte de "schéma" pour permettre à d'autres personnes de le créer.

Notez également que je souhaite faciliter le processus de création des classes métier à partir du schéma spécifique des données (peut être un schéma XSD, un schéma de base de données, etc.). J'ai essayé deux approches, dont aucun ne satisfaisant: entièrement prouvé

  1. XML, xsd.exe ou un outil équivalent (comme Xsd2Code) pour générer les classes d'affaires et la cartographie. Pour les données volumineuses, la taille du magasin XML devient un problème.

  2. Database (CE SQL Server), tirant parti de l'Entity Framework pour créer les classes d'affaires et la mise en correspondance: lors des premiers essais, pour augmenter la taille de la base de données, EF était de sérieux problèmes (problèmes de performance et de exceptions de mémoire).

Ce que je veux obtenir (chargement de grandes données d'affaires en mémoire en une seule fois) semble « standard » (ou est-ce vraiment?), Mais je ne peux pas trouver un moyen efficace et propre à le faire.

+2

Une base de données est pour ** stocker ** (et manipuler) des données - XML ​​est idéal pour ** échanger ** des données (import/export, ETL etc.). Utilisez chacun comme approprié (par exemple, ** ne ** utilisez pas le format XML comme stockage) –

+0

Vous avez besoin d'un magasin de données?Avez-vous déjà une base de données configurée avec vos données? – Silkster

+0

Pour clarifier un peu les choses, nous avons testé deux solutions: récupérer des données à partir de XML et du fichier SQL Server CE. Ces fichiers sont créés par d'autres personnes et nous devons charger toutes les données en mémoire pour effectuer des calculs. Peut-être que le terme «magasin de données» est trompeur. Nous sommes en train d'échanger des données. – Moyama

Répondre

0

Jetez un coup d'œil à XML Serialization dans le framework .NET. J'utilise ceci avec un projet d'échange de données et .NET prend en charge la sérialisation et la désérialisation des informations dans et à partir d'objets avec très peu de code. C'est peut-être le chemin que vous voulez prendre. Editer: Je vois que vous avez déjà joué avec xsd.exe, vous pouvez utiliser un db pour stocker le XML dans une colonne dans un tableau pour une récupération facile. Nous le faisons aussi dans le projet actuel. Nous recevons du code XML d'une source tierce, nous le stockons donc dans une table, nous le validons par rapport au schéma, puis nous le lisons dans des objets .NET générés à partir d'un fichier .xsd en utilisant l'approche xsd.exe. Je ne suis pas sûr de la taille de vos données, mais cette approche fonctionne bien pour nous.

+0

Merci pour votre réponse. En fait, j'ai aussi testé la sérialisation de DataContract car il est possible d'obtenir facilement un schéma XSD de nos classes métier. Comme les fichiers de données sont créés par d'autres personnes (pas nécessairement avec .NET), l'idée était simplement de leur fournir le fichier XSD, mais comme mentionné les fichiers XML ne sont pas vraiment adéquats (données volumineuses) et le XSD généré de cette façon est plus complexe à comprendre qu'un sur mesure. – Moyama

1

Votre question est en fait un peu vague, donc je peux seulement répondre avec mon instinct. Le stockage des données concerne les bases de données. Vous parlez d'objets métier, donc utiliser un outil OR/M est un choix logique. Puisque vous êtes dans .NET, Entity Framework est un choix logique.

Il ne me semble pas que Entity Framework devrait causer des problèmes autour de la mémoire que d'autres solutions ne vous donneront pas. Je pense que vos problèmes de MOO sont causés par une mauvaise utilisation de l'outil ou peut-être d'autres problèmes. Si vous continuez à avoir des problèmes, s'il vous plaît poser une question spécifique sur ce problème, ici à SO.

Bonne chance.

+0

Salut, je pensais aussi que EF ne devrait pas causer de problèmes, peut-être que je l'utilise mal. J'ai utilisé le concepteur EDMX pour faire le mapping OU. Dans les tests réels, je crée simplement l'objectcontext et récupère des données en utilisant linq pour les entités, toutes choses simples, mais j'ai rencontré des problèmes de performance. – Moyama

+0

Des problèmes de performance sont possibles. EF n'est pas le plus rapide en son genre, mais la plupart des problèmes de performance peuvent être résolus. Je vous conseille de poster une question concrète (avec des exemples de code qui montrent votre problème) ici à Stackoverflow. – Steven

0

Si vous avez XML et SQLDatabases, vous pouvez essayer LINQ. Utilisez le programme SQLMetal pour générer automatiquement des classes correspondant à vos tables SQLDatabase. Si vous avez des relations dans votre base de données, elles sont également conservées dans le modèle objet généré par SQLMetal.

+0

Salut, c'est essentiellement ce que j'ai fait, laissant Entity Framework générer les classes de l'entreprise et le mappage OU. Mon problème était que dans mes tests EF avait des performances médiocres lors du chargement de données volumineuses. – Moyama

+0

Quelle était la taille des données? – watbywbarif

Questions connexes