XML相对于关系型数据库的优缺点

3

使用XML代替关系型数据库是否存在缺点?我之所以问这个问题是因为我的数据更适合用XML结构表示,而不是关系型数据库。我最初考虑过将数据存储在关系型数据库中(存储数据在关系型数据库中),但是由于关系型数据库缺乏处理树状数据结构的灵活性,这让我望而却步。因此,我正在考虑只将数据存储在XML中。

我担心的一件事是性能损失。虽然关系型数据库可以处理大型数据集,但我不确定XML是否也同样如此。此外,数据库查询已经相当成熟并且易于使用和构建,那么XML查询呢?我不知道。

我正在进行.NET应用程序开发。

6个回答

5
如果你正在处理XML数据,那么几乎没有疑问,你应该考虑使用本地XML数据库。最受欢迎的本地XML数据库MarkLogic服务器和eXist都提供非常强大和高效的索引机制,以及本列表中提到的许多功能。实际上,在许多搜索应用程序中,MarkLogic服务器在大型XML数据集上的性能显着优于SQL数据库。这是因为它专门用于处理XML,并且知道对其进行索引的最佳方法,而在不规范化SQL的情况下则不能做到这一点。基于当前市场趋势,很明显尽管SQL不会消失,但它正在输给NoSQL方法,特别是涉及文档中心数据时。
进一步的细节如下:人们交互的大多数数据都是非结构化和分层的。将此数据规范化和非规范化为平面关系结构不仅从信息架构的角度来看耗费时间,而且还迫使我们以不自然的方式查询数据。当前的本地XML数据库允许轻松添加大量的未结构化(但经过模式验证)数据并进行高效索引。使用xpath查询这些文档是一种更自然的遍历和提取数据的方式,因为查询代表了结构。它也可以使用XQuery和XSLT轻松转换。最终结果是开发人员获得更高的投资回报率。你可以用更少的代码来实现更多的功能。我曾经主要编写php/sql应用程序。一旦我们将架构转移到本地XML和XQuery上,我就能够用更简单、高效和简洁的XQuery代替成千上万行的代码。如果你有预算(~250k),可以考虑MarkLogic服务器。它是最令人印象深刻和可扩展的数据库系统之一,而且完全是本地XML。据我所知,它支持事务、回滚等所有SQL提供的其他功能。eXist(http://exist-db.org)是一个开源项目,具有以下特点:完全支持XQuery/XPath/XSLT;高效的索引机制;内置全文搜索;支持REST/WebDAV/SOAP/ATOM/XMLRPC;版本控制。

4
你不应该将XML与关系数据库进行比较,因为它们是两种互补技术;XML不应被视为替代关系数据库的解决方案。
关系数据库用于以一致的方式存储大量数据。关系数据库应该处理数据的一致性等问题...
XML可用于不同计算机系统之间的数据交换,但不应在长时间内用于存储大量数据。Xml无法像关系数据库那样处理数据一致性;它不处理事务等... Xml实际上只是一个文本文件,以某种结构化方式包含数据。

1
原生XML数据库已经发展了很长一段时间,你可能想要查看一些当前流行的数据库。它们支持典型关系型数据库的所有功能,但具有按需索引的能力,而不需要预定义结构和数据。它们远非“仅仅是一个文本文件”。 - Casey Jordan

2
在我看来,需要考虑以下因素:
  1. 哪种更符合您的应用需求
  2. 需要处理多大的数据集?
  3. 您是在应用程序之间传输数据还是要查询它?
考虑了这些因素后,如果您有大量数据处理和查询需求,则建议使用关系数据库管理系统(RDBMS),如果需要导出数据或在应用程序之间传输数据,则建议使用XML。我也想建议您考虑数据约束和完整性需求,就像Nick所建议的那样。
我在这个领域没有太多经验,但这是我从我的学校里听到的建议。
祝一切顺利。

1

RDBMS相对于XML提供的功能,按重要性排序如下:

  • 定义模式的强制执行(虽然这在XML中当然也是可用的)
  • 支持多个写入者
  • 原子事务
  • 引用完整性
  • 明确定义的查询语言
  • 能够通过索引、编译的查询等进行访问优化
  • 基于角色的安全性
  • 触发器、存储过程、计算列等

此外,在访问数据库之前,您不需要将整个数据库加载到内存中。

XML是一种可以接受的对象模型序列化格式。如果您要使用XPath访问相对自由形式的数据模型,它对于快速组合数据并通过XSLT转换为XML或HTML非常有用,并且具有标准化和平台无关性。

但是,如果您对其野心过大,很快就会陷入那种会导致您写出关于XML糟糕的怒吼的境地。 (我在与Jeff Atwood交谈。)


在 eXist 和 MarkLogic 之间,它们提供了所有这些功能,并且您不必将所有 XML 加载到内存中,使用索引可以高效地完成。eXist 编译和缓存所有 XQuery,因此重复访问非常快速和高效。它还具有基于角色的安全性、触发器等功能。 - Casey Jordan

0

RDBMS的两个重要内在优势是:

  1. 索引。大大提高了性能。
  2. 约束。您可以定义元素之间的关系,有助于维护数据的完整性。

请记住,您可以将xml放入sql server中,并使用xpath进行查询,因此根据数据的形状,您可能可以获得最佳效果。


0

你可以兼顾两方面的优点,你的数据可以存储在数据库中,这必定是一个更好的解决方案。因为数据库更快、更安全,有备份和还原、回滚、管理工具等等...

如果你的数据属于层次结构,那么数据库也可以很好地存储这种层次结构而不会出现太多问题。

当要使用数据时,如果将其提取为 XML,则如果你使用的是 SQL Server,则可以轻松实现,但对于 Oracle 就不太确定了。


有一些SQL数据库的插件可以使节点表现得像本地XML数据库。因此,在这种意义上,您仍然可以使用SQL数据库,同时获得XQuery和XML索引的强大功能。尽管对我来说,这似乎有点不合适。 - Casey Jordan

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