原文地址: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更快。框架