我已经看到了关于这个主题的一些问题,但我正在寻找一些关于这个主题的见解性能差异这两种技术之间。
例如,假设我正在记录事件日志,该日志将带有特定事件的键/值对的字典集进入系统。我将使用基本数据在事件表中记录一个条目,但随后我需要一种方法来链接其他键/值数据。我永远不会知道会出现什么类型的键或值,因此任何类型的预定义枚举表似乎都是不可能的。
该事件数据将不断流入,因此插入时间与查询时间同样重要。
当我查询特定事件时,我将使用事件上的一些字段以及键/值数据中的数据。对于 XML 方式,我只需使用 Attributes.exists('xpath') 语句作为 where 子句的一部分来过滤记录。
规范化的方法是使用基本上具有键和值字段的表,并具有指向事件记录的外部链接。这看起来干净简单,但我担心所涉及的数据量。
您拥有“灵活”存储机制的三个主要选项。
XML 字段很灵活,但会将您置于 Blob 存储领域,查询速度很慢。我发现,当使用 Xpath 查询从 blob 中挖掘内容时,针对 30,000 行的小数据集的查询需要花费 5 分钟。这是迄今为止最慢的选项,但很灵活。
键/值对的速度要快得多,特别是在事件键上放置聚集索引时。这意味着单个事件的所有属性将物理地一起存储在数据库中,这将最大限度地减少 I/O。该方法不如 XML 灵活,但速度快得多。最有效的报告查询将涉及数据透视(即表扫描以产生中间扁平化结果);加入获取各个字段会慢得多。
最快的方法是使用一个包含一组用户定义字段(Field1 - Field50)的平面表,并保存有关字段内容的一些元数据。这是插入速度最快、查询速度最快且最简单的方法,但表的内容对于无法访问元数据的任何内容都是不透明的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)