淺析Hbase數據庫及表設計

       最近,在作大數據的知識儲備,整理了一寫本身學習的筆記,淺談Hbase數據及設計,不足之處,還請你們多多指點。數據庫

      首選,HBase是一個分佈式的、面向列的開源數據庫,該技術來源於 Fay Chang 所撰寫的Google論文「Bigtable:一個結構化數據的分佈式存儲系統。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲同樣,HBase在Hadoop之上提供了相似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另外一個不一樣的是HBase基於列的而不是基於行的模式。分佈式

      HBase 是一個NoSQL數據庫,用於處理海量數據,能夠支持10億行百萬列的大表,下面咱們經過與關係數據庫的對比來了解Hbase數據庫的表設計oop

      關係型數據庫的表結構,爲了更好的理解HBase表的思路,這裏先回顧一下關係數據庫中表的處理方式學習

       例若有一個用戶表user_info,有字段:id、name、tel,表名字段須要在建表時指定大數據

      create table user_info (spa

             id 類型,設計

            name 類型,ci

             tel 類型table

      )擴展

     而後插入兩條數據 insert into user_info values(‘...’ ,‘...’,‘...’)

     表結構以下

id

name

tel

1

小明

123

2

小王

456

後來字段不夠用了,新用戶須要記錄地址,就要新增一個字段

id

name

tel

addr

1

小明

123

 

2

小王

456

 

之後再增長需求時,就繼續新增字段,或者添加一個擴展表

上面的內容主要說明的是:

  • 建表的方式,需提早指定表名和字段
  • 插入記錄的方式,指定表名和各字段的值
  • 數據表是二維結構,行和列
  • 添加字段不靈活

   下面看一下HBase的處理方式

   HBase的表結構

建表時要指定的是:表名、列族

建表語句

create 'user_info', 'base_info', 'ext_info'

意思是新建一個表,名稱是user_info,包含兩個列族base_info和ext_info

列族 是列的集合,一個列族中包含多個列

這時的表結構:

row key

base_info

ext_info

...

...

...

row key 是行鍵,每一行的ID,這個字段是自動建立的,建表時不須要指定

插入一條用戶數據:name爲‘a’,tel爲‘123’

插入語句

put 'user_info', 'row1', 'base_info:name', 'a'

put 'user_info', 'row1', 'base_info:tel', '123'

意思是向user_info表中行健爲row1的base_info列族中添加一項數據 name:a,接着又添加一項數據tel:123

name和tel就是具體字段,屬於base_info這個列族

這時的表結構:

row key

base_info

ext_info

row1

name:a, tel:123

 

再插入一條數據:name爲‘b’,addr爲‘beijing’

put 'user_info', 'row2', 'base_info:name', 'b'

put 'user_info', 'row2', 'ext_info:addr', 'bj'

這時的表結構:

row key

base_info

ext_info

row1

name:a, tel:123

 

row2

name:b

addr:bj

HBase表中還有一個重要概念:版本,每一個字段的值都有版本信息(經過時間戳指定)

例如 base_info:name,每次修改時都會保留以前的值,就是說能夠取到他的舊值

row key

base_info

ext_info

row1

name:a, tel:123

 

row2

name:c(v2)[name:b(v1)]

addr:bj

小結

從上面建表、插入數據的過程能夠看出 HBase 存儲數據的特色了

  • 和關係數據庫同樣,也是使用行和列的結構
  • 建表時,定義的是表名和列族(字段的集合),而不是具體字段
  • 列族中能夠包含任意個字段,字段名不須要預約義,每一行中同一列族中的字段也能夠不一致
  • 多維結構,關係數據庫的表是二維的,經過指行、列定位一個數據,HBase中須要經過 行健、列族名、字段名、版本號才能定位到具體數據
  • 插入數據時,一次插入一個字段的數據,不是像關係數據庫那樣一次插入多個字段
相關文章
相關標籤/搜索