第130期 JSON二元性(20240109)

yhw1809發表於2024-01-09

第130期 JSON二元性(20240109)

上週,又雙叒飛了一趟上海,也是2024年第一飛,主要是受德哥邀請參加《國產資料庫共話未來趨勢·第三期-資料庫實踐哪家強》第一次當主持人(緊張的一批,嘴瓢了好幾次),同時進行了《國產資料庫最大的敵人》的主題分享,從Oracle的營收與研發投入展現Oracle的強大,同時從Oracle 23c新特性JSON二元性來展現Oracle的創新能力。(影片回放可以關注微信影片號“digoal德哥PostgreSQL”進行檢視)
32742d615bb4f2c30c5395bbd146669.jpg

1 簡介

本期就來稍微深入的講一下JSON二元性,其實這個是去年Oracle 23c新特性探索連更那幾篇遺留的一項內容,主要是我在SQL和開發這塊確實比較爛,那時候就跳過了JSON二元性這個特性。在CAB/PAB,Oracle透過一個非常直觀的栗子講解了這一特性,我也很榮幸要到了對應的PPT並進行了翻譯,在本次大會上進行了分享。
Oracle JSON關係型二元性檢視,Oracle JSON Relational Duality Views,簡稱JSON二元性(官方文件:)。其實簡單點來說就是依然用關係型表用行列方式存放資料,而透過檢視來將表對映成JSON模型,並可以透過傳統JSON資料庫方式來透過這個檢視來操作對應資料。
下面我們以一個栗子,搭建並維護一個 學生課表APP來展示JSON二元性這一新特性:
image.png

2 關係型表和JSON儲存的優劣

關係型表的儲存設計其實比較簡單,可以實現儲存獨立性、資料一致性還是查詢便捷性:
image.png
透過四表JOIN即可獲取需要的結果,但是透過SQL會出現輸出結果的 重複資料,增加業務側對資料的處理:
image.png
而JSON儲存,對於業務程式來說可以做到幾乎是拿來即可展示:
image.png
在Oracle 23c出現之前,為了在關係型資料庫中存放JSON資訊,很多資料庫,比如Oracle、MySQL、PostgreSQL等已經將JSON作為一種原生資料型別引入資料庫中,即將JSON資料存放在列中。但是JSON文件儲存也有一些問題,比如 資料冗餘的問題:
image.png
即多條資料存在相同的內容會出現資料的冗餘(這個栗子中就是多個學生有相同的課程),同時如果需要對該條資料進行更新,需要對所有關聯資料進行操作(比如某個課程需要換老師或教室),增加了更新的開銷和風險。

3 Oracle JSON關係型二元性檢視

從Oracle 23c開始Oracle提供了 一個儲存模型存放所有型別資料的方案,在Oracle眼中資料是 以儲存為中心,而不是 以使用為重,資料的儲存模型決定了資料的 一切使用方式,包括 操作語言API
image.png
JSON關係型二元性檢視 宣告意圖將關係型資料作為JSON文件使用,允許資料庫使用關係型表 生成JSON格式和API:
image.png
這個栗子中JSON二元性相關語句如下:

CREATE JSON DUALITY VIEW student_scheduleAS student
{{
   student    : stuid   name       : sname
   major      : major
   schedule   : student_courses
   [ {
    course
      {         time      : time
         course    : cname
         courseId  : cid
         room      : room           
         teacher @unnest
         {
           teacher : tname
         }
       }
     } ]
};

image.png
image.png
透過JSON關係型二元性檢視,將關係型表對映成JSON格式,APP可以使用標準的REST來從檢視中GET獲取JSON文件,檢視同樣可以透過MongoDB相容API或SQL進行訪問:
image.png

GET school.edu/student_sched?q={"student":{"$eq":"Jill"}}

也可以使用PUTs、MongoDB相容API或SQL來透過檢視編輯文件,資料庫檢測對文件的變更並且實時更新關係表中的資料:
image.png

PUT school.edu/student_schedule/:stuid

JSON二元性允許JSON文件包含任何對應用方便的資料,JSON關係型二元性檢視因為底層標準關係型行模式儲存,因此 永遠不會出現冗餘資料,相較於JSON資料庫,二元性為應用提供了更好的JSON使用及儲存方式:
image.png
另一方面使用JSON二元性功能不需要像傳統JSON資料庫那樣,針對每一種功能設計獨立的JSON模型,透過一套關係型表底層可以實現多種JSON模型對映以實現不同的功能,從而降低資料底層邏輯設計難度,提升資料使用便捷性:
image.png
同時,基於關係型表底層可以充分發揮關係型資料庫在OLTP的效能優勢,並提供更加便捷多元化的分析方式,還可以透過資料庫的自動並行進一步提升效能:
image.png

總結

Oracle 23c新特性JSON關係型二元性檢視給資料庫提供了全新的資料儲存與使用思路,同時進一步闡釋並踐行了Oracle融合資料庫的理念。
老規矩,知道寫了些啥。

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/31466763/viewspace-3003153/,如需轉載,請註明出處,否則將追究法律責任。

相關文章