我有一个系统每天生成大量的XML文档(大约100万个),我希望能够存储和索引这些文档,以便我可以搜索所有文档某个字段设置为给定值。
据我所知,基本上有两种类型的XML数据库,它们在传统的关系数据库之上提供XML支持,而那些是“本机”XML数据库。鉴于我愿意使用其中之一,你会推荐什么?
答案 0 :(得分:6)
Microsoft SQL Server支持XML列。这不仅仅是BLOB / TEXT的支持。
您可以以非结构化方式使用XML列,其中SQL Server将确保它们是正确的XML。这允许在SQL Server中存储任意XML文档,但仍然确保您处理XML而不仅仅是任意字节/字符。 SQL Server允许您使用XQuery进行查询。
您还可以使用XSD创建符合架构的XML列。更有趣的是,SQL Server允许对XML进行索引,以便您的XPath查询可以很好地执行。
有关详细信息,请参阅“What's New for XML in SQL Server 2008”。 (尽管SQL Server 2005中存在大多数XML支持。)
答案 1 :(得分:4)
您可能还希望结帐MarkLogic Server或eXist。
如果您有适量的内容(几GB),那么eXist会这样做。除此之外,您可能希望了解MarkLogic。
您可以下载并查看这两个版本,因为eXist是免费的,MarkLogic拥有社区许可证供您使用。
答案 2 :(得分:4)
如果您正在寻找原生XML数据库,我肯定会建议Sedna。也是出色的开发人员支持。
答案 3 :(得分:3)
我不能给你一个好的候选人,但是如果你想避免选择一个糟糕的候选者,请避免使用Oracle XmlDB。这很慢,而且越来越多。 Oracle为其DBMS做出的最糟糕的扩展之一。
答案 4 :(得分:3)
支持PureXML的DB2 9.x是可能的。
答案 5 :(得分:1)
根据使用它的人monetDB非常能够处理xml。基本上,当你想对内容进行xquery时,你想要有一些能够正确完成的东西。 XML文档的结构非常灵活且长度不确定,与rdbms的结构根本不同。这意味着需要巧妙地存储和索引事物。对于传统的dbms系统,将xml存储为BLOB(二进制对象)是一种简单的快捷方式。但BLOB通常不会编入索引,主要存在于主数据存储之外。要正确解析xml,系统必须在存储时进入xml。 MonetDB显然是这样做的。
答案 6 :(得分:1)
从DB2 Viper开始,IBM DB2开始为XML数据存储提供本机支持以及查询XML数据。
DB2旨在优化对XML和关系数据的访问,这些功能可用于C ++ ,. NET,COBOL,Java和PHP。
xQuery是一种用于在DB2中查询xml数据的新语言
演示查询:
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");
答案 7 :(得分:0)
绝对尝试使用支持XQuery的MS-SQL,Oracle和其他现有系统。
但是,如果事先知道您需要的基于XML的查询,则可能更容易将XML存储在BLOB中,并使用相关XML元素的副本添加一个或两个索引字段(s )。