使用基于XML的数据库有哪些优缺点?

5
我发现了一个名为GetSimple的CMS,它使用XML来存储所有内部数据。从某种意义上说,它将XML用作数据库。现在有人能解释一下使用XML作为数据库的优缺点吗?
提前感谢。 Tanmoy
6个回答

7

以下内容摘自该网站:

如果您的应用程序需要在企业间传输数据,那么XML是一个很好的解决方案。XML使您可以通过使用标准HTTP协议在互联网和防火墙之间发送数据。如果您的应用程序需要在硬件或软件平台(操作系统)之间传输数据,那么XML也是一个不错的选择。 XML不会受到机器或操作系统的限制。最后,如果您只是想确保应用程序或数据源即使数据模式发生变化也能够强大,那么XML是一个不错的选择。由于您可以通过使用元素和属性名称而不是偏移量来访问XML格式的数据,因此XML使您的应用程序具有可扩展性。请注意,在XML中使用元素和属性名称访问数据类似于在SQL Server表中按名称访问字段。如果您具有其中一个或多个应用程序要求,则XML是一个不错的解决方案。

接下来,您需要确定在应用程序内生成或消耗XML的最佳位置,这是一个重要的决策,因为使用XML会产生处理开销。这种开销表现出不同的方式,具体取决于您是消费还是生成XML。对于XML消费者,您至少需要一种方法来解析XML。您可能还需要一个对象模型来访问解析的数据。对于XML生产者,将本地数据格式转换为XML会产生开销。在中间层,处理开销至关重要。如果您的中间层程序对数据进行操作、计算或重新格式化,并且您的数据库在防火墙内部,则XML不应该是您的首选。在这种情况下,从数据库请求正常结果集,并使用传统的数据访问方法执行应用程序处理将更有效。处理完成后,中间层应用程序可以生成XML输出。使用传统的数据访问方法可以避免在数据库中生成XML所带来的开销以及在中间层上解析XML和构建对象模型所带来的开销。在中间层上生成XML的唯一潜在好处是您可以松散耦合中间层应用程序和数据库,但成本相当高。

现在,让我们将这些使用指南应用于您在问题中描述的情况。您似乎没有要求在企业之间、通过互联网或防火墙传输数据。因此,除非您想使您的应用程序更具可扩展性,否则XML不是您场景的好选择。传统的数据访问技术可以满足您的需求。但是,为了展示XML的价值,假设您需要使您的应用程序具有可扩展性。您可以升级到SQL Server 2000并使用其集成的XML支持。这是您最好的选择,因为它提供了最大的灵活性。如果您必须从SQL Server 7.0或6.5访问您的数据,则请查看SQL Server XML技术预览版:http://msdn.microsoft.com/downloads/samples/internet/xml/sqlxml/default.asp。此预览版提供类似于SQL Server 2000中的XML支持的功能,但该预览版适用于SQL Server 7.0和6.5。(有关SQL Server 2000的XML集成和Microsoft的XML技术预览之间差异的信息,请参见Bob Beauchemin,“The XML Files”,2000年9月。)

下次请给一个简短的概要并提供链接。然后用自己的话总结一下,谢谢。 - Elizabeth Buckwalter
3
我加粗了主要点,而且我只粘贴了相关信息。-1非常、非常不必要。 - Kyle Rosendo
2
@Elizabeth,如果外部资源的相关部分较长,包含它们是没有问题的。只要适当地进行归属并且清晰明了即可。 - Rex M
嗨,Kyle,感谢你详细的回答。真的很有帮助。但是你知道有没有任何由开源技术专家撰写的文章吗? - 0xFaCeB00c
1
嗨,Tanmoy,很抱歉,但我真的不明白为什么会有所不同?该文章是为了比较数据库与平面文件XML的优点而撰写的。即使MSSQL被称为替代方案,它仍然只是XML与DB之间的比较。 - Kyle Rosendo

3

只要数据集相对较小,使用XML作为数据库是可以正常工作的。这意味着它可以全部存储在内存中并且舒适地保留在那里。一旦数据增长到无法全部存储在内存中的程度,您可能会开始看到严重的性能下降。


嗨,秃头,性能下降可能会发生,但您知道可以将多少数据聚合到XML数据库中吗? - 0xFaCeB00c
说实话,在内存填满之前,您会开始看到效率低下的查询。许多XML或平面文件数据库在超过20或30兆时会开始变慢,这取决于您的数据结构。 - Paul McMillan
MarkLogic服务器(一种本地XML数据库)可以处理数百太字节,而eXist(一种开源的本地XML数据库)只能处理数百吉字节到1太字节。文件大小并不重要,因为所有的XML都被索引并存储在持久化DOM中。所以对数百吉字节的XQuery查询可以轻松完成亚秒级的查询。 - Casey Jordan

0

0

实际上,XML文档已经是数据库了,无论你使用DOM、SAX、Pull还是VTD-XML,存储在数据库中后仍然需要进行操作... 在我看来,这更多地是一种视角的转变。


为什么不使用社区维基?我一开始就不知道它的用途是什么。 - vtd-xml-author

0
在网络上简短搜索后,发现了XML.com上的这篇文章
引言如下:“在最近的XML-DEV讨论中,关于如何为您的XML应用程序选择最合适的数据库,XML-Deviant捕捉到了将帮助您更接近决策的指标。” 该文章讨论了“数据”和“文档”的区别。

0

我认为这还取决于您查询的复杂性。如果您相当熟悉编写XPath查询,那么即使您必须跨一些“维度”查询数据,您仍然会得到相当不可怕的XPath代码。

然而,如果您正在谈论需要在SQL中跨3或4个表进行联接的数据模型,则您可能已经接近XPath停止良好扩展的点。我无法确切地说其他查询语言(如XQuery或XLinq)的效果如何——也许权衡在不同的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接