在傳統的數據庫技術中,爲了保證數據的安全與高性能,一般會選擇高端的外置存儲做爲數據庫的主要存儲源,而本地磁盤則被視爲不可靠的性能低下的一種設備。這種觀念的產生,主要是因爲過去本地磁盤的生產技術存在必定的瓶頸,而且其穩定性和性能確實都遠落後於高端存儲。php
互聯網應用迅猛發展
在過去, IT行業的發展遠沒有如今蓬勃,你們更多的是在家裏或者辦公室經過桌面級設備上網查詢資料和瀏覽世界各種時事新聞。在這樣的時代背景下,互聯網企業和像銀行、通信類公司這種對IT部門十分依賴的傳統企業,一臺小型機和一個優秀的關係型數據庫就可以很好的處理企業內部多個系統之間的數據了。數據庫
可是在最近10年,甚至更短的時間裏,每一個人手中都擁有了一部或者多部智能移動終端,它們除了可以打電話、發短信,也可以像筆記本電腦同樣,上網、玩遊戲、購物、聊天。各類智能應用和業務場景也被開發者發掘出來了,這些新穎的應用也正在被大部分消費者所接受。安全
硬件成本大大下降
一臺小型機+一個優秀的關係型數據庫已經愈來愈不能知足IT部門對急速膨脹的數據量的處理需求了,重要一個緣由,傳統的數據庫技術沒法作到方便快捷地將海量數據分配給多臺服務器去計算,而永遠只能經過垂直擴容硬件的方式提高系統性能。服務器
通過這10幾年的發展,過去不被企業承認的磁盤技術有了很大的進步,從SATA磁盤到SAS磁盤,從機械磁盤到SSD磁盤,技術的進步,使得本地磁盤的穩定性和讀寫性能都有了很是大的提高。它們也逐漸被企業使用在重要的生產環境中。架構
分佈式大數據技術革新
與磁盤技術同時發展起來的,還有各類大數據技術。先有谷歌的三篇著名論文,後有各類技術特色的NoSQL/NewSQL數據庫。它們的技術實現,都是基於廉價的X86服務器和本次磁盤做爲主要的硬件服務器而設計。分佈式
而且各類NoSQL/NewSQL數據庫的技術特色,都包含了數據分佈式存儲的功能技術,以解決當前企業數據量快速膨脹,客戶對IT系統的相應時間要求愈來愈高的技術難題。性能
Hash 方式分佈數據大數據
數據庫Hash方式分佈數據,原理就是用戶在創建集合時,指定此集合的切分方式爲Hash,而且顯式指定ShardingKey 爲記錄中哪一個字段。
圖1spa
當應用APP向數據庫發送寫入記錄的請求時,首先會將記錄與請求發送到數據庫的Coord節點,Coord節點會根據此集合的切分方式,例如ShardingKey=id,ShardingType=Hash,以及記錄中ShardingKey的Hash值,判斷應該將此記錄分發給哪一個數據分區組。一旦數據分區組接收到寫入記錄請求與寫入的數據信息,數據分區組會調用數據庫中相應的方法將此記錄持久化到磁盤上,而且同時更新此數據分區組中對應集合的索引數據。設計
Range 方式分佈數據
數據庫Range方式分佈數據,原理就是用戶在創建集合時,指定此集合的切分方式爲Range,而且顯式指定ShardingKey 爲記錄中哪一個字段。
圖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。
圖3
在通常狀況下,用戶創建一個集合,此集合會隨機被分配到某個數據分區組上。若是用戶要利用主子表功能來實現數據的分佈式存儲,還需一些小技巧。用戶在創建集合時,能夠經過顯式指定此集合被分配到哪一個數據分區組上,從而避免sub collection扎堆在某個數據分區組上。
用戶最後一個步驟就是給每一個sub collection 劃定範圍分區,而後將各個sub collection attach到main collection 上。
多維分區
在SequoiaDB數據庫多種分佈式原理上,最爲複雜和最爲高效的方法,就是數據多維分區。多維分區,顧名思義,就是在對集合作數據分區時,不止一種分區方式同時做用在一個集合上。
如圖4 ,多維分區實際上就是主子表和Hash分區相結合的一種方式。
圖4
目前SequoiaDB的多維分區能夠爲一個集合提供兩個字段的作分區。通常狀況下,用戶能夠在主子表中對time字段作範圍切分,而後再對sub collection 的id字段作Hash切分。
用戶使用多維分區的方式,主要的優點在於能夠將一個海量數據的集合以更加小的顆粒度作數據均衡,以提高數據庫的性能。
用戶在使用多維分區功能時,還能夠結合數據庫的Domain 功能,來更好地處理數據分區任務。
圖5
Domain,就是數據庫將多個數據分區組整合在一塊兒的一個邏輯域,用戶能夠在創建集合空間時直接指定此集合空間屬於哪一個Domain上,而後基於此集合空間創建的集合,只要是ShardingType=Hash的,數據庫就會自動將此集合按照ShardingKey的Hash 值分發給屬於此Domain的數據分區組。
*分佈式架構是將來大數據甚至全部互聯網應用的大勢所趨,而對於海量數據的存儲和管理,分佈式架構自然具備高性能、高可用等等核心優點點。
SequoiaDB巨杉數據庫提供的多種數據分佈/分區功能,不只在存儲架構上提供了多樣化的選擇,知足了更多大數據應用場景下的需求。同時,經過咱們的「主子表」、「多維分區」等數據分區功能,在知足業務需求同時還大大的提高了系統的性能。*