1 回答

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