我什么时候可以使用XML而不是SQL?
几年来,我一直在研究数据库驱动的Web应用程序,最近又开始了一个涉及支持XML的CMS的项目。 这使我想到了一般的XML / XSLT的用法,以及在什么情况下它比我一直使用的方法更有用,它将所有的数据存储在(My)SQL数据库中,然后使用PHP / Python的/等。 根据需要在networking上使用它。
显然,我不是“得到”在这里..任何人都可以给我的例子,应用程序的数据存储在XML文件,而不是在数据库将是可取的?
引用本书 (有效的XML:50种改进XML的具体方法):
“XML不是数据库。 它从来不是一个数据库。 它永远不会成为一个数据库。 关系数据库是经过validation的技术,拥有超过20年的实施经验。 他们是坚实,稳定,有用的产品。 他们不会离开。 XML是用于在不同数据库之间或在数据库与其他程序之间移动数据的非常有用的技术。 但是,它本身不是一个数据库。 不要像一样使用它。“
我想这个总结起来,如果有点直率。 XML是一种数据交换格式。 可以有XMLparsing库,可以用XPathexpression式来查询DOM,但与DBMS不同。 您可以使用DOM / XPath接口构buildDBMS,但要获得ACID属性或扩展到大数据集,您需要实现DBMS引擎和带有索引,日志logging和DBMS其他工件的数据格式 – (根据定义)它不是XML。
使用XML创build需要发送到其他应用程序的文件。 XML比数据存储格式更适合作为数据交换格式。
使用XML时,以下链接不难描述: 为什么我应该使用XML?
SQL是很好的表格数据 – 容易适合行和列的数据。 XML适用于分层数据 – 具有多个不同大小的数据。
SQL适用于存储和search。 XML适用于传输和格式化。
1)当你必须与他人交换你的数据。 XML是Web的“ 通用语言 ” – 几乎每个人都可以阅读和解释它,而不像数据库文件。
2)当你的数据量很小,你不必对它做复杂的查询。 XML文件适用于存储configuration或文档模板等内容。
3)当你没有太多的作家试图访问相同的数据。 SQL数据库涉及并发机制,在幕后为您工作。 SQL数据库可以支持快速检索大型数据集信息的索引。
我为以下内容使用XML:
- 坚持一个对象层次结构。
- 将数据从一个进程或机器移动到另一个进程。
- 数据变化很less,如果有的话; configuration设置等。
- 作为XSLT的input转换:一般来说,如果我的一个程序发出HTML,它使用XSLT来完成,所以源数据将在一些
- 文本标记。 (我们不要忘了!)
这些用例和数据库的用例之间没有太多的重叠。 一些,但不是很多。
具有讽刺意味的是,我现在正在最重要地使用XML,就是在桌面应用程序中构build内存中的ADO DataSet,并使用DataSet的WriteXml和ReadXml方法来持久化并检索它。 我正在使用ADO,因为使用ADOdynamic构build由元信息定义的数据模型比实现我自己的任务对象模型要容易得多。
所以这是一个看起来像我使用XML作为数据库的情况。 但我真的不是。 我正在使用一个碰巧实现了很多数据库类function的对象模型,并且我使用XML作为它的持久性格式。
我相信有相当多的商业应用程序大量使用XML作为存储介质。 我已经做了一个项目计划应用程序,用户将每个项目存储在自己的文件中。 该应用程序生活在一个USB棒,并要求零安装。 所有的数据都从XML中拉出来,并在内存中工作,所以getRecord(id)非常快。
所以我的答案是..当数据足够小,可以保存在内存中时,数据库已经被杀死了。
每当你没有奢侈的数据库(想想单一用户应用程序)或者需要一个非常轻量级的存储格式。
也如前面提到的海报,交换格式。
XML和RDMS都可以用作数据存储,但是每个实现都有自己的优点和缺点。
使用XML存储Web应用程序的数据通常不是一个大问题,除非您开始处理大量数据,或者您决定要从数据中发现其他信息(例如:数据挖掘)。 换句话说,为一个数据源存储大量的XML文件并不是非常可扩展的,但是它可以更容易地移动数据。 XML也可用于以非关系格式序列化复杂对象,如果可以直接从XML序列化/反序列化对象,则可以消除对ORM的需求
RDMS(数据库)通常更具可扩展性,提供更高的并发支持,并且在处理大量数据时速度更快。 关系模型使以后的数据挖掘更容易。 数据库确实受到对象关系阻抗不匹配的影响( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ),这可能要求您编写难看的代码或使用复杂的ORM。
我会去如果我的主机有限的MySQL数据库,那么我会看到使用XML作为数据存储的机会。
下面是一个在SQL中使用XML的例子:通过身份validation的用户将数据读写到各种数据库,而不是所有数据库都是同一个DBMS。 公司A的用户使用来自本地SQL Server数据库的数据。 公司B的用户使用来自远程Oracle数据库的数据。 等等。 十几个不同的数据库,每个数据库对于相同的基本数据略有不同的模式。
网站开发人员无法在远程数据库上创build存储过程。 SQL必须直接从Web应用程序发送到数据库。 由于每个数据库都有一个稍微不同的SQL语法和模式,因此对于相同的操作(SELECT,INSERT等),对于12个数据库中的每一个都必须使用不同的SQL。
在Web应用程序中embeddedSQL语句的select之一是将它们放在XML文件中。 每个XML文件都包含十几个数据库中的一个的一组SQL语句。 该代码确定为login用户访问哪个数据库,并从指定的XML文件中检索适当的SQL。
就像使用存储过程一样,XML文件中的SQL可以更新,而无需停止或重新编译应用程序。
别。
尝试使用SELECT作者FROM书
一些应用程序使用XML文件来存储configuration,我更喜欢使用SQLite来这样做。
我永远不会使用任何types的XML来存储我的数据。
我们在我们的SOA应用程序中使用XSLT转换作为数据抽象层。 所有对象都使用XSLT相互发送数据,因此只有一种语言需要理解。 除了数据库连接器需要能够将数据转换为SQL之外,还可以将其发送到数据库。
通过这种方式,您不需要在您的应用程序中的zillion对象上分发SQLstring。 使维护更容易。