Postgresql中json和jsonb類型區(qū)別解析
在我們的業(yè)務(wù)開發(fā)中,可能會(huì)因?yàn)樘厥狻練v史,偷懶,防止表連接】經(jīng)常會(huì)有JSON或者JSONArray類的數(shù)據(jù)存儲(chǔ)到某列中,這個(gè)時(shí)候再PG數(shù)據(jù)庫中有兩種數(shù)據(jù)格式可以直接一對(duì)多或者一對(duì)一的映射對(duì)象。所以我們也可能會(huì)經(jīng)常用到這類格式數(shù)據(jù);PG數(shù)據(jù)庫存儲(chǔ)json類型數(shù)據(jù)可以有兩種數(shù)據(jù)類型JSON和JSONB
json和jsonb區(qū)別
json和jsonb都可以json和jsonArray類型的數(shù)據(jù)

實(shí)際上主要區(qū)別在于寫入和查詢效率以及數(shù)據(jù)存儲(chǔ)上面
性能
- json 數(shù)據(jù)類型存儲(chǔ)了輸入文本的精確副本,這意味著每次需要訪問或修改數(shù)據(jù)時(shí),數(shù)據(jù)庫都必須重新解析該文本。這會(huì)導(dǎo)致在處理大型 JSON 文檔或進(jìn)行頻繁的 JSON 操作時(shí)性能下降。
- 相比之下,jsonb 數(shù)據(jù)類型將 JSON 數(shù)據(jù)存儲(chǔ)為一種分解好的二進(jìn)制格式。雖然這在輸入時(shí)會(huì)稍微慢一些,因?yàn)樾枰M(jìn)行額外的轉(zhuǎn)換,但它在處理時(shí)要快得多,因?yàn)椴恍枰M(jìn)行解析。
存儲(chǔ)方式
- json 數(shù)據(jù)類型保留了輸入文本的完整結(jié)構(gòu),包括可能存在的空格、JSON 對(duì)象內(nèi)部鍵的順序以及重復(fù)的鍵/值對(duì)。這意味著它提供了一種“所見即所得”的存儲(chǔ)方式,但也可能導(dǎo)致不必要的空間占用和可能的性能開銷。
- jsonb 數(shù)據(jù)類型在存儲(chǔ)時(shí)會(huì)刪除不必要的空格、不保留對(duì)象鍵的順序,并且只保留每個(gè)鍵的最后一個(gè)值(如果存在重復(fù)鍵)。這種存儲(chǔ)方式更加緊湊,并且可以提高查詢和處理的效率。
索引支持
- jsonb 數(shù)據(jù)類型支持基于 GIN(Generalized Inverted Index)或 B-tree 的索引,這使得基于 JSON 數(shù)據(jù)的查詢可以更加高效。通過索引,您可以快速檢索 JSON 文檔中的特定元素或值。
- json 數(shù)據(jù)類型則不支持這樣的索引,這可能會(huì)限制其在大型數(shù)據(jù)集或需要高性能查詢的應(yīng)用中的使用。
所以我們?cè)诓煌闆r下可以選擇不同的數(shù)據(jù)格式【PS:業(yè)務(wù)系統(tǒng)大概率是進(jìn)行單條數(shù)據(jù)新增,批量數(shù)據(jù)查詢和過濾,這些情況選擇什么數(shù)據(jù)格式大家應(yīng)該都比較清楚了,如果有特殊情況可以特殊考慮處理,其實(shí)根本就是空間換時(shí)間】
其他
在創(chuàng)建表的時(shí)候發(fā)現(xiàn)還有一種數(shù)據(jù)類型jsonpath,這個(gè)數(shù)據(jù)類型可以存儲(chǔ)解析json格式的表達(dá)式

SELECT jsonb_path_query(jsonb_1 , jsonpath_1) FROM tb_json;
結(jié)果如下

在一般的業(yè)務(wù)場景下我們的json格式一般都是固定的,但是有一些特殊情況比如我們抓取一些非格式話的數(shù)據(jù)的時(shí)候可以存儲(chǔ)下解析規(guī)則,然后對(duì)規(guī)則進(jìn)行補(bǔ)全,逐步完善我們數(shù)據(jù)解析的能力
到此這篇關(guān)于Postgresql中json和jsonb類型區(qū)別的文章就介紹到這了,更多相關(guān)Postgresql json和jsonb類型區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Postgresql數(shù)據(jù)庫之創(chuàng)建和修改序列的操作
這篇文章主要介紹了Postgresql數(shù)據(jù)庫之創(chuàng)建和修改序列的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
關(guān)于PostgreSQL突然無法啟動(dòng)的排查過程及解決方法
SQL數(shù)據(jù)庫服務(wù)器無法啟動(dòng)的原因可能有多種,這篇文章主要介紹了關(guān)于PostgreSQL突然無法啟動(dòng)的排查過程及解決方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-07-07
PostgreSQL教程(十三):數(shù)據(jù)庫管理詳解
這篇文章主要介紹了PostgreSQL教程(十三):數(shù)據(jù)庫管理詳解,本文講解了概述、創(chuàng)建數(shù)據(jù)庫、修改數(shù)據(jù)庫配置、刪除數(shù)據(jù)庫、表空間,需要的朋友可以參考下2015-05-05
PostgreSQL實(shí)戰(zhàn)之啟動(dòng)恢復(fù)讀取checkpoint記錄失敗的條件詳解
這篇文章主要給大家介紹了關(guān)于PostgreSQL實(shí)戰(zhàn)之啟動(dòng)恢復(fù)讀取checkpoint記錄失敗的條件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08

