我从事数据库驱动的Web应用程序已经有几年了,最近我从事了一个涉及具有XML功能的CMS的项目。这使我开始思考XML / XSLT的一般用法,以及在什么情况下它比我一直使用的方法更有用,该方法是将所有数据存储在(My)SQL数据库中,然后使用PHP / Python /等 根据需要在网络上使用它。
显然我在这里没有“得到”某些东西。有人可以给我一些应用程序示例,其中最好将数据存储在XML文件而不是数据库中?
我从事数据库驱动的Web应用程序已经有几年了,最近我从事了一个涉及具有XML功能的CMS的项目。这使我开始思考XML / XSLT的一般用法,以及在什么情况下它比我一直使用的方法更有用,该方法是将所有数据存储在(My)SQL数据库中,然后使用PHP / Python /等 根据需要在网络上使用它。
显然我在这里没有“得到”某些东西。有人可以给我一些应用程序示例,其中最好将数据存储在XML文件而不是数据库中?
Answers:
引用本书(有效的XML:50种改进XML的特定方法):
“ XML不是数据库。它从来没有打算成为一个数据库。它永远不会成为数据库。关系数据库是经过验证的技术,具有20多年的实施经验。它们是坚固,稳定,有用的产品。他们不会消失。XML是在不同数据库之间或数据库与其他程序之间移动数据的非常有用的技术。但是,它本身不是数据库。不要像一个人那样使用它。”
我认为这可以总结一下,如果有些直言不讳。XML是一种数据交换格式。可以有一个XML解析库,该库可以使用XPath表达式查询DOM,但这与DBMS不同。您可以使用DOM / XPath接口构建DBMS,但是要获得ACID属性或扩展到大型数据集,您需要实现DBMS引擎以及具有索引,日志记录和其他DBMS工件的数据格式-这(根据定义)使得它不是XML。
使用XML创建需要发送到其他应用程序的文件。XML比作为数据存储格式更适合作为数据交换格式。
以下链接在使用XML时可以很好地描述:为什么要使用XML?
我将XML用于以下方面:
这些用例与数据库的用例之间没有很多重叠。一些,但不是很多。
具有讽刺意味的是,目前我最大量使用XML的地方是一个桌面应用程序,该应用程序构建内存中的ADO DataSet并使用DataSet的WriteXml和ReadXml方法来持久化和检索它。我正在使用ADO,因为使用ADO动态构建由元信息定义的数据模型要比为任务实现自己的对象模型容易得多。
因此,在这种情况下,看起来我正在使用XML作为数据库。但是我真的不是。我使用的对象模型恰好实现了许多类似数据库的功能,并且我使用XML作为其持久性格式。
XML和RDMS都可以用作数据存储,但是每种实现都有其自身的优点和缺点。
在开始处理大量数据或决定要从数据中发现其他信息之前(例如:数据挖掘),使用XML为Web应用程序存储数据通常不是大问题。换句话说,为数据源存储大量XML文件不是非常可伸缩的,但是它使移动数据更加容易。XML还可以用于以非关系格式序列化复杂对象,如果您可以直接从XML序列化/反序列化对象,则可以消除对ORM的需求
RDMS(数据库)通常具有更高的可伸缩性,提供更大的并发支持,并且在处理大量数据时要快得多。关系模型使以后的数据挖掘更加容易。数据库确实遭受对象关系阻抗不匹配(http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch)的困扰,这可能需要您编写难看的代码或使用复杂的ORM。
这是将XML与SQL结合使用的示例:经过身份验证的用户可以将数据读写到各种数据库中,而并非所有数据库都是同一个DBMS。公司A的用户使用本地SQL Server数据库中的数据。公司B的用户使用来自远程Oracle数据库的数据。等等。十几个不同的数据库,每个数据库对于相同的基本数据都有略微不同的架构。
网站开发人员无法在远程数据库上创建存储过程。SQL必须直接从Web应用发送到数据库。由于每个数据库的SQL语法和架构略有不同,因此有必要对12个数据库中的每个数据库使用不同的SQL来执行相同的操作(SELECT,INSERT等)。
将SQL语句嵌入到Web应用程序中的一种选择是将它们放在XML文件中。每个XML文件都包含用于多个数据库之一的SQL语句集。该代码确定登录用户可以访问哪个数据库,并从指定的XML文件中检索适当的SQL。
与存储过程一样,可以在不停止或重新编译应用程序的情况下更新XML文件中的SQL。
我永远不会使用任何XML来存储数据。
我们将XSLT转换用作SOA应用程序中的数据抽象层。所有对象都在XSLT中互相发送数据,因此只需要了解一种语言。数据库连接器除外,该连接器需要能够将数据转换为SQL,然后才能将其发送到DB。
这样,您就不会在应用程序中成千上万个对象上分布SQL字符串生成。使维护更加容易。