iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
自我挑戰組

日常任務成長紀錄系列 第 2

DB 常見dataType 介紹

  • 為什麼要寫這篇?

    專案開發過程中,常會需要設計schema,建立新的table,由於我是自學轉職的,所以其實對於什麼型別的特性與佔用空間沒什麼概念,以前只是覺得型別不就是 字串、數字、日期嗎,但隨著經驗累積,發現原來在這之下還有許多更細緻的型別,適用在不同情況,還有更進階的設計,而給與column適當的型別,對於正確性、效能也是有影響的,我們總會希望產品能夠好好的,在不同情況下都能運作正常,因此在前期設計的時候就滿重要的,以下是整理目前我常用且對於這些型別的理解,或許沒有到太深,但我秉持著夠用就好,能夠判別就好,如果後續有情境需要了解更深再了解囉~(ps: 以下是 postgresql 的例子)

  • 有什麼重點呢?

    • Bit vs Byte ?

      Bit(位元)、Byte(位元組),1 Byte = 8 Bits

      Bit 為電腦運算的基礎,常用來作資料傳輸的單位,二進制(ex. 資料傳輸 用 bps = bit per second)

      Byte電腦檔案大小的基本計算單位(ex. 檔案大小 Byte)

      1byte = 8 Bits = 0~255的數字(二進位) = 一個英文字 = 一個符號 (2byte = 1中文字)

      ref: https://ytliu0.pixnet.net/blog/post/229587764-bit、byte是什麼意思?bit、byte有什麼不同?

    • BigSerial 是什麼?

      結尾為 Serial 皆不是正式型別,而只是方便建立唯一識別的值的語法,該特性是在插入資料時,資料庫會自動對單一筆資料給於順序編號

    • int2 vs. int4(int) vs int8

      後方的數字表示是儲存時佔用的 bytes(ex. int2 = 2bytes 數字範圍 1 to 32767 ),要是儲存資料超過數字範圍,就會出錯.
      目前設計時候會根據實際可能使用到的數字範圍,作為選擇依據
      ref: https://docs.postgresql.tw/the-sql-language/data-types/numeric-types

    • json vs jasonb

      資料欄位還可以是 json ,我第一次知道時真是驚為天人,這個欄位適合儲存重要性低、可能常變動的資料,重要性不足道可以給他一個正式欄位(ex. 說明備註)

      兩者差異?
      jsonb 把資料存進DB時,會多把輸入資料轉換成為二進位格式儲存,因此儲存資料時速度稍慢,但後續取用則不需解析,且增加索引處理功能

      json 資料型別儲存與輸入字串完全相同的內容,處理函數必須在每次執行時重新解析;jsonb 資料型別則以分解後的二進位格式儲存,由於增加了轉換成本,因此資料輸入的速度稍慢,但由於後續不需要解析,因此處理速度明顯加快。jsonb 還支援索引處理,這是一個很大的優勢。

  • 所以呢?

    • 認識型別、與其佔用的空間,可以幫助自己在設計規劃的時候,單筆資料的重量有基本的觀念,我認為這是後續效能優化的基本功
    • 型別形形色色,雖不需要了解到全部,但可以在設計時,多思考這個欄位後續的發展、容錯率等等,藉以選擇最適合的配置,降低出錯,提升效率

上一篇
LibShare-typeOrmGenerator
下一篇
Open API 概念
系列文
日常任務成長紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言