一英裏不是個很長的距離,一立方英裏相對於地球也不會讓人覺得是個很大的空間。然後我說,這個空間內能裝下全世界所有人,你會不會覺到很驚訝?其實不過這話不是我說的,是美國作家房龍寫的。
業內有個著名的數據倉庫產品,叫 Teradata,30 多年前起這個名字,顯然是想給人能處理海量數據的感覺。然而現在,很多數據庫廠商談起可處理數據量時,TB 已經是最小單位了,經常說到 PB 甚至 ZB 級別。似乎 T 不是個多大的數,幾百 T 上 P 也沒什麼大不了的。
其實 T 有點象上麵說的立方英裏,是個挺大的數。很多人對它沒有多深的感性認識,我們要換個角度來看 1T 數據對於數據庫意味著什麼。
數據庫主要處理結構化數據,其中占據空間最大的是不斷增長的交易類數據,這種數據每條並不大,精簡地存儲大概隻要幾十到 100 字節,比如銀行交易隻要記下帳號、日期、金額;電信的通話記錄也隻是通話號碼、時刻、時長等。先按 100 字節算,也就是 0.1K,那麼 1T 空間就可以放下多少呢,大概 100 億條!
這是什麼概念呢?一年大概是 3000 多萬秒,如果用一年時間來積累 1T 數據,那意味著每秒要產生約 300 筆記錄,24 小時不停息!
這個數也不算大,象中國這樣的大國,電信運營商、全國級銀行以及大型互聯公司都不難有這種規模的業務量。但對於一個城市級別以及有些省級機構就是個不小的數了,比如稅務部門采集的企業交稅信息、連鎖超市的商品購買數據、城市商業銀行的交易記錄等,要達到平均 300 筆 / 秒並不容易,很多機構隻有白天或工作日才能產生數據。而且這還隻是 1T,要搞到幾十幾百 T,那就得讓業務量再上一兩個數量級才行。
簡單說有多少 T 數據是沒什麼感覺的,換算成每秒對應的業務量後,才知道到底意味著什麼。
有些不算頂級頭部的機構確實也有幾百 T 以及 PB 級的數據量,這又是怎麼回事呢?
圖像音視頻這種非結構化數據,隨便一條就幾 M 幾十 M,衝到 PB 很容易;但這些數據不會放在數據庫中計算。
機構中各個業務係統 N 年的數據,這個一年二百 G,那個一年五十 G,再有些計算出來的冗餘中間結果,東加西加,積累到幾百 TB 上 PB 的總量也是可能的。這些數據可能存儲在數據庫中,但通常並不會在同一個計算任務中同時出現。
設備自動采集的數據或者用戶的行為數據,每秒產生幾百條甚至上萬條也正常,一年下來也可能有幾百 T 到 PB 級。這個場景確實需要數據庫能處理比 TB 級以及更大的數據量了,但這種平凡數據用處很少,計算邏輯也非常簡單,基本上就是找到取出。
那麼我們再來看看,能處理 TB 級數據量的數據庫會什麼樣子的呢?有些數據庫廠商宣稱能在數秒內處理 TB 甚至 PB 級數據,用戶經常也這樣期望,這是真地嗎?
要處理數據,起碼都要讀一遍吧。我們按高速的固態硬盤計算,每秒能讀 300M(不能看硬盤廠商標的數,在操作係統中根本達不到),那麼 1T 數據隻是讀取不做任何運算也需要 3000 秒,接近一小時!怎麼可能數秒內處理 1T 數據呢?很簡單,搞 1000 塊硬盤,就可以在 3 秒左右讀出 1T 數據了。
這是理想的估算。實際上數據不大可能存放著那麼整齊,硬盤不連續讀取時性能下降嚴重;1000 塊硬盤顯然不會在一台機器上,那集群還有網絡延遲,有些運算可能還有回寫動作,比如排序和關聯等,秒級訪問常常還會有並發需求,這些因素綜合起來,再慢幾倍也是正常的。
也就是說,1T 數據可能意味著幾個小時,或者幾千塊硬盤。而且還是前麵的話,這隻算了 1T,可想而知幾十上百 T 會是什麼概念了。
大家如果有網上傳輸文件的經驗也能知道,搬動 1T 數據現在也是很難的,最快的辦法很可能是拿著硬盤走。這也能體會到 1T 真地很大。
其實,絕大多數用戶的絕大多數計算任務涉及的數據量上限也就是幾十 G 到幾百 G 的規模,達到 TB 級的很少,而這,也常常會讓分布式數據庫跑出幾個小時了,大家可以回看一下自己手上那麼跑得很慢的任務是不是這樣。因為計算邏輯可能很複雜,出現反複遍曆和回寫的情況並不罕見,實際在跑的分布式數據庫節點數通常就幾個到十幾個而已,真不容易造出幾千塊硬盤的環境。這時候算上幾個小時一點也不奇怪,這幾乎是金融業跑批任務的常態。
即使那些頭部大機構,總數據量真有 N 個 PB 的,計算中心也有幾千上萬個節點,但大部分任務也還是這種幾十到幾百 G 規模的,分配給某個任務的虛擬機數量也還是 10 個左右,機構大了,事也多,不可能把資源都分給一個任務了。
PB 級數據量在許多機構中是真實存在的,但主要是個存儲概念,而不是計算需求。總數據量達到 PB 級,就需要 PB 級處理能力的數據庫,這是數據庫封閉性缺陷導致的惡果,存在並不意味著合理,事實上是個糟糕的解決方案,這個話題我們以後再專門講。
1TB 對於用於分析計算的數據庫來講,是個很大的數據量,Teradata 這個名字,今天也不算過時。能流暢計算 TB 級規模的數據量,比如能把幾小時縮減到幾分鍾,優化用戶體驗;或者能把小規模分布式環境簡化到單機,從而大幅降低運維成本,已經很有意義了。有个开源的 esProc SPL好像可以。
追求 PB 級的計算能力,對於絕大多數用戶場景而言,即沒必要也不現實。