使用XML而不是RDMS有缺点吗?我问这个的原因是因为我的数据更自然地由XML结构代表,而不是RDBMS。我最初想到storing the data in relational database,但是关系数据库缺乏处理树状数据结构的灵活性让我感到兴奋。所以我在考虑将数据存储在XML中。
我担心的一件事是性能损失。虽然RDBMS可以处理大型数据集,但我不确定是否可以对XML进行相同的说明。此外,数据库查询非常完善,并且相当容易使用和构建,XML查询呢?我不知道。
我在做.Net应用程序。
答案 0 :(得分:5)
如果您正在处理XML数据,那么几乎不存在您应该查看Native XML数据库的问题。
两个最流行的Native XML数据库MarkLogic服务器和eXist都提供了非常强大和高效的索引机制,以及此列表中提到的许多功能。
事实上,许多搜索应用程序的MarkLogic服务器大量执行SQL数据库,尤其是大型xml数据集。这是因为它专门用于处理XML并且知道索引它的最佳方法,而没有规范化SQL则不会。
根据目前的市场趋势,很明显,虽然SQL不会消失,但它确实会失去NoSQL的市场份额,特别是在涉及以文档为中心的数据时。
更多细节----
大多数人类与之互动的数据都是非结构化和黑格尔。将这些数据标准化和非标准化为平坦的关系结构不仅耗费时间,从信息架构的角度来看,它还迫使我们以不自然的方式查询数据。
当前的本机xml数据库允许轻松添加和有效索引大量未经检查(但模式验证)的数据。
使用xpath查询这些文档是一种更自然的遍历和提取数据的方法,因为查询是结构的代表。
它也可以使用XQuery和XSLT轻松转换。
最终结果是开发人员的投资回报率更高。你写的代码越来越少,得到更多。我以前主要在php / sql应用程序中编写。一旦我们将架构转移到Native XML和XQuery,我就能够用更简单有效和简洁的XQuery替换成千上万行代码。
如果您有预算(~250k),请查看MarkLogic服务器。它是有史以来最令人印象深刻和可扩展的数据库系统之一,并且都是Native XML。据我所知,它支持事务,回滚等,以及SQL提供的所有其他功能。
eXist(http://exist-db.org)是一个开源项目,具有:
答案 1 :(得分:4)
您不应该将XML与RDBMS进行比较,因为这是两种互补技术;不应考虑XML,或将其视为RDMBS的替代。
RDMBS用于以一致的方式存储大量数据。 RDBMS应该关注数据的一致性等......
例如,XML可用于不同计算机系统之间的数据交换,但不应用于长时间存储大量数据。
Xml不允许你像RDMBS那样处理数据一致性;它没有处理交易等... Xml实际上只不过是一个文本文件,它包含某种结构化方式的数据。
答案 2 :(得分:2)
在我看来,这些是需要考虑的因素
考虑到这些因素之后,如果您需要大量数据处理和查询需求,并且需要导出数据或在应用程序之间传输数据,我建议您决定使用RDBMS。我还建议你考虑像尼克建议的那样限制你的数据和完整性需求。
我在该领域的经验不多,但这是我从学校其他人那里听到的。
一切顺利。
答案 3 :(得分:1)
RDBMS提供的东西,XML不是,或多或少按重要性排序:
另外,您无需先将整个数据库加载到内存中,然后才能访问它们。
XML是一种对象模型的正常序列化格式。将你可以使用XPath访问的相对自由格式的数据模型组合在一起是很好的 - 特别是如果你要通过XSLT将这些数据转换为XML或HTML。它具有标准和平台无关的优点。
但是如果你对它过于雄心勃勃,那么你就会迅速进入这种领域,导致你写下关于XML有多糟糕的咆哮。 (我正在跟你说话,Jeff Atwood。)
答案 4 :(得分:0)
RDBMS的两大固有优势是:
请记住,您可以将xml放在sql server中并使用xpath进行查询,因此根据数据的形状,您可以充分利用这两个世界。
答案 5 :(得分:0)
您可以充分利用这两个方面,您的数据可以存储在数据库中,这必须是更好的解决方案。由于数据库更快,更安全,具有备份和还原,回滚,管理工具等等....
听起来好像您的数据本质上属于层次结构,数据库可以强制存储层次结构而不会出现太多问题。
如果您将数据提取为Xml,则需要使用数据。我知道你是否正在使用开箱即用的Sql Server,对Oracle来说不太确定。