Sql Server 2016中增加了对JSON的内置支持

原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/built-in-json-support-in-sql-server-2016/

在数据库层对JSON提供支持,是请求排名最靠前的特性之一,在Microsoft Connect网站上对他的投票量超过了1000。微软承诺,在Sql Server 2016版本中,会提供内置的JSON支持。注意这并不是Sql Server 2005已有特性XML原生支持的翻版。微软的目标是创建一个简单好用的框架来处理JSON文档。本文中,我将描述SQL Server 2016中计划实现的JSON特性。特性支持时间表如下:

  • SQL Server 2016 CTP2 - 能够把数据格式化为JSON导出,关于该特性的详细信息情参阅博文
  • SQL Server 2016 CTP3 - 能够加载JSON字符串并解析为表变量,能够提取JSON节点的值,对JSON列设置索引属性。

JSON 数据的存储形式

首先我们要搞明白的是,内置JSON支持并不等于原生JSON类型。在SQL Server 2016中,JSON数据将会使用NVARCHAR类型存储,原因如下:

  • 可迁移性 - 我们发现人们已经开始使用字符串来表示JSON数据,如果引入新的JSON类型,人们不得不改变数据库架构,并且使用新的特性来重新载入数据。
  • 特性兼容性 - NVARCHAR数据类型已经被SQL Server的各个组件广泛支持,这样JSON也就被这些组件支持。你可以把JSON放进Hekaton,Temporal或者column store表中,应用行级别的权限控制等安全策略,使用B-Tree和FTS索引,把JSON作为存储过程或用户自定义函数的参数与返回值等。你无需考虑JSON是否与某个特性X兼容,因为只要NVARCHAR与特性X兼容,那么JSON也就兼容。此外也有一些限制,由于Hekaton和column store不支持LOB值,因此你职能保存小型JSON文档,但是,一旦我们为Hekaton和column store添加了对LOB的支持那么你就能够把JSON文档存储在任意地方了。
  • 客户端代码兼容性 - 当前在客户端应用中我们还没有标准的JSON对象类型(向XmlDom对象)。网页、移动端和JavaScript应用使用内置的解析器把JSON文本转化为对象。在JavaScript中使用object来表示JSON数据,不可能为少数关系型数据库内建JSON 类型提供一个代理类型。在C#.Net中,大量开发者使用JSON.net解析器和内建的JObject、JArray类型;但是这些不是标准方案,且可能不会被纳入ADO.NET,所以C#应用从数据库得到纯文本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更快。

时间: 2025-01-07 13:34:49

Sql Server 2016中增加了对JSON的内置支持的相关文章

在Sql Server 2016中使用For Json子句把数据作为json格式导出

原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/export-query-result-as-json-format-in-sql-server-2016/ 使用for json子句把查询结果作为json字符串导出,将作为sql server 2016中首先可用的一个特性.如果你熟悉for xml子句,那么将很容易理解for json: select ccolumn, expression, column as ali

SQL Server 2016中In-Memory OLTP继CTP3之后的新改进

SQL Server 2016中In-Memory OLTP继CTP3之后的新改进 转译自:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2016/03/25/whats-new-for-in-memory-oltp-in-sql-server-2016-since-ctp3/ SQL Server 2016正在对 In-Memory OLTP 功能作一系列的强化,从而使该功能使用起来更加方便,性能更优.在之前的文章中,我已经对S

SQL Server 2016 ->> T-SQL新特性

1) TRUNCATE表分区而不是整表 CREATE TABLE dbo.TruncatePartitionTest ( PrtCol INT, Col2 NVARCHAR(300) ) ON [myPS1](PrtCol) GO INSERT dbo.TruncatePartitionTest VALUES(1,'AAA'), (11,'AAA'), (100,'AAA'), (101,'AAA') GO -- TRUNCATE partitions 1 to 2 TRUNCATE TABLE

SQL Server 2016五大优势挖掘企业用户数据价值

转载自:http://soft.zdnet.com.cn/software_zone/2016/0318/3074442.shtml 3月10日,微软公司在美国纽约举办了一场名为“Data Driven”的活动,正式发布了新一代SQL Server 2016, 与此同时,还附赠了两条爆炸性消息:微软将SQL Server 2016开放给linux,同时还发布了一款针对Oracle数据库的迁移工具,以及相关的迁移优惠政策. 业内对这两条消息进行了各种各样的猜想和推测. 一周后,SQL Server

SQL Server 2016 —— 聚集列存储索引的功能增强

作者 Jonathan Allen,译者         邵思华         发布于     2015年6月14日 聚集列存储索引(CC Index)是SQL Server 2014中两大最引人瞩目的特性之一,设计为用于超过1千万条记录的数据表.使用者无需明确的指定索引,也能够保证分析式查询的优良性能. 但2014版本中的这一特性存在着一个缺陷,即使用者无法指定索引.虽然CC索引比起传统表的表扫描要快得多,但它还是及不上经手动调整的覆盖索引.因此,为了同时支持这两种模式,开发者不得不创建两张

我才发现SQL Server 2016 RC1 已经发布

SQL Server 2016 RC1 已经正式发布,该版本是近年来微软在数据库平台方向的一次重大革新.SQL Server 2016 中包含了实时运营分析能力.移动设备上的丰富可视化.内置高级分析.新的高级安全技术和新的混合云方案. SQL Server 2016 利用内置的 In-memory 性能和运营分析提供突破性的关键任务功能.全面的安全功能(比如新的 Always Encrypted 技术)可帮助保护企业数据(无论是静止还是移动),而一流的高可用性和灾难恢复解决方案为 AlwaysO

SQL Server 2016 JSON原生支持实例说明

原文:SQL Server 2016 JSON原生支持实例说明 背景 Microsoft SQL Server 对于数据平台的开发者来说越来越友好.比如已经原生支持XML很多年了,在这个趋势下,如今也能在SQLServer2016中使用内置的JSON.尤其对于一些大数据很数据接口的解析环节来说这显得非常有价值.与我们现在所做比如在SQL中使用CLR或者自定义的函数来解析JSON相比较,新的内置JSON会大大提高性能,同时优化了编程以及增删查改等方法. 那么是否意味着我们可以丢弃XML,然后开始使

关于SQL Server 2017中使用json传参时解析遇到的多层解析问题

原文:关于SQL Server 2017中使用json传参时解析遇到的多层解析问题 开发新的系统,DB部分使用了SQL Server从2016版开始自带的Json解析方式. 用了快半年,在个人项目,以及公司部分项目上使用了,暂时还没遇到大的问题,和性能问题. 今天在解析Json的多级参数遇到了点小问题,在此记录一下: 传参内容如下: 1 declare @json varchar(max)=N'{"Customer":36,"Positions":[{"I

sql server 2016 json 解析方法

前几天发现了sql server 2016支持了json 项目需要所以安装了 用了一下 方便了很多  ,写一下小笔记方便日后查看,也希望各位大神指正共同学习. sql server 2016 安装图解网上很多,大家注意安装版本就可以了. --1 带 Root Keyselect * from sys_menu for JSON AUTO ,ROOT('Result') --2  asselect ID, Name, Age as [Entity.Age], Sex as [Entity.Sex]