我从多个来源听说将 XML 存储在数据库中是“不好的”,但我从未看到/听到过关于为什么会这样的实际解释。是真的吗?如果是真的,你能解释一下为什么吗?此外,您能告诉我在数据库中存储 XML 的“好”案例是什么吗?
最佳答案
这里有一些非常愚蠢的答案 - 仅仅因为数据库支持一种数据类型并不意味着您应该使用它。这些东西总是作为功能添加进来,因为竞争对手有它们,而不是因为它们是正确的事情。全局变量?触发器?是否有人会仅仅因为您可以使用它们并且它们就在那里而愿意为它们辩护?
如果您有多个属性,在关系数据库中处理它们的最佳方法是使用一对多关系。从 XML 开销中解析出有用的数据。然后,您只需将父记录的 ID(主键)与存储在第二个表中的每一行一起存储,每个属性一行。每个父记录可以有任意数量的属性。这是数据库设计 101,没什么聪明的。将其存储为非结构化 XML 只是为了存储可变数量的属性不是要走的路,这是敲花生的大锤。两个表之间的一对多关系更简单、更容易理解、查询更快、编码工作更少、存储更少(这意味着查询更快)。除了存储供应商之外,每个人都是赢家。
XML 是一种数据传输协议(protocol);正如 GolezTrol 所说,“这是一种导出(和导入)数据的方式”——即:它只是一种开销,用于促进不同系统之间数据结构的通信。收到后,标签应该被剥离,数据(仅数据)存储在您选择的数据库引擎中,无论是什么。不是 XML 本身。 XML 的开销大约是它所描述数据的 10 倍。想告诉你的老板为什么 100GB 的数据占用了你 super 昂贵的 SAN 上的 1TB 空间?或者通宵备份一个饱和的网络链接?或者导致生产中的性能问题?如果您不从现在毫无意义的标签中解析出数据,您只会将问题和持续的日常支持成本推到 future 十年的运营支持上。马虎,马虎,马虎。这使像 EMC 这样的供应商得以继续经营。
XML 是元数据。没什么聪明的,只是一个模式描述符。一旦它被传输和解析,它就失去了它的用处,只是杂乱无章地阻塞了你使用的任何数据库。摆脱它,除非你强制性地沉迷于储存昨天毫无意义的蹩脚描述元数据,存储了很多次。醒来。这是典型的“皇帝的新衣”综合症,不再被简单和一次性的东西所欺骗。它只是元数据,不应该被存储或崇拜,一旦被解析就是垃圾。什么更好?是一次解析它,还是每次您需要从中获取数据时无用地解析它?答案对我来说非常明显。
关于xml - 在数据库中存储 XML 是 "bad"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4403523/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳