2008-10-12 8 views
5

J'ai un système qui génère un grand nombre de documents XML tous les jours (de l'ordre de 1 million) et je voudrais pouvoir les stocker et les indexer afin de pouvoir, par exemple, rechercher tous les documents avec un certain champ défini à une valeur donnée. Je comprends qu'il existe fondamentalement deux types de bases de données XML, celles qui fournissent un support XML au-dessus d'une base de données relationnelle conventionnelle et celles qui sont des bases de données XML "natives". Étant donné que je suis ouvert à l'un ou l'autre, que recommanderiez-vous?Quelle base de données a le meilleur support XML?

Répondre

3

Je ne peux pas vous donner un bon candidat, mais si vous voulez éviter d'en choisir un mauvais, évitez Oracle XmlDB. C'est lent et buggy comme l'enfer. L'une des pires extensions d'Oracle à son SGBD.

+0

Merci, je viens de regarder dedans. –

1

Selon les personnes qui ont travaillé dessus monetDB est tout à fait capable de gérer xml. Fondamentalement, quand vous voulez faire xquery sur le contenu, vous voulez avoir quelque chose qui peut le faire correctement. La structure d'un document XML très flexible et de longueur indéterminée est fondamentalement différente de celle d'un rdbms. Cela signifie que les choses doivent être stockées et indexées intelligemment. Pour les systèmes dbms traditionnels, il s'agit d'un raccourci facile pour stocker le fichier XML en tant que BLOB (objet binaire). Mais les BLOB ne sont généralement pas indexés et vivent principalement en dehors du magasin de données principal. Pour analyser xml correctement, le système doit aller dans le xml lors du stockage. MonetDB le fait apparemment.

6

Microsoft SQL Server prend en charge les colonnes XML. C'est plus qu'un simple support BLOB/TEXT.

Vous pouvez utiliser des colonnes XML de manière non structurée, où SQL Server s'assurera simplement qu'elles sont correctes. Cela permet de stocker des documents XML arbitraires dans SQL Server, tout en vous assurant que vous avez affaire à du XML et pas seulement à des octets/caractères arbitraires. SQL Server vous permet de lancer une requête en utilisant XQuery.

Vous pouvez également créer des colonnes XML conformes à un schéma à l'aide de XSD. Plus intéressant, SQL Server permet l'indexation du code XML afin que vos requêtes XPath puissent fonctionner correctement. Pour plus d'informations, voir «What's New for XML in SQL Server 2008» pour plus d'informations. (Bien que la plupart du support XML existe dans SQL Server 2005.)

0

Essayez sans aucun doute MS-SQL, Oracle et d'autres systèmes existants qui prennent en charge XQuery. Mais, si les requêtes XML dont vous avez besoin sont connues à l'avance, il peut être plus simple de stocker le XML dans un BLOB et d'ajouter un ou deux champs indexés avec une copie de l'élément XML concerné (s).

3

DB2 9.x avec le support PureXML est une possibilité.

4

Vous pouvez également commander MarkLogic Server ou eXist.

Si vous avez une quantité modérée de contenu (quelques Go), eXist fera l'affaire. Au-delà de cela, vous voudrez probablement regarder dans MarkLogic.

Vous pouvez télécharger et vérifier les deux, car eXist est gratuit et MarkLogic a une licence communautaire pour vous permettre de jouer avec.

4

Si vous êtes à la recherche d'un XML db natif, je vous suggère certainement Sedna. Brillant soutien aux développeurs ainsi. À partir de DB2 Viper, IBM DB2 a commencé à fournir un support natif pour le stockage de données XML ainsi que l'interrogation de données XML à partir de la base de données

1

DB2 est conçu pour optimiser l'accès aux données XML et relationnelles. Ces fonctionnalités sont disponibles pour C++, .NET, COBOL, Java et PHP.

XQuery est une nouvelle langue utilisée pour l'interrogation des données XML dans DB2

demo requête:

create table person(name varchar(20), data xml); 

insert into person values('bane', XMLPARSE(DOCUMENT ' 
<person> 
<first-name>Tom</first-name> 
<last-name>Hardy</last-name> 
<mobile>89898989</mobile> 

</person> 
' STRIP WHITESPACE)) 


some simple xQueries 

SELECT * 
FROM googolplex.person 
WHERE xmlexists('$s[person/first-name="bane"]' PASSING person AS "s"); 
Questions connexes