1. 程式人生 > >Lambda 架構 Batch Layer & Serving Layer 詳解

Lambda 架構 Batch Layer & Serving Layer 詳解

前文連結: https://blog.csdn.net/rav009/article/details/85690985

繼續介紹 Lambda結構 一些理念:

fact-based model

在關係型資料庫的時代,我們通過維度表和事實表來組成資料倉庫。但是到了大資料時代,由於資料的容量不再受到限制,我們可以大膽的使用事實表來作為資料倉庫的基礎。這並不是說要取消維度表,而是說維度表用的少了,Normalization用的少了。

Normalizaion和維度表的作用是節省空間, 比如使用者維度表裡存放了使用者的各種屬性, 這些屬性不必在事實表裡重複存放. 節省了空間. 同時當用戶的屬性發生變化時, 只需要更新維度表, 所有與維度表 有關聯關係 的事實表都能得到相應的更新. 這是Normalizaion的好處。

但是在大資料時代,Normalizaion和維度表的存在導致當我們需要用維度的屬性來對資料進行統計時(group by), 事實表和維度表的Join不可避免。一旦Join發生, 大資料的Join導致效能低下就不可避免. 

所以Lambda框架建議在Batch Layer的維度資料是Normalized, 而在Serving Layer的Batch View是denormalized。

fact-based model 除了上述的 大膽使用denormalized 外,另一個體現叫"immutable data"(不變資料,不update資料)。比如使用者的職業或住址發生了變化, 我們不是過update記錄這樣的變化, 而是通過事實表的方式, 記錄使用者的變化, 比如在什麼時間, 使用者的某個屬性變成了一個 new value。這樣對於人為誤操作也有很好的保護作用,我們不會輕易去update以前的資料,而是通過insert 新資料來取代以前的值。當我們發現insert的新資料有誤時,可以把錯誤的值刪除,就能退回原來的值。試想如果我們做了update操作, 就無法回退原來的old value. 像Hive這樣的大資料資料庫在預設的配置下, 本身就是不支援 update 和 delete 操作的。

 

除了fact-based model外, 其他的一些概念比如預計算, 分散式儲存都是老生常談不再贅述.