11

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

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

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

4

4 回答 4

7

你在这里有几个问题:

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

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

Sql Server 支持对 XML 列进行索引,所以查询不应该是完全可怕的吗? 问题是 SQL Server 的 XML 索引可能占用原始数据的存储空间数倍。这些索引无法在线维护(如碎片整理),因此您最终会在维护窗口期间遇到锁定问题。

于 2011-02-28T03:59:28.503 回答
3

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

查询速度“不​​错”,我不会用它来扩展。但是在标准基础设施上运行无模式存储的乐趣是相当不错的。

于 2011-03-04T17:17:34.450 回答
2

是的你可以。将文档存储在 SqlServer XML 列中将起作用,并且如果您使用标准 XML 序列化,这将为您留下一个像样的 ACID 兼容键/值存储。此外,它将允许您相对轻松地对其进行查询,并且您可以将结果连接到您以更相关的方式存储的数据。我们这样做,它有效。如果您将内容存储在 XML 字段中,则存储需求比使用 NTEXT 低很多,并且查询将更加灵活和快捷。

SqlServer 不会让您(与 mongo 相比)是副本集的无缝故障转移和 mongo 的自动分片。此外,像在文档深处增加特定属性这样的原子操作也很困难(尽管使用 XQuery 更新函数并非不可能)。大多数 NoSql 数据库的更新往往更快,因为它们在“数据仅在磁盘上是安全的”原则上更加宽松。

于 2011-02-25T18:24:44.557 回答
0

是的,有可能。至于这是否是个好主意,这只是我的2美分......

在 XML 数据类型出现之前,我曾在一个将 XML 存储在 NTEXT 列中的系统上工作——这并不令人愉快,并且要真正利用数据意味着将其中的一些数据分解成关系形式。

好的,XML 数据类型现在使查询 XML blob 和提取某些值/索引它们变得更加容易。但就个人而言,一般来说,我不会。我并不是说永远不要使用 XML,因为这是有场景的——如果这就是你的全部计划,那么我会想“这是适合这项工作的工具吗”。使用 RDBMS 作为文档数据库让我感到有些不安。而像 MongoDB 这样的东西已经从头开始构建为文档数据库。

老实说,我还没有对将数据存储为 XML 进行任何性能测试,因此我无法告诉您性能如何。有兴趣知道这是如何大规模执行的。

于 2011-02-25T16:34:55.613 回答