第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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【集合論】二元關係 ( 二元關係記法 | A 到 B 的二元關係 | 二元關係個數 | 二元關係示例 )
- 屬性序列化自定義與字母表排序-JSON框架Jackson精解第3篇排序JSON框架
- mORMot 1.18 第11章 JSON - JavaScript物件表示法ORMJSONJavaScript物件
- 移出Json物件的三級屬性JSON物件
- package.json中的重要屬性PackageJSON
- JSON 屬性必須用雙引號JSON
- 【SEOI2024 A】二元運算器
- Java實現二元選擇排序Java排序
- 如何保持json序列化的順序性?JSON
- HanLP二元核心詞典詳細解析HanLP
- Flutter第6天–非同步-IO+網路訪問+jsonFlutter非同步JSON
- Flutter第6天--非同步-IO+網路訪問+jsonFlutter非同步JSON
- @ControllerAdvice 全域性異常響應頁面和 JSONControllerJSON
- 獲取json串裡的某個屬性值JSON
- mORMot 1.18 第19章 安全性ORM
- Java解析並修改JSON:將isShow屬性改為falseJavaJSONFalse
- 線性代數本質第10節
- mORMot 1.18 第18章 使用REST/JSON的客戶端/伺服器ORMRESTJSON客戶端伺服器
- Java XML和JSON:Java SE的文件處理,第1部分JavaXMLJSON
- Java XML和JSON:Java SE的文件處理 第2部分JavaXMLJSON
- mysql json陣列內物件屬性 多個值搜尋MySqlJSON陣列物件
- 關於 Angular 應用 tsconfig.json 中的 lib 屬性AngularJSON
- 關於 Angular 應用 tsconfig.json 中的 target 屬性AngularJSON
- JSON格式資料屬性必須用雙引號包裹JSON
- 彈性計算雙週刊 第24期
- 第4章 資料的概括性度量
- 彈性計算雙週刊第17期
- 彈性計算雙週刊第21期
- 二元一次不定方程(Exgcd)(更方便的解法)GC
- 二元函式的極值與最值問題函式
- 【ML系列】簡單的二元分類——Logistic迴歸
- SuperObject Delphi 的 JSON 屬性亂序 – 操作類改造 – 關於屬性順序的問題ObjectJSON
- `newtonsoft.json` 指定某個屬性使用特定的時間格式JSON
- Json hijacking/Json劫持漏洞JSON
- golang-json, 原始碼解釋struct轉json時,struct對屬性欄位需要大寫才能轉譯成功GolangJSON原始碼Struct
- 機器學習 第6篇:線性模型概述機器學習模型
- 【javaWeb】第55天——java web階段性總結JavaWeb
- 第190天:js—String常用屬性和方法(最全)JS