亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > PostgreSQL > 正文

介紹PostgreSQL中的jsonb數據類型

2020-03-12 23:53:42
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了介紹PostgreSQL中的jsonb數據類型,jsonb是PostgreSQL9.4中開始內置的類型,能夠支持GIN索引,需要的朋友可以參考下

PostgreSQL 9.4 正在加載一項新功能叫jsonb,是一種新型資料,可以儲存支援GIN索引的JSON 資料。換言之,此功能,在即將來臨的更新中最重要的是,如果連這都不重要的話,那就把Postgres 置于文件為本數據庫系統的推薦位置吧。

自從9.2開始,一個整合JSON 資料類型已經存在,帶有一整套功能(例如資料產生和資料解構功能),還有9.3新增的操作者。當使用JSON 資料類型,資料的被存儲成一完全一樣的副本,功能還在此之上運作,還另外需要后臺運作的重新分析。

這心得JSONB 資料類型以已降解的2元格式存儲,所以,插入此資料會比JSON高效,因為后臺不再需要重新分析,因此讓它更快速運行,而且還兼顧GIN 索引。就是因為最后這個原因,我們實際上建議讀者使用jsonb來代替json制作程式(當然你還可以因應需要而使用json)。請記住jsonb使用相同的操作者和功能,讀者們可以看我之前的帖子去令你得到些什么啟發(或者干脆看Postgres的文件)。

現在讓我們看一下JSONB是如何工作的,同時和JSON比較一下。采用的測試數據是860萬的geobase類型數據,大概1.1G大小,包括了城市名,國家代碼(可以在這參見完整列表)等很多字段。首先通過底層復制(raw copy)來把這些數據存儲到數據庫的一個新表里面,之后把這張表通過一組填充因子是100的表轉換成JSON/JSONB,之后來看它們各占多少空間。

 

 
  1. =# COPY geodata FROM '$HOME/Downloads/allCountries.txt'
  2. COPY 8647839 
  3. =# CREATE TABLE geodata_jsonb (data jsonb) with (fillfactor=100); 
  4. CREATE TABLE 
  5. =# CREATE TABLE geodata_json (data json) with (fillfactor=100); 
  6. CREATE TABLE 
  7. =# /timing 
  8. Timing is on
  9. =# INSERT INTO geodata_json SELECT row_to_json(geodata) FROM geodata; 
  10. INSERT 0 8647839 
  11. Time: 287158.457 ms 
  12. =# INSERT INTO geodata_jsonb SELECT row_to_json(geodata)::jsonb FROM geodata; 
  13. INSERT 0 8647839 
  14. Time: 425825.967 ms 

生成JSONB數據花費稍微長一點時間,大小有沒有區別呢?

 

 
  1. =# SELECT pg_size_pretty(pg_relation_size('geodata_json'::regclass)) AS json, 
  2. pg_size_pretty(pg_relation_size('geodata_jsonb'::regclass)) AS jsonb; 
  3. json | jsonb  
  4. ---------+--------- 
  5. 3274 MB | 3816 MB 
  6. (1 row) 

在JSON數據上面做索引從9.3版本開始,比如用操作符(注意 因為它返回文本,所以'->>'被采用;并且根據查詢不同,索引采用不同的關鍵字)

 

 
  1. =# CREATE INDEX geodata_index ON 
  2. geodata_json ((data->>'country_code'), (data->>'asciiname')); 
  3. CREATE INDEX 
  4. =# SELECT pg_size_pretty(pg_relation_size('geodata_index'::regclass)) 
  5. AS json_index; 
  6. json_index  
  7. ------------ 
  8. 310 MB 
  9. (1 row) 
  10. =# SELECT (data->>'population')::int as population, 
  11. data->'latitude' as latitude, 
  12. data->'longitude' as longitude 
  13. FROM geodata_json WHERE data->>'country_code' = 'JP' AND 
  14. data->>'asciiname' = 'Tokyo' AND 
  15. (data->>'population')::int != 0; 
  16. population | latitude | longitude  
  17. ------------+----------+----------- 
  18. 8336599 | 35.6895 | 139.69171 
  19. (1 row) 
  20. =# -- Explain of previous query 
  21. QUERY PLAN  
  22. ------------------------------------------------------------------------------------------------------------------------- 
  23. Bitmap Heap Scan on geodata_json (cost=6.78..865.24 rows=215 width=32) 
  24. Recheck Cond: (((data ->> 'country_code'::text) = 'JP'::text) AND ((data ->> 'asciiname'::text) = 'Tokyo'::text)) 
  25. Filter: (((data ->> 'population'::text))::integer <> 0) 
  26. -> Bitmap Index Scan on geodata_index (cost=0.00..6.72 rows=216 width=0) 
  27. Index Cond: (((data ->> 'country_code'::text) = 'JP'::text) AND ((data ->> 'asciiname'::text) = 'Tokyo'::text)) 
  28. Planning time: 0.172 ms 
  29. (6 rows

在這個例子里,計劃(planner)可以使用bitmap索引掃描,同時使用了之前產生的索引。

現在,JSONB的一個新特點就是檢查包含帶有操作符@>的數據容量,這種數據是可以用GIN來索引的,這種操作符數據也包括了?,?|和?&(為了檢查給定的關鍵字是否存在)。 GIN索引對兩類操作符起作用:

缺省操作符類,之前列出的四個;

jsonb_hash_ops,僅支持@>,但是當搜索數據時性能表現不錯,而且所占磁盤空間較小;

下面是它如何工作:

 

 
  1. =# CREATE INDEX geodata_gin ON geodata_jsonb 
  2. USING GIN (data jsonb_hash_ops); 
  3. CREATE INDEX 
  4. =# SELECT (data->>'population')::int as population, 
  5. data->'latitude' as latitude, 
  6. data->'longitude' as longitude 
  7. FROM geodata_jsonb WHERE data @> '{"country_code": "JP", "asciiname": "Tokyo"}' AND 
  8. (data->>'population')::int != 0; 
  9. population | latitude | longitude  
  10. ------------+----------+----------- 
  11. 8336599 | 35.6895 | 139.69171 
  12. (1 row) 
  13. =# SELECT pg_size_pretty(pg_relation_size('geodata_gin'::regclass)) AS jsonb_gin; 
  14. jsonb_gin 
  15. ----------- 
  16. 1519 MB 
  17. (1 row) 
  18. =# -- EXPLAIN of previous query 
  19. QUERY PLAN  
  20. ------------------------------------------------------------------------------------- 
  21. Bitmap Heap Scan on geodata_jsonb (cost=131.01..31317.76 rows=8605 width=418) 
  22. Recheck Cond: (data @> '{"asciiname": "Tokyo", "country_code": "JP"}'::jsonb) 
  23. Filter: (((data ->> 'population'::text))::integer <> 0) 
  24. -> Bitmap Index Scan on geodata_gin (cost=0.00..128.86 rows=8648 width=0) 
  25. Index Cond: (data @> '{"asciiname": "Tokyo", "country_code": "JP"}'::jsonb) 
  26. Planning time: 0.134 ms 

根據應用的需求,你或許想采用空間消耗低的索引,比如BTree建立在JSON數據上的索引類型;GIN索引有著更多的優點,因為它覆蓋了所有的JSON字段,并且檢查容量;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
38少妇精品导航| 午夜精品福利在线观看| 九九精品在线视频| 日韩大胆人体377p| 欧美另类在线播放| 国产精品高清网站| 一区二区中文字幕| 久久综合免费视频| 91网站在线免费观看| 国产综合在线看| 亚洲精品短视频| 亚洲黄色成人网| 国产在线播放不卡| 国产成人精彩在线视频九色| 欧美在线视频网| 中文字幕在线观看亚洲| 91色视频在线导航| 日韩在线视频免费观看| 国产精品美女午夜av| 欧美性20hd另类| 日av在线播放中文不卡| 亚洲成人在线网| 欧美成人在线免费| 亚洲一区二区日本| 97在线视频精品| 精品日本高清在线播放| 国产一区红桃视频| 亚洲午夜性刺激影院| 日韩一区二区久久久| 1769国产精品| 国产99久久久欧美黑人| 国产精品最新在线观看| 国产成人精品在线播放| 欧美电影院免费观看| 久久久久一本一区二区青青蜜月| 亚洲激情久久久| 成人激情视频在线播放| 欧美国产精品日韩| 精品福利在线看| 欧美精品一区二区三区国产精品| 欧美激情第1页| 992tv成人免费影院| 国产精品一区二区三区久久久| 色中色综合影院手机版在线观看| 欧美一区二区三区免费视| 成人xvideos免费视频| 成人妇女淫片aaaa视频| 国产精品人人做人人爽| 岛国av一区二区| 国产91网红主播在线观看| 91精品国产91久久久久久| 国产精品网站入口| 国产成人精品亚洲精品| 国产suv精品一区二区三区88区| 国产精品久久999| 久久亚洲精品毛片| 亚洲精品中文字| 欧美夫妻性视频| 中文字幕精品网| 国模精品一区二区三区色天香| 亚洲一区二区中文| 亚洲999一在线观看www| 欧美色欧美亚洲高清在线视频| 亚洲欧美999| 欧美富婆性猛交| 国产91在线视频| 欧美日韩在线观看视频小说| 亚洲图片欧美日产| 久热爱精品视频线路一| 亚洲国产91精品在线观看| 亚洲欧美日韩中文在线| 成人在线免费观看视视频| 日韩美女av在线| 精品久久久久久久久久国产| 欧美午夜宅男影院在线观看| 亚洲免费av电影| 中文字幕国产亚洲2019| 91久久久在线| 国产综合久久久久久| 中国人与牲禽动交精品| 最近中文字幕mv在线一区二区三区四区| 亚洲欧美日韩区| 国产精品久久久久久久久久ktv| 亚洲欧美中文日韩v在线观看| 亚洲一区亚洲二区| 国产91在线播放九色快色| 久久国产一区二区三区| 热草久综合在线| 97色在线视频| 久久久女人电视剧免费播放下载| 久久视频免费观看| 欧美日韩国产va另类| 最近2019年日本中文免费字幕| 日韩美女激情视频| 成人h视频在线| 北条麻妃一区二区在线观看| 亚洲人a成www在线影院| 中文综合在线观看| 911国产网站尤物在线观看| 中文字幕日韩视频| 久久久久久久久久久亚洲| 日韩国产中文字幕| 欧日韩不卡在线视频| 夜夜嗨av色综合久久久综合网| 国产精品成人va在线观看| 亚洲国产精品免费| 中文字幕视频在线免费欧美日韩综合在线看| yw.139尤物在线精品视频| 欧美成年人视频网站| 日韩网站免费观看高清| 亚洲男女自偷自拍图片另类| 亚洲美女久久久| 国产亚洲在线播放| 欧美成人全部免费| 久久艹在线视频| 亚洲成人a级网| 国产精品偷伦一区二区| 国产成人免费91av在线| 亚洲女人天堂成人av在线| 55夜色66夜色国产精品视频| 欧洲精品在线视频| 亚洲第一色在线| 性欧美视频videos6一9| 91免费在线视频网站| 中文字幕亚洲欧美日韩在线不卡| 久久久亚洲精选| 亚洲国产私拍精品国模在线观看| 欧美精品电影免费在线观看| 深夜精品寂寞黄网站在线观看| 成人精品网站在线观看| 国产亚洲欧美日韩一区二区| 在线观看国产精品日韩av| 欧美视频不卡中文| 夜夜嗨av色综合久久久综合网| 视频直播国产精品| 国产成人综合av| 国产日韩欧美电影在线观看| 亚洲欧美国内爽妇网| 欧美国产高跟鞋裸体秀xxxhd| 国产精品女主播| 亚洲视频一区二区| 成人黄色大片在线免费观看| 国产精品久久久久久久久久ktv| 精品国产一区二区三区在线观看| 日韩欧美极品在线观看| 国产精品∨欧美精品v日韩精品| 中文字幕亚洲欧美一区二区三区| 97国产在线观看| 色婷婷综合久久久久| 欧美日韩激情小视频| 在线电影av不卡网址| 18一19gay欧美视频网站| 亚洲无亚洲人成网站77777| 国产福利精品视频| 久久成人精品一区二区三区| 亚洲国产成人精品电影| 国产成人精品久久久| 欧美日韩国产成人在线| 91久久精品日日躁夜夜躁国产| 欧美一区深夜视频| 91精品国产自产在线| 久久人人爽人人| 色香阁99久久精品久久久| 一区二区三区美女xx视频|