iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
Software Development

ScyllaDB實作紀錄系列 第 14

Day14 DataModel - Primary Key(你以為結束了嗎)

  • 分享至 

  • xImage
  •  

如何選擇適當的Primary Key?這對使用Scylla或者是其他非關聯性資料庫的人,都是一個不容易的課題。
與關聯性資料庫不同的地方,Scylla再設計一張table的時候,應該要先從會使用的查詢語法下手。
在一開始接觸的時候,的確是很難跳出原本的觀念來設計,我們用例子來解釋為何要這樣設計。
今天如果需要統計枕頭山上A觀測站每天觀察到的平均氣溫,每半小時紀錄一次。
我們依據需求建立了PilloHillT這個表格,包括了觀測站代碼id,觀測站名稱name,日期date,紀錄時間time四個欄位,然後我們使用id當作partition key,而time當成cluster key。
https://ithelp.ithome.com.tw/upload/images/20200909/20113220GWXP4FkUhM.png
以這樣設計的方式,在id=1這個partition裡頭,一天會有48筆紀錄,一年兩年過去,這個partition最後會儲存大量的數據。產生了large_partition。
雖然我們依然可以使用time當成時間區間條件去過濾我們要的資料,但是會面臨越來越多的資料筆數,以及越來越差的查詢效能。


接著我們用另一個方式來設計這張表,這次我們用id與date當成parititon key。
https://ithelp.ithome.com.tw/upload/images/20200909/20113220FiPRF5Wz8q.png
這樣的設計下,我們一樣可以用time去過濾條件,但是因為partition key是由id與date組成,所以只要過濾一天的資料。


Scylla會把產生large_partition的情況紀錄在system.large_partitions裡頭,做好初期的規劃,避免large_partition的產生,可以降低資料庫上線之後,監控圖上的latency突然一個衝高導致偏頭痛的頻率。


上一篇
Day13 DataModel - Primary Key(下)
下一篇
Day15 DataModel - Data Types
系列文
ScyllaDB實作紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言