问题 Sql Server XML列替代Document DB?


是否可以使用Sql Server XML列替代真正的文档数据库(例如Couch或Mongo)?

如果我要为文档创建一个带有guid PK Id和XML列的表。 与使用文档数据库相比,主要问题是什么?

Sql Server支持对XML列进行索引,因此查询不应该是完全可怕的吗?


6004
2018-02-25 16:18


起源

非常好的问题!我已经使用SQL XML列作为穷人的NoSql解决方案很长一段时间了,它运行良好。我一直很想尝试mongo,但是不应该轻易添加额外的基础设施(备份策略,更新数据库本身,更新驱动程序......) - Jon Kragh


答案:


你在这里有几个问题:

是否可以使用Sql Server XML列替代真正的文档数据库(例如Couch或Mongo)?  是的,您可以将其用作替代品,但不是,如果您专门存储XML而不利用任何SQL Server的关系工具,则可能不会对性能感到满意。

如果我要为文档创建一个带有guid PK Id和XML列的表。与使用文档数据库相比,主要问题是什么?  简而言之,扩展。 SQL Server不能很好地扩展这种东西。您可以通过复制来实现,但相对于“真正的”文档数据库进行管理却很痛苦。

Sql Server支持对XML列进行索引,因此查询不应该是完全可怕的吗?  问题是SQL Server的XML索引可能需要几倍于原始数据的存储空间。这些索引无法在线维护(如defrags),因此在维护窗口期间最终会出现锁定问题。


7
2018-02-28 03:59



谢谢你的详细解答。我目前正在一个小框架中尝试这个概念:Linq to Sql Xml - > rogeralsing.com/2011/02/28/linq-to-sqlxml - Roger Johansson
欢迎你,很高兴我能提供帮助! - Brent Ozar
嗨布伦特,你能详细说明最后一句话吗? “这些索引无法在线维护(如defrags),因此在维护窗口期间最终会出现锁定问题。” - Dan Ling
当然。根据您的SQL Server版本和版本,您可能无法在线重建索引,具体取决于所涉及的字段类型。 - Brent Ozar


我正在做一些实验: http://rogeralsing.com/2011/03/02/linq-to-sqlxml-projections/

查询速度“体面”,我没有用于缩放。 但是,在标准基础架构上运行的无架构存储的乐趣非常好。


3
2018-03-04 17:17



“在标准基础架构上运行的无架构存储” - 我100%同意。对于不需要大规模的小型项目 - 我认为如果您已经安装了sql,这是一个更好的权衡并降低系统复杂性。 - Jon Kragh


是的你可以。将文档存储在SqlServer XML列中将起作用,如果使用标准XML序列化,将为您提供一个不错的ACID complant键/值存储。此外,它允许您相对轻松地对其进行查询,并且您可以将结果加入到以更关系方式存储的数据中。我们这样做,它的工作原理。如果将内容存储在XML字段中,则存储需求比使用NTEXT要低得多,并且查询它将更灵活,更快速。

什么SqlServer不会得到你(与mongo相比)是复制的无缝故障转移设置mongo的自动调整。此外,原子操作(如在文档内部增加特定属性)很难(尽管XQuery更新功能并非不可能)。大多数NoSql数据库的更新往往更快,因为它们在“数据仅在磁盘上是安全的”原则上更加宽松。


2
2018-02-25 18:24





对的,这是可能的。至于这是不是一个好主意,这只是我的2美分......

在XML数据类型出现之前,我研究了一个在NTEXT列中存储XML的系统 - 这并不令人愉快,并且从数据中获得任何实际用途意味着将一些数据分解为关系形式。

好的,XML数据类型现在可以更轻松地查询XML blob并提取某些值/索引它们。但就个人而言,一般而言,我不会。我并不是说永远不会使用XML,因为有这样的情况 - 相反,如果这是你所做的所有计划,那么我会想“这是这项工作的正确工具”。使用RDBMS作为文档数据库让我感到有点不安。而像MongoDB这样的东西已经从头开始构建为文档数据库。

老实说,我没有对将数据存储为XML进行任何性能测试,因此我无法向您说明性能会是什么样的。有兴趣知道这是如何大规模表现的。


0
2018-02-25 16:34