現在是國内淩晨3點,為了抵擋睡意,還是寫寫技術部落格。今天和大家讨論下大資料倉庫中的更新技術。
目前很多大資料技術,如HDFS最早設定的是資料不更新,隻增量疊加。傳統資料倉庫(Greenplum,treadata,oracle RAC)通常碰到兩個問題:
1、 更新的throughput不高。主要影響原因有兩點,鎖的原因,還有更新通常是随機IO,很難充分利用硬碟高吞吐的優勢。
2、 更新影響查詢。更新把IO占住,查詢的體驗急劇下降。
為了解決這個問題,Google的Mesa系統設計了一個MVCC的資料模型,通過增量更新和合并技術。将離散的更新IO轉變成批量IO,平衡了查詢和更新的沖突,提高了更新的吞吐量。
Mesa設計了一個多版本管理技術來解決更新的問題:
1、 使用二維表來管理資料,每個表要制定schma,類似傳統資料庫。
2、 每個字段用KeyValue來管理。Schema就是是key的集合,指向value的集合。
3、 每個字段指定一個聚合函數F。(最常見的是SUM)
4、 資料更新進來的時候,按照MVCC增量更新,并給增量更新指定一個版本号N,和謂詞P。
5、 查詢進來的時候,自動識别聚合函數,把所有版本的更新按照聚合函數自動計算出來。

6、 多版本如果永遠不合并,存儲的代價會非常大,而且因為每次查詢需要周遊所有版本号,是以版本過多會影響查詢,是以定期的合并是自然而然的。