官术网_书友最值得收藏!

1.3 數據分片

在大數據環境下,數據量已經由GB級別跨越到PB級別,依靠單臺計算機已經無法存儲與處理如此規模的數據,唯一的出路,是采用大規模集群來對這些數據進行存儲和處理,所以,系統的可擴展性成為衡量系統優劣的關鍵因素。

傳統關系數據庫系統為了支持更多的數據,采用縱向擴展(Scale Up)的方式,即不增加機器數量,而是通過改善單機硬件資源配置,來解決問題。如今這種方式已經行不通了。

目前主流的大數據存儲與計算系統通常采用橫向擴展(Scale Out)的方式支持系統可擴展性,即通過增加機器數目來獲得水平擴展能力。與此對應,對于待存儲處理的海量數據,需要通過數據分片(Shard/Partition)來對數據進行切分并分配到各個機器中去,通過數據分片實現系統的水平擴展。

目前,大規模存儲與計算系統都是采用普通商用服務器來作為硬件資源池的,系統故障被認為是常態。因此,與數據分片密切相關的是數據復制,通過數據復制來保證數據的高可用性。數據復制是將同一份數據復制存儲在多臺計算機中,以保證數據在故障常發環境下仍然可用。從數據復制還可以獲得另一個好處,即可以增加讀操作的效率,客戶端可以從多個備份數據中選擇物理距離較近的進行讀取,既增加了讀操作的并發性,又可以提高單次的讀取效率。

數據復制帶來的難題是如何保證數據的一致性。由于每份數據存在多個副本,在并發地對數據進行更新時,如何保證數據的一致性就成為關鍵問題。

可以將數據分片的通用模型看作是一個二級映射關系。第一級映射是key-partition映射,即把數據記錄映射到數據分片空間,通常,一個數據分片包含多條記錄數據;第二級映射是partition-machine映射,把數據分片映射到物理機器中,即一臺物理機器通常可以容納多個數據分片。

在做數據分片時,根據key-partition關系,將數據水平切割成眾多數據分片,然后再按照partition-machine映射關系,將數據分片存儲到對應的物理機器上。而在做數據訪問時,比如要查找某條記錄的值Get(key),首先根據key-partition映射找到對應的數據分片,然后再查找partition-machine關系表,就可以找到哪臺物理機器存儲該條數據,之后,即可從相應的物理機器讀取key對應的value內容了。

數據分片有兩種常用策略:哈希分片與范圍分片。對于哈希分片來說,因為其主要通過哈希函數來建立key-partition映射關系,因此,哈希分片只支持“單點查詢”(Point Query),即根據某個記錄的主鍵(key)獲得記錄內容,而無法支持“范圍查詢”(Range Query),即指定記錄的主鍵范圍,一次讀取多條滿足條件的記錄。采取哈希分片的實際系統眾多,大多數KV(key-value,鍵值)存儲系統都支持這種方式。

與此相對應地,范圍分片的系統則既可以支持單點查詢,也可以支持范圍查詢。范圍分片首先對所有記錄的主鍵進行排序,然后在排好序的主鍵空間里將記錄劃分成數據分片,每個數據分片存儲有序的主鍵空間片段內的所有記錄。

主站蜘蛛池模板: 错那县| 东辽县| 剑阁县| 蒲江县| 阿瓦提县| 湟中县| 双城市| 双鸭山市| 荥经县| 志丹县| 安龙县| 西青区| 额济纳旗| 绥芬河市| 朝阳区| 延川县| 华容县| 哈密市| 陆良县| 盐津县| 如东县| 台北市| 眉山市| 南江县| 侯马市| 南投县| 项城市| 新巴尔虎右旗| 黄冈市| 深州市| 永吉县| 鲁山县| 西城区| 肥东县| 玉林市| 石嘴山市| 科技| 定远县| 施秉县| 秦安县| 滦平县|