原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/built-in-json-support-in-sql-server-2016/sql
在数据库层对JSON提供支持,是请求排名最靠前的特性之一,在Microsoft Connect网站上对他的投票量超过了1000。微软承诺,在Sql Server 2016版本中,会提供内置的JSON支持。注意这并非Sql Server 2005已有特性XML原生支持的翻版。微软的目标是建立一个简单好用的框架来处理JSON文档。本文中,我将描述SQL Server 2016中计划实现的JSON特性。特性支持时间表以下:数据库
首先咱们要搞明白的是,内置JSON支持并不等于原生JSON类型。在SQL Server 2016中,JSON数据将会使用NVARCHAR类型存储,缘由以下:json
注意你仍然可使用本身的能经过CLR实现的JSON类型,引入JSON.NET或其余类似的库。即便你不喜欢编码实现CLR用户自定义类型,也能够下载大量现成的实现,这样你不须要注意原生JSON类型和用户自定义JSON类型之间的差别。只要对于大多数.Net应用来讲足够快就能够了。若是你以为PostgreSQL的JSONB格式或则zipped JSON text等压缩格式更好,那么你能够经过UDT来使用他们, 能够建立成员方法来利用那种格式的属性。当前咱们尚未发现有谁在尝试使用UDT来封装JSONB格式,所以,在Sql Server 2016中不考虑JSONB格式。安全
咱们的焦点在于提供更好的函数和更优的查询性能,而不在于节约存储空间。咱们知道在PostgreSQL中有原生JSON类型和对JSONB的支持,可是咱们不肯定其性能与CLR方式相比是否更有优点,因此,在SQL Server 2016中,咱们决定关注于其余更重要的方面(你但愿看到在SQL Server中有原生的JSON类却没有相关的内建函数吗?我想答案是否认的)。可是,咱们会在社区中与你们讨论,是否你们认为使用原生的JSON类型比CRL JSON或则文本JSON更好,你能够在Microsoft Connect网站上建立话题与咱们讨论。咱们决定首先实现FOR JSON和OPENJSON还因为该特性是大量用户都须要的,而且经过CLR难以实现。架构
所以,咱们的关注重点是导出/导入遗迹一些内建的JSON处理函数。有人可能会说这些函数的性能还不够快。咱们的策略是先提供一个可用的实现,再来持续优化其性能。可是,在数据库层内建JSON解析器时处理JSON最快的手段。你可使用CRL类型或者CLR解析器做为外部库可是它的性能不会比原生代码解析JSON更快。框架