2009-10-06 11 views
4

J'ai un DataModule avec XML et j'ai besoin de faire une recherche ...Comment puis-je rechercher un grand ensemble de données XML?

Malheureusement, il y a plus de 300 000 enregistrements et je ne peux pas faire une boucle pour vérifier un par un.

Est-il possible de faire une requête sans utiliser de base de données?

Existe-t-il une autre solution?

Répondre

3

fin de XML pour les petites quantités d'informations, mais pour un ensemble de données grande, une base de données relationnelle est vraiment le seul choix sain d'esprit, especially if you need to be able to query it.

+1

Je viens de lire que Joel sur le post du logiciel, il est assez sur le sujet - même si elle a été écrite en 2001. – Alister

3

Vous pouvez effectuer une recherche en utilisant quelque chose comme XPath: cependant, ce serait tout simplement dire que le L'implémentation XPath effectue la recherche en votre nom (ce qui n'améliore pas nécessairement les performances).

1

Il existe un certain nombre de bases de données en mémoire qui peuvent être utiles. Au moins, vous pourriez alors indexer et interroger les données selon les besoins. Celui que je connais est de components4developers.com. David

2

Je pense qu'il est probablement important de demander Pourquoi utilisez-vous XML pour stocker 300k enregistrements?. Comme XML n'est pas le format le plus efficace pour manipuler les données. Si vous êtes bloqué avec XML, vous devriez lire le fichier XML dans une sorte de base de données (vous pourriez vous en sortir avec une table dans la mémoire, mais là encore vous pourriez manquer de mémoire). Je pense que si vous utilisez un objet TXMLDocument pour charger le fichier XML, vous aurez un sérieux problème de performance ou de mémoire (j'ai eu des problèmes quand je jouais avec un fichier xml 250k en arrière).

Vous pouvez utiliser le DOM MSXML directement (vous pouvez probablement importer la bibliothèque de types) ou utiliser SAX qui vous permettra de l'analyser séquentiellement, ce dont je n'ai pas beaucoup d'expérience.

+1

Oui, SAX est le chemin à parcourir. Il était disponible dans le cadre de MSXML. Pas sûr maintenant. –

0

Vous ne dites pas comment vous implémentez la source de données. J'ai utilisé TClientDataSet connecté via TXMLTransformProvider (OK pas pour les enregistrements 300K) mais pour quelques milliers. et il suffit de définir le filtre et les propriétés filtrées semble "interroger" il va bien ...

Ou ai-je raté quelque chose?

+0

J'ai lu à ce sujet. Vous connaissez un exemple simple pour que je puisse comprendre? – Leo

+0

1. Plongez un TClientDataSet sur le DM. Plonk un TXMLTransformProvider sur DM. Définissez le Tranform en tant que fournisseur. Démarrer XML Mapper à partir du menu des outils - apprendre comment nous: il n'est pas très intuitif Une fois que les fichiers sont Mappés via les fichiers XTR et connectés utilisent un TDatasoure comme d'habitude. – Despatcher

Questions connexes