Postgresql中json和jsonb類型區(qū)別解析
在我們的業(yè)務(wù)開發(fā)中,可能會因?yàn)樘厥狻練v史,偷懶,防止表連接】經(jīng)常會有JSON或者JSONArray類的數(shù)據(jù)存儲到某列中,這個(gè)時(shí)候再PG數(shù)據(jù)庫中有兩種數(shù)據(jù)格式可以直接一對多或者一對一的映射對象。所以我們也可能會經(jīng)常用到這類格式數(shù)據(jù);PG數(shù)據(jù)庫存儲json類型數(shù)據(jù)可以有兩種數(shù)據(jù)類型JSON和JSONB
json和jsonb區(qū)別
json和jsonb都可以json和jsonArray類型的數(shù)據(jù)
實(shí)際上主要區(qū)別在于寫入和查詢效率以及數(shù)據(jù)存儲上面
性能
- json 數(shù)據(jù)類型存儲了輸入文本的精確副本,這意味著每次需要訪問或修改數(shù)據(jù)時(shí),數(shù)據(jù)庫都必須重新解析該文本。這會導(dǎo)致在處理大型 JSON 文檔或進(jìn)行頻繁的 JSON 操作時(shí)性能下降。
- 相比之下,jsonb 數(shù)據(jù)類型將 JSON 數(shù)據(jù)存儲為一種分解好的二進(jìn)制格式。雖然這在輸入時(shí)會稍微慢一些,因?yàn)樾枰M(jìn)行額外的轉(zhuǎn)換,但它在處理時(shí)要快得多,因?yàn)椴恍枰M(jìn)行解析。
存儲方式
- json 數(shù)據(jù)類型保留了輸入文本的完整結(jié)構(gòu),包括可能存在的空格、JSON 對象內(nèi)部鍵的順序以及重復(fù)的鍵/值對。這意味著它提供了一種“所見即所得”的存儲方式,但也可能導(dǎo)致不必要的空間占用和可能的性能開銷。
- jsonb 數(shù)據(jù)類型在存儲時(shí)會刪除不必要的空格、不保留對象鍵的順序,并且只保留每個(gè)鍵的最后一個(gè)值(如果存在重復(fù)鍵)。這種存儲方式更加緊湊,并且可以提高查詢和處理的效率。
索引支持
- jsonb 數(shù)據(jù)類型支持基于 GIN(Generalized Inverted Index)或 B-tree 的索引,這使得基于 JSON 數(shù)據(jù)的查詢可以更加高效。通過索引,您可以快速檢索 JSON 文檔中的特定元素或值。
- json 數(shù)據(jù)類型則不支持這樣的索引,這可能會限制其在大型數(shù)據(jù)集或需要高性能查詢的應(yīng)用中的使用。
所以我們在不同情況下可以選擇不同的數(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ù)類型可以存儲解析json格式的表達(dá)式
SELECT jsonb_path_query(jsonb_1 , jsonpath_1) FROM tb_json;
結(jié)果如下
在一般的業(yè)務(wù)場景下我們的json格式一般都是固定的,但是有一些特殊情況比如我們抓取一些非格式話的數(shù)據(jù)的時(shí)候可以存儲下解析規(guī)則,然后對規(guī)則進(jìn)行補(bǔ)全,逐步完善我們數(shù)據(jù)解析的能力
到此這篇關(guān)于Postgresql中json和jsonb類型區(qū)別的文章就介紹到這了,更多相關(guān)Postgresql json和jsonb類型區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostgreSQL教程(十四):數(shù)據(jù)庫維護(hù)
這篇文章主要介紹了PostgreSQL教程(十四):數(shù)據(jù)庫維護(hù),本文講解了恢復(fù)磁盤空間、更新規(guī)劃器統(tǒng)計(jì)、VACUUM和ANALYZE的示例、定期重建索引等內(nèi)容,需要的朋友可以參考下2015-05-05postgresql 實(shí)現(xiàn)sql多行語句合并一行
這篇文章主要介紹了postgresql 實(shí)現(xiàn)sql多行語句合并一行的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12PostgreSQL 分頁查詢時(shí)間的2種比較方法小結(jié)
這篇文章主要介紹了PostgreSQL 分頁查詢時(shí)間的2種比較方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Docker環(huán)境下升級PostgreSQL的步驟方法詳解
這篇文章主要介紹了Docker環(huán)境下升級PostgreSQL的步驟方法詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01使用PostgreSQL的JSONB數(shù)據(jù)類型進(jìn)行高效查詢的示例代碼
PostgreSQL的JSONB數(shù)據(jù)類型提供了一種靈活的方式來存儲和查詢JSON格式的數(shù)據(jù),下面我們將詳細(xì)討論如何使用JSONB數(shù)據(jù)類型進(jìn)行高效查詢,并提供相應(yīng)的解決方案和示例代碼,需要的朋友可以參考下2024-04-04Postgres 創(chuàng)建Role并賦予權(quán)限的操作
這篇文章主要介紹了 Postgres 創(chuàng)建Role并賦予權(quán)限的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01使用navicat連接postgresql報(bào)錯(cuò)問題圖文解決辦法
我們在日常開發(fā)中有時(shí)候需要用navicate連接postgresql數(shù)據(jù)庫,有時(shí)候會連接不上數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于使用navicat連接postgresql報(bào)錯(cuò)問題圖文解決辦法,需要的朋友可以參考下2023-11-11在docker上部署postgreSQL主從的超詳細(xì)步驟
使用Docker能夠更加高效地部署和管理應(yīng)用程序,提高開發(fā)和運(yùn)維的效率,下面這篇文章主要給大家介紹了關(guān)于在docker上部署postgreSQL主從的超詳細(xì)步驟,文中通過代碼及圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08