最終還是寫到數據存儲的東西了啊!我對大文件存儲的直接認識是從Google的三大論文裡面瞭解的,感興趣的可以去搜索,三大論文主要講三個實現:Google File System(大文件存儲系統),Big Table(大表),MapReduce(基於大文件的數據統計方法)。Google的大文件系統是閉源的(C++實現),只發布了這些論文,開源的實現是Hadoop(Java語言實現)。Hadoop幾乎是大數據必備的,大數據方面的開發者估計都很熟悉它。
這裡講的是我對大文件存儲的解析、以及自己打算實現一個什麼樣的系統,包含了我對它的簡化處理,簡單說就是「如何用C++手把手實現一個簡化版的大文件系統」。如果不感興趣的可以直接忽略了。
(一)瞭解大文件的目的
(1)讀寫單體大文件(幾百G甚至上T的文件),使用分散式處理提高總體的處理效率
(2)容災,某個或幾個機器宕機仍然可以保持文件完整,並且能自動拷貝丟失的備份
目前單體機器是很難處理上T的大文件的,不管是受限於物理帶寬還是內存、CPU,或者從容災上面考量,這不是一個好方案。於是大文件系統應運而生,這就是一個最典型的分散式文件系統。一個大文件,被分解成為多個段落(chunk,大小上限64M),這些chunk就是一個普通文件,記錄在機器的文件系統裡面。每一個chunk會有3個或者多個備份,而且每一個chunk備份都部署在不同的機器上面。
(二)大致實現機制
(1)根據不同的功能,分成三個服務模塊:master,node(chunkserver),client
(2)主要數據結構包含:node的IP地址、chunk元數據、文件chunk列表數據