天天看點

資料庫必知詞彙:Sharding

分片(Sharding)的核心理念基于一個想法:資料庫大小以及資料庫上每單元時間内的交易數呈線型增長,查詢資料庫的響應時間(Response time)以指數方式增長。Sharding的基本思想就要把一個資料庫切分成多個部分放到不同的資料庫(server)上,進而緩解單一資料庫的性能問題。

另外,在一個地方建立和維護一個大型資料庫的成本會成指數增長,因為資料庫将需要高端的計算機。相反地,資料碎片可以分布到大量便宜得多的商用伺服器上。就硬體和軟體要求而言,資料碎片相對來說沒什麼限制。

在某些情況中,資料庫分片(Sharding)可以很簡單地完成。按地理位置拆分使用者資料庫就是一個常見的例子。位于東海岸的使用者被分到一台伺服器上,在西海岸的使用者被分在另一台伺服器上。假設沒有使用者有多個地理位置,這種分區很易于維護和建立規則。但是資料分片(Sharding)在某些情況下會是更為複雜的過程。例如,一個資料庫持有很少結構化資料,分片它就可能非常複雜,并且結果碎片可能會很難維護。

任何技術都是在合适的場合下能發揮應有的作用。 Sharding 也一樣。聯機遊戲、IM、BSP 都是比較适合 Sharding 的應用場景。其共性是抽象出來的資料對象之間的關聯資料很小。比如IM ,每個使用者如果抽象成一個資料對象,完全可以獨立存儲在任何一個地方,資料對象是 Share Nothing 的;再比如 Blog 服務提供商的站點内容,基本為使用者生成内容(UGC),完全可以把不同的使用者隔離到不同的存儲集合,而對使用者來說是透明的。

不太嚴格的講,對于海量資料的資料庫,如果是因為表多而資料多,這時候适合使用垂直切分,即把關系緊密(比如同一子產品)的表切分出來放在一個Server上。如果表并不多,但每張表的資料非常多,這時候适合水準切分,即把表的資料按某種規則(比如按ID散列)切分到多個資料庫(Server)上。當然,現實中更多是這兩種情況混雜在一起,這時候需要根據實際情況做出選擇,也可能會綜合使用垂直與水準切分,進而将原有資料庫切分成類似矩陣一樣可以無限擴充的資料庫(Server)陣列。

資料來源:

分片:sharding

https://searchcloudcomputing.techtarget.com.cn/whatis/5-8540/

簡朝陽. MySQL 性能調優與架構設計[M]. 電子工業出版社, 2009.

資料庫Sharding的基本思想和切分政策

https://blog.csdn.net/bluishglc/article/details/6161475