《大數(shù)據(jù)之路》讀書筆記:維度設(shè)計(jì)(續(xù))

接上一篇:《大數(shù)據(jù)之路》讀書筆記:維度設(shè)計(jì)

緩慢變化維

這個應(yīng)該是知名度最高的扫步,“緩慢變化”也是經(jīng)常會被提起的一個場景魔策。隨著時間的變化,有一些維度是會變的河胎,就像商品維度闯袒,經(jīng)常有新商品上架,有商品下架,所以要看某一天在線的商品政敢,就需要用緩慢變化維的方式來處理其徙。
反映歷史變化也是數(shù)倉的特性之一,為了應(yīng)對這種變化喷户,有幾種處理方式:

  1. 重寫維度值
    如果我不關(guān)心歷史數(shù)據(jù)唾那,當(dāng)屬性變化了,那我就看最新的數(shù)據(jù)褪尝,不管歷史是什么的話闹获,我就可以直接去更新維度數(shù)據(jù)。
    比如商品A河哑,它原來叫礦泉水避诽,后來改成礦物質(zhì)水,直接更新就好了灾馒,這時候維度表會只存有一份最新的數(shù)據(jù)茎用。

  2. 插入新的維度行
    當(dāng)我們需要關(guān)注維度的歷史數(shù)據(jù)的時候,我們就不能采取直接更新的方式了睬罗,我們可以通過新增記錄的方式來解決轨功,這樣老的數(shù)據(jù)還在,新的數(shù)據(jù)也有容达。
    這里要注意的是唯一建的問題古涧,業(yè)務(wù)系統(tǒng)在更新維度信息的時候,很可能是直接更新掉花盐,數(shù)倉中需要維護(hù)歷史數(shù)據(jù)羡滑,所以在新增記錄的時候如果沒有代理鍵,要注意key值的唯一性算芯,這種方法一般是需要代理鍵的柒昏,像上面說的商品修改名稱,商品的業(yè)務(wù)key可能還是101熙揍,但是數(shù)倉中需要使用代理鍵來保證key值一致职祷,但是代理鍵不同,這樣才可以讓事實(shí)表中的數(shù)據(jù)老數(shù)據(jù)使用老的代理鍵届囚,新數(shù)據(jù)使用新的代理鍵有梆。
    這種方式也會有些問題,就是單獨(dú)來看維度數(shù)據(jù)的話意系,同一個商品會有多條記錄泥耀,會產(chǎn)生歧義;還有一點(diǎn)就是從維度表中可能看不出來記錄的變化過程蛔添,并不清楚某一天該商品到底是哪一條記錄為準(zhǔn)痰催,因?yàn)樽兓奶卣鞫荚谑聦?shí)表中兜辞。

  3. 添加維度列
    這個算是一種延伸的方法,類似方法一陨囊,為了讓方法一可以存歷史數(shù)據(jù)弦疮,除了新增記錄(縱向),還可以采用橫向的方式蜘醋,就是新增字段(列)胁塞,來記錄變化前的記錄,這樣通過一條記錄压语,就可以記錄商品變化前和變化后的數(shù)據(jù)了啸罢。
    這樣可以保證key值唯一,但是缺點(diǎn)也顯而易見胎食,只能記錄有限次數(shù)的變化扰才,而且要提前規(guī)劃好,保留幾次歷史記錄厕怜。

  4. 拉鏈表
    還有一種常用的方式是拉鏈表衩匣,這種方式類似第2種方法,算是拓展版粥航,也有點(diǎn)兒麻煩琅捏,簡單來說,就是需要新增兩個字段递雀,start_date柄延,end_date,用來記錄這條就的有效周期缀程,從哪一天開始搜吧,哪一天結(jié)束,使用的時候用這兩個字段一過濾就好了杨凑。

在實(shí)際應(yīng)用時滤奈,還是要考慮業(yè)務(wù)場景,根據(jù)實(shí)際情況選擇撩满,當(dāng)然還有其他的方式僵刮,同樣后面會再更新。

快照維度

上面說到了代理鍵鹦牛,這個東西是很復(fù)雜的,按照維度建模的理論來勇吊,是需要搞一套代理鍵的曼追,而實(shí)際操作起來會增加復(fù)雜度和維護(hù)成本,阿里采用的這種快照方式汉规,也可以解決緩慢變化的問題礼殊。
以商品維度為例驹吮,就是每天都對商品維度生成一個快照,這樣每天的商品信息都有了晶伦,key值也是唯一的碟狞,我想要看哪天的記錄就看哪天,而且非常簡單婚陪,使用也方便族沃,就當(dāng)前存儲價格很便宜,這種方法最實(shí)用泌参,當(dāng)前公司也是使用這種方式脆淹,每天搞個分區(qū),全量的快照沽一,想用最新的就用最新的盖溺,想用歷史的就用歷史的。
當(dāng)然它的缺點(diǎn)也明顯铣缠,就是時間久了烘嘱,歷史數(shù)據(jù)非常龐大,有一定的存儲浪費(fèi)蝗蛙,需要注意對歷史數(shù)據(jù)歸檔或清理蝇庭。

極限存儲

這個應(yīng)該是阿里自己的一套實(shí)踐方案,上面拉鏈表的方式歼郭,有幾個缺點(diǎn)遗契,一個是下游用戶理解起來會稍有問題,需要一些解釋成本病曾,還有一個是使用start_date和end_date做分區(qū)的話牍蜂,會有分區(qū)數(shù)量的限制,為了解決這些問題泰涂,阿里使用極限存儲的方式來解決鲫竞。
首先是在拉鏈表上層做了一層處理,讓下游使用起來和每天一個快照的方式一樣逼蒙,方便使用从绘;
然后是分月做歷史拉鏈表,我感覺書上這里寫的有點(diǎn)兒問題是牢,或者是我還沒理解僵井,詳情看看書吧。


微型維度

微型維度是為了解決維度屬性頻繁變化的問題驳棱,如果維度中有些屬性經(jīng)常會發(fā)生變化批什,可以將他們抽取出來,放到一個新維度表中社搅,我覺這里說的也不是很好驻债,看書中的意思乳规,感覺和下面那個雜項(xiàng)維度差不多,思路是一樣的合呐,這里不過是將頻繁變化的屬性抽取出來暮的,然后通過笛卡爾積生成所有記錄,然后用代理鍵去關(guān)聯(lián)淌实。

遞歸維度

維度的遞歸問題冻辩,一般是業(yè)務(wù)系統(tǒng)中,開發(fā)的同學(xué)會這樣設(shè)計(jì)翩伪。像類目或者組織架構(gòu)這種微猖,一般是有上下級關(guān)系的,除了設(shè)計(jì)成類似雪花那樣的多個表缘屹,還會設(shè)計(jì)成遞歸存儲的這種凛剥,這種維度,到數(shù)倉中轻姿,是需要處理下的犁珠。哦,這里會暈倒兩種類型互亮,一種是“均衡層次結(jié)構(gòu)”犁享,一種是“非均衡層次結(jié)構(gòu)”。

  • 扁平化
    就是將維度數(shù)據(jù)打平豹休,變成一張寬表炊昆,數(shù)據(jù)會冗余,但是使用起來非常方便威根。以商品維度來說凤巨,就是商品ID,商品名稱洛搀、一級品類ID敢茁、一級品類名稱、二級品類ID留美、二級品類名稱......

  • 層級橋接表
    這個方式到是沒有用過彰檬,相比扁平化操作更加的靈活。
    這種方式需要搞一個橋接表谎砾,就是個映射關(guān)系表逢倍,用父、子關(guān)系和父子之間相隔的層級數(shù)來記錄景图。

這種方式還是需要一個扁平化的表较雕,只是又搞了一個中間表。
書中有說到症歇,選擇哪一種方法的時候郎笆,要考慮實(shí)際應(yīng)用,比如上鉆忘晤、下鉆是怎樣實(shí)現(xiàn)的宛蚓,和前端也會有些關(guān)系。

行為維度

這個不是直接存在于業(yè)務(wù)中的維度设塔,而是通過其他業(yè)務(wù)梳理出來或者衍生出來的維度凄吏,這些維度是通過某種計(jì)算規(guī)則統(tǒng)計(jì)出來的,而不是原生存在的闰蛔,可以分為幾種:

  • 另一個維度的過去行為
    買家最近一次訪問淘寶的時間痕钢、買家最近一次發(fā)生交易行為的時間
  • 快照事實(shí)行為維度
    買家從年初至今的淘寶交易金額、買家信用值
  • 分組事實(shí)行為維度
    買家從年初至今的淘寶交易金額劃分的等級序六、買家信用值等級
  • 復(fù)雜邏輯事實(shí)行為維度
    通過復(fù)雜算法或加工多個事實(shí)輸出的維度

實(shí)際處理這種維度時任连,可以增加到當(dāng)前類似的維度表中,或者新增維度例诀。需要注意維度的變化頻率和耦合性随抠,后期維護(hù)成本等。

多值維度

這個主要是事實(shí)表和維度表粒度的不一致的問題繁涂,書中舉的例子是訂單主表和訂單明細(xì)表拱她,一筆訂單會購買多個商品。有幾種處理方式:

  • 降低事實(shí)表粒度
    像上面的例子扔罪,直接以訂單明細(xì)為最細(xì)粒度
  • 采用多字段
    有些場景下對應(yīng)的多維度可能是可確定的秉沼,比如兩個、三個等矿酵,可以通過增加字段的形式唬复。比如我一單只會買兩種商品,那就可以設(shè)計(jì)為第一種商品和第二種商品了坏瘩。
  • 橋接表
    更加靈活盅抚,但是復(fù)雜度高。
多屬性維度

這個是說維度的某個屬性會有多個值倔矾,比如同一件商品它的顏色妄均、尺寸會有多個。
我看書中的意思是沒有使用最細(xì)粒度哪自,如果都是sku粒度丰包,這些都是唯一的,沒有什么問題壤巷,把這些屬性都作為sku的一個屬性即可邑彪,這是最方便的,但是數(shù)據(jù)量會增加很多胧华。

  • 將多屬性使用key-value的形式存在一個字段中
    這樣粒度不變寄症,處理方便宙彪,但是使用的時候有點(diǎn)兒復(fù)雜
  • 將多屬性放在多個字段中
    前面也說過真竖,拆成多個字段耻瑟,第一渡冻、第二剃袍、第三等狰闪,這樣的缺點(diǎn)是拓展性不好祈远。
  • 使用最細(xì)的sku粒度
    就是上面說的最細(xì)粒度數(shù)據(jù)挠铲,使用方便筹误,需要關(guān)注下數(shù)據(jù)量的問題甜橱。
雜項(xiàng)維度

Junk Dimension逊笆,這個雜項(xiàng)維度和印象中的不太一樣,忘了以前從哪兒看到的岂傲,或者是記錯了难裆,我記憶中是這樣用的:
建模過程中,有很多小維度譬胎,分開建成獨(dú)立的維度的話差牛,顯得很多,很雜亂堰乔,所以就講這些維度放到一個維度下面偏化,統(tǒng)一管理。
而從目前的書中來看镐侯,有些不太對侦讨。
雜項(xiàng)維度的確是用來處理一些標(biāo)志位,或者狀態(tài)像0苟翻、1韵卤,Y、N這種描述性維度崇猫,支付轉(zhuǎn)態(tài)沈条、物流狀態(tài)等,為了不讓維度過多诅炉,就建立一個雜項(xiàng)維度蜡歹,就是將這些維度整合成一個維度,通過笛卡爾積的形式生成記錄涕烧。

就是將整合的多個維度記錄月而,通過笛卡爾積的形式覆蓋所有情況。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末议纯,一起剝皮案震驚了整個濱河市父款,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖憨攒,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件世杀,死亡現(xiàn)場離奇詭異,居然都是意外死亡肝集,警方通過查閱死者的電腦和手機(jī)玫坛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來包晰,“玉大人,你說我怎么就攤上這事炕吸》ズ叮” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵赫模,是天一觀的道長树肃。 經(jīng)常有香客問我,道長瀑罗,這世上最難降的妖魔是什么胸嘴? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮斩祭,結(jié)果婚禮上劣像,老公的妹妹穿的比我還像新娘。我一直安慰自己摧玫,他們只是感情好耳奕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诬像,像睡著了一般屋群。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坏挠,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天芍躏,我揣著相機(jī)與錄音,去河邊找鬼降狠。 笑死对竣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喊熟。 我是一名探鬼主播柏肪,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芥牌!你這毒婦竟也來了烦味?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谬俄,沒想到半個月后柏靶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溃论,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年屎蜓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钥勋。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡炬转,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出算灸,到底是詐尸還是另有隱情扼劈,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布菲驴,位于F島的核電站荐吵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赊瞬。R本人自食惡果不足惜先煎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巧涧。 院中可真熱鬧薯蝎,春花似錦、人聲如沸谤绳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闷供。三九已至烟央,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歪脏,已是汗流浹背疑俭。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婿失,地道東北人钞艇。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像豪硅,于是被迫代替她去往敵國和親哩照。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容