第130期 JSON二元性(20240109)
第130期 JSON二元性(20240109)
上週,又雙叒飛了一趟上海,也是2024年第一飛,主要是受德哥邀請參加《國產資料庫共話未來趨勢·第三期-資料庫實踐哪家強》第一次當主持人(緊張的一批,嘴瓢了好幾次),同時進行了《國產資料庫最大的敵人》的主題分享,從Oracle的營收與研發投入展現Oracle的強大,同時從Oracle 23c新特性JSON二元性來展現Oracle的創新能力。(影片回放可以關注微信影片號“digoal德哥PostgreSQL”進行檢視)
1 簡介
本期就來稍微深入的講一下JSON二元性,其實這個是去年Oracle 23c新特性探索連更那幾篇遺留的一項內容,主要是我在SQL和開發這塊確實比較爛,那時候就跳過了JSON二元性這個特性。在CAB/PAB,Oracle透過一個非常直觀的栗子講解了這一特性,我也很榮幸要到了對應的PPT並進行了翻譯,在本次大會上進行了分享。
Oracle JSON關係型二元性檢視,Oracle JSON Relational Duality Views,簡稱JSON二元性(官方文件:)。其實簡單點來說就是依然用關係型表用行列方式存放資料,而透過檢視來將表對映成JSON模型,並可以透過傳統JSON資料庫方式來透過這個檢視來操作對應資料。
下面我們以一個栗子,搭建並維護一個
學生課表APP來展示JSON二元性這一新特性:
2 關係型表和JSON儲存的優劣
關係型表的儲存設計其實比較簡單,可以實現儲存獨立性、資料一致性還是查詢便捷性:
透過四表JOIN即可獲取需要的結果,但是透過SQL會出現輸出結果的
重複資料,增加業務側對資料的處理:
而JSON儲存,對於業務程式來說可以做到幾乎是拿來即可展示:
在Oracle 23c出現之前,為了在關係型資料庫中存放JSON資訊,很多資料庫,比如Oracle、MySQL、PostgreSQL等已經將JSON作為一種原生資料型別引入資料庫中,即將JSON資料存放在列中。但是JSON文件儲存也有一些問題,比如
資料冗餘的問題:
即多條資料存在相同的內容會出現資料的冗餘(這個栗子中就是多個學生有相同的可成),同時如果需要對該條資料進行更新,需要對所有關聯資料進行操作(比如某個課程需要換老師或教室),增加了更新的開銷和風險。
3 Oracle JSON關係型二元性檢視
從Oracle 23c開始Oracle提供了
一個儲存模型存放所有型別資料的方案,在Oracle眼中資料是
以儲存為中心,而不是
以使用為重,資料的儲存模型決定了資料的
一切使用方式,包括
操作、
語言和
API:
JSON關係型二元性檢視
宣告意圖將關係型資料作為JSON文件使用,允許資料庫使用關係型表
生成JSON格式和API:
這個栗子中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 } } } ] };
透過JSON關係型二元性檢視,將關係型表對映成JSON格式,APP可以使用標準的REST來從檢視中GET獲取JSON文件,檢視同樣可以透過MongoDB相容API或SQL進行訪問:
GET school.edu/student_sched?q={"student":{"$eq":"Jill"}}
也可以使用PUTs、MongoDB相容API或SQL來透過檢視編輯文件,資料庫檢測對文件的變更並且實時更新關係表中的資料:
PUT school.edu/student_schedule/:stuid
JSON二元性允許JSON文件包含任何對應用方便的資料,JSON關係型二元性檢視因為底層標準關係型行模式儲存,因此
永遠不會出現冗餘資料,相較於JSON資料庫,二元性為應用提供了更好的JSON使用及儲存方式:
另一方面使用JSON二元性功能不需要像傳統JSON資料庫那樣,針對每一種功能設計獨立的JSON模型,透過一套關係型表底層可以實現多種JSON模型對映以實現不同的功能,從而降低資料底層邏輯設計難度,提升資料使用便捷性:
同時,基於關係型表底層可以充分發揮關係型資料庫在OLTP的效能優勢,並提供更加便捷多元化的分析方式,還可以透過資料庫的自動並行進一步提升效能:
總結
Oracle 23c新特性JSON關係型二元性檢視給資料庫提供了全新的資料儲存與使用思路,同時進一步闡釋並踐行了Oracle融合資料庫的理念。
老規矩,知道寫了些啥。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/31466763/viewspace-3003153/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 科技愛好者週刊(第 130 期):低齡化的網際網路
- 彈性計算雙週刊 第24期
- 彈性計算雙週刊第21期
- 彈性計算雙週刊第17期
- 【集合論】二元關係 ( 二元關係記法 | A 到 B 的二元關係 | 二元關係個數 | 二元關係示例 )
- 第 54 期 TiDB SQL 相容性測試工具簡介TiDBSQL
- Asymco:iTunes公司排在了世界500強企業的第130位
- 《HelloGitHub》第 52 期Github
- 《HelloGitHub》第 51 期Github
- Anker 前端月刊 | 第1期前端
- 《HelloGitHub》第 45 期Github
- 《HelloGitHub》第 50 期Github
- 《HelloGitHub》第 40 期Github
- 前端週刊第 4 期前端
- 《HelloGitHub》第 35 期Github
- 每週分享第 44 期
- 每週分享第 45 期
- 《HelloGitHub》第 38 期Github
- 每週分享第 50 期
- 《HelloGitHub》第 36 期Github
- 每週分享第 49 期
- 每週分享第 48 期
- 每週分享第 47 期
- 每週分享第 46 期
- 《HelloGitHub》第 24 期Github
- 每週分享第 58 期
- 每週分享第 57 期
- 每週分享第 55 期
- 每週分享第 56 期
- 每週分享第 52 期
- 每週分享第 53 期
- 每週分享第 54 期
- 《HelloGitHub》第 37 期Github
- 每週分享第 51 期
- 每週分享第 60 期
- 每週分享第 59 期
- 每週分享第 43 期
- 《HelloGitHub》第 73 期Github