我何时使用XML而不是SQL?

时间:2008-10-14 15:07:29

标签: sql xml

我几年来一直致力于数据库驱动的Web应用程序,最近又开展了一个涉及支持XML的CMS的项目。这使我开始考虑XML / XSLT的使用,以及在什么情况下它比我一直使用的方法更有用,它将我的所有数据存储在(My)SQL数据库中,然后使用PHP / Python的/等。根据需要在网上使用它。

显然我在这里没有“得到”..有人能给我一些应用程序示例,其中将数据存储在XML文件而不是数据库中会更好吗?

13 个答案:

答案 0 :(得分:95)

引用This Book(有效的XML:50种改进XML的具体方法):

  

“XML不是数据库。从来没有   意味着是一个数据库。永远不会   将成为一个数据库。相关的   数据库是经过验证的技术   超过20年的实施   经验。它们坚固,稳定,   有用的产品。他们不去   远。 XML是一种非常有用的技术   用于在不同之间移动数据   数据库或数据库之间   其他节目。但事实并非如此   本身就是一个数据不要使用它   一个“。

我认为这总结了一下,如果有点直言不讳的话。 XML是一种数据交换格式。可以使用XML解析库来查询带有XPath表达式的DOM,但这与DBMS不同。您可以使用DOM / XPath接口构建DBMS,但要获得ACID属性或扩展到大型数据集,您需要实现DBMS引擎和带有索引,日志记录和DBMS的其他工件的数据格式 - (根据定义)它不是XML。

答案 1 :(得分:21)

使用XML创建需要发送到其他应用程序的文件。 XML更适合作为数据交换格式而不是数据存储格式。

使用XML时,可以使用以下链接进行描述:Why should I use XML ?

答案 2 :(得分:14)

SQL是很好的表格数据 - 很容易适合行和数据的数据。列。 XML适用于分层数据 - 具有多个不同大小级别的数据。

SQL适用于存储&搜索。 XML适用于传输和传输。格式化。

答案 3 :(得分:10)

1)当您必须与他人交换数据时。 XML是Web的“lingua franca” - 与数据库文件不同,几乎每个人都可以读取和解释它。

2)当您的数据量很小而您不必对其进行复杂查询时。 XML文件适用于存储配置或文档模板等内容。

3)当你没有很多作家试图访问相同的数据时。 SQL数据库涉及为您提供幕后工作的并发机制。 SQL数据库可以支持快速检索大数据集信息的索引......

答案 4 :(得分:5)

我使用XML的东西:

  • 保持对象层次结构。
  • 将数据从一个进程或计算机移动到另一个进程或计算机。
  • 数据变化很少,如果有的话;配置设置等。
  • 作为XSLT转换的输入:一般来说,如果我的一个程序发出HTML,它就是使用XSLT来完成它,所以源数据将在某些地方表示为XML
  • 文字标记。 (我们不要忘记!)

这些用例与数据库的用例之间没有太多重叠。一些,但不多。

具有讽刺意味的是,目前我最大限度地使用XML的是桌面应用程序,它构建了一个内存中的ADO DataSet,并使用DataSet的WriteXml和ReadXml方法来持久化并检索它。我正在使用ADO,因为使用ADO动态构建由元信息定义的数据模型要比为任务实现我自己的对象模型要容易得多。

所以这是一个看起来的情况,就像我使用XML作为数据库一样。但我真的不是。我使用的对象模型恰好实现了许多类似数据库的功能,我使用XML作为其持久性格式。

答案 5 :(得分:2)

我认为有相当多的商业应用程序大量使用XML作为存储介质。我已经为项目计划应用程序完成了它,用户将每个项目存储在它自己的文件中。该应用程序存在于USB记忆棒上,需要零安装。所有数据都从XML中提取并在内存中处理,因此getRecord(id)非常快。

所以我的答案是..当数据足够小以便在内存中保存时,数据库就会被淘汰。

答案 6 :(得分:1)

每当您没有拥有数据库(想想单用户应用程序)或需要非常轻量级的存储格式时,就会感到非常奢侈。

正如上一张海报所提到的,一种交换格式。

答案 7 :(得分:1)

XML和RDMS都可以用作数据存储,但每种实现都有自己的优点和缺点。

使用XML存储Web应用程序的数据通常不是一个大问题,直到您开始处理大量数据或者您决定要从数据中发现其他信息(例如:数据挖掘)。换句话说,为数据源存储大量XML文件的可扩展性不是很高,但它可以更容易地移动数据。 XML也可用于以非关系格式序列化复杂对象,如果您可以直接从XML序列化/反序列化对象,则可以消除对ORM的需求

RDMS(数据库)通常更具可伸缩性,提供更高的并发支持,并且在处理大量数据时速度更快。关系模型使得以后更容易进行数据挖掘。数据库确实受到对象 - 关系阻抗不匹配(http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch)的影响,这可能需要您编写丑陋的代码或使用复杂的ORM。

答案 8 :(得分:1)

如果我的主机上的mysql数据库有限,我会去,然后我会看到使用XML作为数据存储区的机会。

答案 9 :(得分:1)

以下是使用XML和SQL的示例:经过身份验证的用户可以读取和写入各种数据库的数据,而不是所有数据库都是相同的DBMS。公司A的用户使用本地SQL Server数据库中的数据。公司B的用户使用来自远程Oracle数据库的数据。等等。十几个不同的数据库,每个数据库都有相同基本数据的略有不同的模式。

网站开发人员无法在远程数据库上创建存储过程。 SQL必须直接从Web应用程序发送到数据库。由于每个数据库的SQL语法和模式略有不同,因此必须为12个数据库中的每个数据库使用不同的SQL进行相同的操作(SELECT,INSERT等)。

在Web应用程序中嵌入SQL语句的一个选择是将它们放在XML文件中。每个XML文件都包含十几个数据库之一的SQL语句集。该代码确定为登录用户访问哪个数据库,并从指定的XML文件中检索适当的SQL。

与存储过程一样,可以在不停止或重新编译应用程序的情况下更新XML文件中的SQL。

答案 10 :(得分:1)

答案 11 :(得分:0)

有些应用程序使用XML文件来存储配置,我更喜欢使用SQLite来执行此操作。

答案 12 :(得分:0)

从不使用任何类型的XML来存储我的数据。

我们在SOA应用程序中使用XSLT转换作为数据抽象层。所有对象都在XSLT中相互发送数据,因此他们只需要了解一种语言。除了数据库连接器,它需要能够将数据转换为SQL,然后将其发送到数据库。

这样,您就不会在应用程序中的多个对象上分布SQL字符串生成。使维护更容易。