我已经看过关于这个主题的一些问题,但我正在寻找对这两种技术之间性能差异的一些见解.
例如,假设我正在记录事件日志,这些事件将通过特定事件的键/值对字典集进入系统.我将在事件表中记录一个带有基本数据的条目,但我需要一种方法来链接其他键/值数据.我永远不会知道会出现什么样的键或值,因此任何类型的预定义枚举表似乎都是不可能的.
此事件数据将持续流入,因此插入时间与查询时间一样重要.
当我查询特定事件时,我将使用事件上的一些字段以及键/值数据中的数据.对于XML方式,我只需使用Attributes.exists(‘xpath’)语句作为where子句的一部分来过滤记录.
解决方法
问题我认为键/值表方法是关于数据类型 – 如果值可以是日期时间,或字符串或unicode字符串或整数,那么如何定义列?这种困境意味着值列必须是一个数据类型,它可以包含其中所有不同类型的数据,这就引出了查询效率/易用性的问题.或者,您有多列特定数据类型,但我认为这有点笨重.
对于一个真正灵活的模式,我想不出比XML更好的选择.您可以索引XML列.
This article off MSDN更详细地讨论了XML存储.