iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
Software Development

NoSQL: Not Only SQL系列 第 8

[Day 8] Partiton & Sharding 資料分片

  • 分享至 

  • xImage
  •  

前面幾篇討論如何透過多台主機突破運算力限制,接著來談談如何切分資料存放在多台主機。資料太多怎麼辦?切!切分方式分成水平和垂直兩種,垂直切分 (vertical partition) 是將部分結構切割出去成為獨立的實體;水平切分(horizontal partition, sharding) 則是每一筆資料仍有完整的內容,但不同筆資料可能存放在不同地方,通常是在不同主機。

需要注意的是在看文章或討論時 partition 和 sharding 滿常混用的,務必留意前後文避免誤會。

當資料被切分後就可以分開存放,最理想的情況是每一次的查詢都只要讀取一次,不必跨表也不用跨主機,因此切分資料的策略就很重要了。如果一筆資訊中,部分的欄位常常被一起存取,其他欄位則否,這種情形適合垂直切分,將一個大結構依照常用的欄位切分成幾個小結構。

Id 姓名 性別 生日 Email 電話 自介 興趣 是否接收推播通知 職業 年資
1 Andy M 1990.01.01 andy@mail.com 123456 嗨~我是安迪! 打電動 True 業務 3年
2 Betty F 1990.01.01 betty@mail.com 123456 嗨~我是Betty! 看電影 True 作家 7年
3 Cathy F 1990.01.01 cathy@mail.com 123456 嗨~我是凱西! 唱歌 False 警察 5年
4 Dan M 1990.01.01 dan@mail.com 123456 嗨~我是丹! 露營 True 外送員 2年

例如上面的會員資訊表,在系統中多數畫面顯示的只有姓名、性別和Email,其餘欄位就可以切割出去成為另一張表。

Id 姓名 性別 Email
1 Andy M andy@mail.com
2 Betty F betty@mail.com
3 Cathy F cathy@mail.com
4 Dan M dan@mail.com
Id 生日 電話 自介 興趣 是否接收推播通知 職業 年資
1 1990.01.01 123456 嗨~我是安迪! 打電動 True 業務 3年
2 1990.01.01 123456 嗨~我是Betty! 看電影 True 作家 7年
3 1990.01.01 123456 嗨~我是凱西! 唱歌 False 警察 5年
4 1990.01.01 123456 嗨~我是丹! 露營 True 外送員 2年

若是進行水平切分則會依切分策略拆成數張不同的表。

Id 姓名 性別 生日 Email 電話 自介 興趣 是否接收推播通知 職業 年資
1 Andy M 1990.01.01 andy@mail.com 123456 嗨~我是安迪! 打電動 True 業務 3年
Id 姓名 性別 生日 Email 電話 自介 興趣 是否接收推播通知 職業 年資
2 Betty F 1990.01.01 betty@mail.com 123456 嗨~我是Betty! 看電影 True 作家 7年
3 Cathy F 1990.01.01 cathy@mail.com 123456 嗨~我是凱西! 唱歌 False 警察 5年
Id 姓名 性別 生日 Email 電話 自介 興趣 是否接收推播通知 職業 年資
4 Dan M 1990.01.01 dan@mail.com 123456 嗨~我是丹! 露營 True 外送員 2年

再搭配上 Master-Slave 就會變成下面的架構。

https://ithelp.ithome.com.tw/upload/images/20220910/20151137IODHxD4MOb.png


上一篇
[Day 7] Peer-to-peer Replication 點對點複製
下一篇
[Day 9] Range-based Sharding
系列文
NoSQL: Not Only SQL30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言