1 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
HBase本身的設(shè)計(jì)目標(biāo)是支持稀疏表,而稀疏表通常會(huì)有很多列,但是每一行有值的列又比較少。
如果不使用Column Family的概念,那么有兩種設(shè)計(jì)方案:
1.把所有列的數(shù)據(jù)放在一個(gè)文件中(也就是傳統(tǒng)的按行存儲(chǔ))。那么當(dāng)我們想要訪問少數(shù)幾個(gè)列的數(shù)據(jù)時(shí),需要遍歷每一行,讀取整個(gè)表的數(shù)據(jù),這樣子是很低效的。
2.把每個(gè)列的數(shù)據(jù)單獨(dú)分開存在一個(gè)文件中(按列存儲(chǔ))。那么當(dāng)我們想要訪問少數(shù)幾個(gè)列的數(shù)據(jù)時(shí),只需要讀取對(duì)應(yīng)的文件,不用讀取整個(gè)表的數(shù)據(jù),讀取效率很高。然而,由于稀疏表通常會(huì)有很多列,這會(huì)導(dǎo)致文件數(shù)量特別多,這本身會(huì)影響文件系統(tǒng)的效率。
而Column Family的提出就是為了在上面兩種方案中做一個(gè)折中。HBase中將一個(gè)Column Family中的列存在一起,而不同Column Family的數(shù)據(jù)則分開。
由于在HBase中Column Family的數(shù)量通常很小,同時(shí)HBase建議把經(jīng)常一起訪問的比較類似的列放在同一個(gè)Column Family中,這樣就可以在訪問少數(shù)幾個(gè)列時(shí),只讀取盡量少的數(shù)據(jù)。
- 1 回答
- 0 關(guān)注
- 816 瀏覽
添加回答
舉報(bào)