草庐IT

xml - XML 与 RDMS 相比的优点/缺点

coder 2024-07-03 原文

使用 XML 而不是 RDMS 有缺点吗?我问这个的原因是因为我的数据更自然地用 XML 结构表示,而不是 RDBMS。我最初想到了storing the data in relational database ,但是关系数据库缺乏处理树状数据结构的灵 active 让我很失望。所以我正在考虑将数据存储在 XML 中。

我担心的一件事是性能损失。虽然 RDBMS 可以处理大型数据集,但我不确定 XML 是否也可以这样说。此外,数据库查询非常完善并且非常易于使用和构造,那么 XML 查询呢?我不知道。

我正在做 .Net 应用程序。

最佳答案

如果您正在处理 XML 数据,那么毫无疑问您应该研究原生 XML 数据库。

两个最流行的本地 XML 数据库 MarkLogic 服务器和 eXist 都提供了极其强大和高效的索引机制,以及此列表中提到的许多功能。

事实上,用于许多搜索应用程序的 MarkLogic 服务器在性能上大大超过了 SQL 数据库,尤其是在大型 xml 数据集上。这是因为它是专门为处理 XML 而构建的,并且知道为其编制索引的最佳方式,而如果不对 SQL 进行规范化则不会。

根据当前的市场趋势,很明显,虽然 SQL 不会消失,但其市场份额肯定会被 NoSQL 方法夺走,尤其是在涉及以文档为中心的数据时。

更多细节----

大多数情况下,人类交互的数据是非结构化的和分层的。将此数据规范化和取消规范化为平面关系结构不仅从信息架构的角度来看非常耗时,而且还迫使我们以不自然的方式查询数据。

当前的原生 xml 数据库允许轻松添加大量未结构化(但经过模式验证)的数据并有效地建立索引。

使用 xpath 查询这些文档是一种更自然的遍历和提取​​数据的方式,因为查询是结构的表示。

它也可以使用 XQuery 和 XSLT 轻松转换。

最终结果是开发人员的投资返回率更高。您编写更少的代码并获得更多 yield 。我以前主要在 php/sql 应用程序中编写。一旦我们将架构转移到 native XML 和 XQuery,我就能够用更简单、高效和简洁的 XQuery 替换数千行代码。

如果您有预算(~250k),请查看 MarkLogic 服务器。它是有史以来最令人印象深刻和可扩展的数据库系统之一,并且全是原生 XML。据我所知,它支持事务、回滚等,以及 SQL 提供的所有其他功能。

eXist (http://exist-db.org) 是一个开源项目,它具有:

  • 完整的 XQuery/XPath/XSLT 支持
  • 高效的索引机制
  • 内置全文搜索
  • 支持 REST/WebDAV/SOAP/ATOM/XMLRPC
  • 版本控制

关于xml - XML 与 RDMS 相比的优点/缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/545184/

有关xml - XML 与 RDMS 相比的优点/缺点的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

  3. ruby - 如何使用 Nokogiri::XML::Builder 生成动态标签? - 2

    我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi

  4. ruby - 如何让 Nokogiri 解析并返回 XML 文档? - 2

    这是一些奇怪的例子:#!/usr/bin/rubyrequire'rubygems'require'open-uri'require'nokogiri'print"withoutread:",Nokogiri(open('http://weblog.rubyonrails.org/')).class,"\n"print"withread:",Nokogiri(open('http://weblog.rubyonrails.org/').read).class,"\n"运行此返回:withoutread:Nokogiri::XML::Documentwithread:Nokogiri::

  5. ruby - 模式加载时出现 Nokogiri::XML::Schema SyntaxError - 2

    我正在尝试加载SAML协议(protocol)架构(具体来说:https://www.oasis-open.org/committees/download.php/3407/oasis-sstc-saml-schema-protocol-1.1.xsd),但在执行此操作之后:schema=Nokogiri::XML::Schema(File.read('saml11_schema.xsd'))我得到这个输出:Nokogiri::XML::SyntaxErrorException:Element'{http://www.w3.org/2001/XMLSchema}element',att

  6. ruby - GC.disable 的任何性能缺点? - 2

    是否存在GC.disable会降低性能的情况?只要我使用的是真正的RAM而不是交换内存,就可以这样做吗?我正在使用MRIRuby2.0,据我所知,它是64位的,并且使用的是64位的Ubuntu:ruby2.0.0p0(2013-02-24revision39474)[x86_64-linux]Linux[redacted]3.2.0-43-generic#68-UbuntuSMPWedMay1503:33:33UTC2013x86_64x86_64x86_64GNU/Linux 最佳答案 GC.disable将禁用垃圾回收。像rub

  7. ruby-on-rails - 使用 Kernel#fork 进行后台进程,专业人士?缺点? - 2

    我想知道使用fork{}从Rails应用程序“后台”处理是否是个好主意...从我收集到的fork{my_method;Process#setsid}实际上做了它应该做的事情。1)创建另一个具有不同PID的进程2)不中断调用过程(例如它继续w/o等待fork完成)3)执行子进程直到它完成..这很酷,但这是个好主意吗?fork到底在做什么?它会在内存中创建我的整个railsmongrel/passenger实例的重复实例吗?如果是这样那就太糟糕了。或者,它是否以某种方式在不消耗大量内存的情况下完成。我的最终目标是取消我的后台守护进程/队列系统,转而支持这些进程的fork(主要是发送电子邮件

  8. ruby - 如何修复 activesupport 3.0.0 与 2.x 相比的行为差异? - 2

    我在我的Sinatra应用程序中使用Hash#to_xml。在我转向actviesupport3.0.0之前,它一直有效activesupport在3.0.0的使用有区别吗?例如这很好用gem'activesupport','2.3.5'require'active_support'{}.to_xml和gem'activesupport','3.0.0'require'active_support'{}.to_xml生成:NoMethodError:{}的未定义方法“to_xml”:哈希 最佳答案 当您需要时,ActiveSuppo

  9. ruby-on-rails - 与 attr_accessor 相比,ActiveRecord 如何定义方法? - 2

    ActiveRecord似乎定义实例方法的方式与attr_accessor不同。attr_accessor似乎没有为我新定义的属性定义super方法:classSomeClassattr_accessor:some_attributedefsome_attributesuperendend>>some_class=SomeClass.new>>some_class.some_attributeNoMethodError:super:nosuperclassmethod`some_attribute'for..鉴于ActiveRecord明确定义了一个super方法:classSomeC

  10. ruby-on-rails - 使用 Rails 以外的 Ruby 框架是否有任何潜在的缺点? - 2

    我想使用比Rails(Sinatra/Ramaze/Camping)更轻的框架,但我担心这样做我将无法使用许多以插件形式为Rails定制的共享库.这是一个主要问题,还是这些插件中的大多数都可以跨不同的Ruby框架使用?使用Ruby框架而不是Rails是否还有其他潜在的缺点? 最佳答案 您仍然可以使用gems在你提到的所有框架中,很多东西都是可重用的。想要交换一个新的ORM,没问题。想要一个花哨的shmacy语法高亮,没问题。Rails一直在大力插入摆脱旧的插件模型,转而使用gems。如果其他框架之一符合您的需求,最好使用它。请记住,

随机推荐