在 SQL 服务器上存储 NoSQL 数据?
Store NoSQL data on SQL Server?
因此请忽略我们应该只使用 NoSQL 数据库这一事实 - 客户端基础设施要求正在发挥作用。
我们的数据显然属于非关系模型,但我们必须使用 SQL Server 2014 进行持久化。有没有办法将库用于诸如 RavenDB 或 MongoDB 和 SQL Server 之类的东西以实现持久性?例如,将 JSON 或 BSON 存储在 SQL 服务器 table 中,但使用 Mongo 或 Raven 对其进行查询和序列化?
我们最初打算将 JSON 数据存储在一个列中,但我认为必须有一个更优雅的解决方案。我看到 RavenDB 支持 SQL 服务器复制,但看起来它不能用于其主要持久性组件。
我们是 运行 C# ASP.NET MVC 网络应用程序。前端是 KnockoutJS SPA,所以很乐意绑定到 JSON 数据。
我不知道这是否回答了您的问题,但我在这种情况下所做的是混合我的 SQL 数据库。我将 JSON 存储在类似 nvarchar(max)
的内容中,并将列添加到我将搜索的 table 中。所以像
我的 JSON 文档
{Name: "name", CreatedBy: "name", Date: "date", other attributes... }
Table结构。添加将搜索的列以及整个 JSON 对象
NAME | DATE | CREATED_BY | JSON
这不是一个很好的方法,但到目前为止它很有效。
有关将 JSON 作为关系数据存储在 SQL 服务器中并将其提取回 JSON 的更复杂的讨论,请参阅 Phil Factor 的这篇精彩文章(这就是名字他经过),通过 TSQL、https://www.simple-talk.com/sql/t-sql-programming/producing-json-documents-from-sql-server-queries-via-tsql/ 从 SQL 服务器查询生成 JSON 文档
.
小心将 JSON 存储为具有全文索引的 varchar 或具有 xml 索引的 xml 类型(与 JSON 不同)。即使在一百万行 table 上进行插入,也可能会出现严重的性能问题,因此请仔细测试实际的行数,看看 XML 或 varchar 解决方案是否适合您。
如果您要做的只是将 JSON 数据填充到 varchar 中然后再返回,那么您应该没有问题。在 Mongo 的最新版本(3.04 左右)之前,Mongo 不是基于事务的,我的一个客户总是丢失数据,这导致了一个相互指责的世界。如果您使用的 Mongo 版本不符合 ACID,请非常非常小心。
我正在修改这个答案,因为 SQL Server 2016 现在在很大程度上支持 JSON。据微软称,这是最受欢迎的功能之一。请看以下两篇文章:
既然你已经有 Sql Server 2014,也许你可以迁移到 2016 版本。在 2016 版本中,您将拥有处理 JSON 数据的新功能(它们将于 11 月在 CTP3 中可用)。在这里您可以找到一些额外的信息 JSON support in Sql Server 2016 and How to combine JSON and relational data in Sql Server 2016
因此请忽略我们应该只使用 NoSQL 数据库这一事实 - 客户端基础设施要求正在发挥作用。
我们的数据显然属于非关系模型,但我们必须使用 SQL Server 2014 进行持久化。有没有办法将库用于诸如 RavenDB 或 MongoDB 和 SQL Server 之类的东西以实现持久性?例如,将 JSON 或 BSON 存储在 SQL 服务器 table 中,但使用 Mongo 或 Raven 对其进行查询和序列化?
我们最初打算将 JSON 数据存储在一个列中,但我认为必须有一个更优雅的解决方案。我看到 RavenDB 支持 SQL 服务器复制,但看起来它不能用于其主要持久性组件。
我们是 运行 C# ASP.NET MVC 网络应用程序。前端是 KnockoutJS SPA,所以很乐意绑定到 JSON 数据。
我不知道这是否回答了您的问题,但我在这种情况下所做的是混合我的 SQL 数据库。我将 JSON 存储在类似 nvarchar(max)
的内容中,并将列添加到我将搜索的 table 中。所以像
我的 JSON 文档
{Name: "name", CreatedBy: "name", Date: "date", other attributes... }
Table结构。添加将搜索的列以及整个 JSON 对象
NAME | DATE | CREATED_BY | JSON
这不是一个很好的方法,但到目前为止它很有效。
有关将 JSON 作为关系数据存储在 SQL 服务器中并将其提取回 JSON 的更复杂的讨论,请参阅 Phil Factor 的这篇精彩文章(这就是名字他经过),通过 TSQL、https://www.simple-talk.com/sql/t-sql-programming/producing-json-documents-from-sql-server-queries-via-tsql/ 从 SQL 服务器查询生成 JSON 文档 .
小心将 JSON 存储为具有全文索引的 varchar 或具有 xml 索引的 xml 类型(与 JSON 不同)。即使在一百万行 table 上进行插入,也可能会出现严重的性能问题,因此请仔细测试实际的行数,看看 XML 或 varchar 解决方案是否适合您。
如果您要做的只是将 JSON 数据填充到 varchar 中然后再返回,那么您应该没有问题。在 Mongo 的最新版本(3.04 左右)之前,Mongo 不是基于事务的,我的一个客户总是丢失数据,这导致了一个相互指责的世界。如果您使用的 Mongo 版本不符合 ACID,请非常非常小心。
我正在修改这个答案,因为 SQL Server 2016 现在在很大程度上支持 JSON。据微软称,这是最受欢迎的功能之一。请看以下两篇文章:
既然你已经有 Sql Server 2014,也许你可以迁移到 2016 版本。在 2016 版本中,您将拥有处理 JSON 数据的新功能(它们将于 11 月在 CTP3 中可用)。在这里您可以找到一些额外的信息 JSON support in Sql Server 2016 and How to combine JSON and relational data in Sql Server 2016