【技術解密】SequoiaDB分散式儲存原理

SequoiaDB發表於2016-11-09

分散式架構勢在必行

在傳統的資料庫技術中,為了保證資料的安全與高效能,通常會選擇高階的外接儲存作為資料庫的主要儲存源,而本地磁碟則被視為不可靠的效能低下的一種裝置。這種觀念的產生,主要是由於過去本地磁碟的生產技術存在一定的瓶頸,並且其穩定性和效能確實都遠落後於高階儲存。

網際網路應用迅猛發展

在過去, IT行業的發展遠沒有現在蓬勃,大家更多的是在家裡或者辦公室通過桌面級裝置上網查詢資料和瀏覽世界各類時事新聞。在這樣的時代背景下,網際網路企業和像銀行、通訊類公司這種對IT部門十分依賴的傳統企業,一臺小型機和一個優秀的關係型資料庫就能夠很好的處理企業內部多個系統之間的資料了。

但是在最近10年,甚至更短的時間裡,每個人手中都擁有了一部或者多部智慧移動終端,它們除了能夠打電話、發簡訊,也能夠像膝上型電腦一樣,上網、玩遊戲、購物、聊天。各種智慧應用和業務場景也被開發者發掘出來了,這些新穎的應用也正在被大部分消費者所接受。

硬體成本大大降低

一臺小型機+一個優秀的關係型資料庫已經越來越不能滿足IT部門對急速膨脹的資料量的處理需求了,重要一個原因,傳統的資料庫技術無法做到方便快捷地將海量資料分配給多臺伺服器去計算,而永遠只能通過垂直擴容硬體的方式提升系統效能。

經過這10幾年的發展,過去不被企業認可的磁碟技術有了很大的進步,從SATA磁碟到SAS磁碟,從機械磁碟到SSD磁碟,技術的進步,使得本地磁碟的穩定性和讀寫效能都有了非常大的提升。它們也逐漸被企業使用在重要的生產環境中。

分散式大資料技術革新

與磁碟技術同時發展起來的,還有各種大資料技術。先有谷歌的三篇著名論文,後有各種技術特點的NoSQL/NewSQL資料庫。它們的技術實現,都是基於廉價的X86伺服器和本次磁碟作為主要的硬體伺服器而設計。

並且各種NoSQL/NewSQL資料庫的技術特點,都包含了資料分散式儲存的功能技術,以解決當前企業資料量快速膨脹,客戶對IT系統的相應時間要求越來越高的技術難題。

資料庫分散式原理介紹

Hash 方式分佈資料

資料庫Hash方式分佈資料,原理就是使用者在建立集合時,指定此集合的切分方式為Hash,並且顯式指定ShardingKey 為記錄中哪個欄位。

enter image description here

圖1

當應用APP向資料庫傳送寫入記錄的請求時,首先會將記錄與請求傳送到資料庫的Coord節點,Coord節點會根據此集合的切分方式,例如ShardingKey=id,ShardingType=Hash,以及記錄中ShardingKey的Hash值,判斷應該將此記錄分發給哪個資料分割槽組。一旦資料分割槽組接收到寫入記錄請求與寫入的資料資訊,資料分割槽組會呼叫資料庫中相應的方法將此記錄持久化到磁碟上,並且同時更新此資料分割槽組中對應集合的索引資料。

Range 方式分佈資料

資料庫Range方式分佈資料,原理就是使用者在建立集合時,指定此集合的切分方式為Range,並且顯式指定ShardingKey 為記錄中哪個欄位。

enter image description here

圖2

當應用APP向資料庫傳送寫入記錄的請求時,首先會將記錄與請求傳送到資料庫的Coord節點,Coord節點會根據此集合的切分方式,例如ShardingKey=id,ShardingType=Range,以及記錄中ShardingKey的值,判斷此記錄是屬於哪個範圍的資料分割槽組,然後再將此記錄傳送給對應的資料分割槽組。一旦資料分割槽組接收到寫入記錄請求與寫入的資料資訊,資料分割槽組會呼叫資料庫中相應的方法將此記錄持久化到磁碟上,並且同時更新此資料分割槽組中對應集合的索引資料。

Partition 方式分佈資料

在SequoiaDB資料庫中,對比其他的NoSQL資料庫的簡單資料切分功能,使用了“主子表”的功能,這個功能與部分關係型資料庫的Partition功能類似,都是在資料庫中建立一張邏輯的總檢視,然後將多個Partition通過某個欄位的範圍限定掛載到總檢視上。

通過“主子表”這種分散式方式,使用者可以按照需求對於資料進行更好、更細化的切分工作。同時,類似於時間序中或冷熱資料可以做到天然的切分,這樣更有利於硬體資源的充分利用。

在SequoiaDB中,main collection 對應關係型資料庫的總檢視,sub collection 對應關係型資料庫的partition。而SequoiaDB資料庫中,比較特殊的是,sub collection 實際上就是一個普通的集合,而main collection 則是隻存在於資料庫的編目節點中,並不會在任何資料分割槽組中寫入任何資料。

使用者基本可以理解為main collection為邏輯檢視,只在編目節點中保留一些資料範圍資訊,而sub collection 則是資料庫中普通建立的集合,只是在配合main collection 一起使用時,才被稱呼為sub collection。

enter image description here

圖3

在一般情況下,使用者建立一個集合,此集合會隨機被分配到某個資料分割槽組上。如果使用者要利用主子表功能來實現資料的分散式儲存,還需一些小技巧。使用者在建立集合時,可以通過顯式指定此集合被分配到哪個資料分割槽組上,從而避免sub collection扎堆在某個資料分割槽組上。

使用者最後一個步驟就是給每個sub collection 劃定範圍分割槽,然後將各個sub collection attach到main collection 上。

多維分割槽

在SequoiaDB資料庫多種分散式原理上,最為複雜和最為高效的方法,就是資料多維分割槽。多維分割槽,顧名思義,就是在對集合做資料分割槽時,不止一種分割槽方式同時作用在一個集合上。 如圖4 ,多維分割槽實際上就是主子表和Hash分割槽相結合的一種方式。

enter image description here

圖4

目前SequoiaDB的多維分割槽可以為一個集合提供兩個欄位的做分割槽。一般情況下,使用者可以在主子表中對time欄位做範圍切分,然後再對sub collection 的id欄位做Hash切分。

使用者使用多維分割槽的方式,主要的優勢在於可以將一個海量資料的集合以更加小的顆粒度做資料均衡,以提升資料庫的效能。

使用者在使用多維分割槽功能時,還可以結合資料庫的Domain 功能,來更好地處理資料分割槽任務。

enter image description here

圖5

Domain,就是資料庫將多個資料分割槽組整合在一起的一個邏輯域,使用者可以在建立集合空間時直接指定此集合空間屬於哪個Domain上,然後基於此集合空間建立的集合,只要是ShardingType=Hash的,資料庫就會自動將此集合按照ShardingKey的Hash 值分發給屬於此Domain的資料分割槽組。

SequoiaDB巨杉資料庫2.6最新版下載

SequoiaDB巨杉資料庫技術部落格

SequoiaDB巨杉資料庫社群

enter image description here

相關文章