iT邦幫忙

2025 iThome 鐵人賽

DAY 30
1
Software Development

我所不知道的PostgreSQL 30天系列 第 30

Day 30: 比較直接映射 和 JSONB效能:以 Apache access log為範例(下)

  • 分享至 

  • xImage
  •  

在昨天的文章(Day 29: 比較直接映射 和 JSONB效能:以 Apache access log為範例(上))做完一連串的實驗之後可以發現,以直接映射或 JSONB 這兩種方式儲存資料各有優缺點,需要評估商業需求和使用情境才能決定要用哪種方式,今天提出幾個觀點給大家參考哪種情境選擇哪種方式會比較好。

選擇直接映射的情境

  • 需要頻繁新增資料。從上面的實驗可以發現, JSONB 搭配 GIN 在新增時,效能明顯比較差,如果新增時比較在意效能,也許選擇直接映射比較好。這個實驗情境有發現,直接映射的 B-tree 索引大小是 1080 KB , JSONB 的 GIN 索引大小是 23 MB ,也許是 JSONB 建立的索引太肥大,所以才導致新增的時候要花比較多時間最資料做優化。
  • 需要針對單一欄位做排序。這個會因為一個有吃到索引,一個沒吃到,整個搜尋的效能差距變得更大。

選擇 JSONB 的情境

  • 資料需要常常增減欄位。因為 JSONB 在儲存的時候比較彈性,不用先定好 Schema ,甚至每筆資料的欄位數量不一定要一樣,但是要注意查詢的時候,型別轉換是否會出現問題(ex: 不同筆資料的相同欄位型別不一致,可能會導致轉型的時候出現錯誤)。

本來想寫需要對資料做很多 Join 的時候,選擇直接映射比較好,但查了一下, JSONB 居然也可以做 Join ,這個部分要選擇哪個比較好,就等之後再來研究了XD。


不知不覺30天就過去,鐵人賽也默默地完成了,不敢說經過這三十天之後,就會變成一個 PostgreSQL 專家,但是這一連串的文章讓我學到,耐心閱讀官方文件的好處XD,可以更了解一個技術的設計,從一開始只能看完文件做翻譯,到後面漸漸的可以思考怎麼運用和設計實驗做驗證,都讓老菜鳥慢慢長大 :P 。最近也開始做跟data lake有關的工作,期待明年再參賽,可以對資料的處理又更多見解!

medium: https://medium.com/@hjoruhjoru


上一篇
Day 29: 比較直接映射 和 JSONB效能:以 Apache access log為範例(上)
系列文
我所不知道的PostgreSQL 30天30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言