在SQL Server上存储NoSQL数据?

jri*_*zzo 4 c# sql-server mongodb nosql ravendb

因此,忽略我们应该使用NoSQL数据库这一事实 - 客户端基础架构要求正在逐渐增加.

我们的数据显然属于非关系模型,但我们必须使用SQL Server 2014来实现持久性.有没有办法将库用于RavenDB或MongoDB与SQL Server之间的持久性?例如,将JSON或BSON存储在SQL Server表中,但使用Mongo或Raven查询和序列化它?

我们最初只是将JSON数据存储在一个列中,但我认为必须有一个更优雅的解决方案.我看到RavenDB支持SQL Server复制,但看起来它不能用于其主要持久性组件.

我们正在运行一个C#ASP.NET MVC Web应用程序.前端是一个KnockoutJS SPA,所以它很乐意绑定到JSON数据.

Thr*_*ion 5

我不知道这是否能回答您的问题,但是在这种情况下我所做的是使我的SQL数据库混合在一起。我将JSON存储在诸如中nvarchar(max),并将列添加到要搜索的表中。所以像

这不是一个很好的方法,但到目前为止已经奏效。


ben*_*its 5

有关将SQL Server中的JSON存储为关系数据并将其作为JSON提取的更复杂的讨论,请参阅Phil Factor的精彩文章(这就是他所说的名称),通过TSQL从SQL Server查询生成JSON文档,https: //www.simple-talk.com/sql/t-sql-programming/producing-json-documents-from-sql-server-queries-via-tsql/ .

小心将JSON作为varchar存储为全文索引,或者作为xml类型(与JSON不同)与xml索引一起存储.在甚至一百万行表上进行插入时可能会出现严重的性能问题,因此请仔细检查实际的行数,以查看XML或varchar解决方案是否适合您.

如果您要做的就是将JSON数据填充到varchars中然后再返回,那么您应该没有问题.直到最新版本的Mongo(3.04左右)Mongo不是基于事务性的,而我的一个客户端总是丢失数据并且引起了一个指责世界.如果您使用的Mongo版本不符合ACID,则非常非常小心.

我正在修改这个答案,因为SQL Server 2016现在支持JSON.根据微软的说法,它是最受欢迎的功能之一.请参阅以下两篇文章: