Vyr*_*tek 6 xml database sql-server performance xpath
我已经看过关于这个主题的一些问题,但我正在寻找对这两种技术之间性能差异的一些见解.
例如,假设我正在记录事件日志,这些事件将通过特定事件的键/值对字典集进入系统.我将在事件表中记录一个带有基本数据的条目,但我需要一种方法来链接其他键/值数据.我永远不会知道会出现什么样的键或值,因此任何类型的预定义枚举表似乎都是不可能的.
此事件数据将持续流入,因此插入时间与查询时间一样重要.
当我查询特定事件时,我将使用事件上的一些字段以及键/值数据中的数据.对于XML方式,我只需使用Attributes.exists('xpath')语句作为where子句的一部分来过滤记录.
规范化的方法是使用具有基本键和值字段的表,其中包含指向事件记录的外部链接.这看起来干净简单,但我担心涉及的数据量.
对于"灵活"的存储机制,您有三个主要选择.
XML字段非常灵活,但是您可以将其置于blob存储领域,查询速度很慢.我已经看到针对30,000行的小数据集的查询花了5分钟,当时它正在使用Xpath查询挖掘blob中的内容.这是迄今为止最慢的选择,但它很灵活.
键/值对更快,特别是如果您在事件键上放置聚簇索引.这意味着单个事件的所有属性将物理存储在数据库中,这将最小化I/O. 该方法不如XML灵活,但速度更快.报告它的最有效查询将涉及转动数据(即表扫描以产生中间扁平化结果); 加入获取个别字段会慢得多.
最快的方法是使用包含一组用户定义字段(Field1-Field50)的平面表,并保存有关字段内容的一些元数据.这是最快插入,最快且最容易查询的,但是对于无法访问元数据的任何内容,表的内容都是不透明的.
我认为键/值表方法的问题在于数据类型 - 如果值可以是日期时间、字符串、unicode 字符串或整数,那么如何定义列?这种困境意味着值列必须是一种可以包含所有不同类型数据的数据类型,这就引出了查询效率/易用性的问题。或者,您有多个特定数据类型的列,但我认为这有点笨拙。
对于真正灵活的模式,我想不出比 XML 更好的选择。您可以对 XML 列建立索引。
MSDN 上的这篇文章更详细地讨论了 XML 存储。
| 归档时间: |
|
| 查看次数: |
2865 次 |
| 最近记录: |