關係型資料庫與HBase的資料儲存方式差別

2021-09-07 11:56:15 字數 1549 閱讀 8030

現在bigtable型(列族)資料庫應用越來越廣,功能也非常強大。

可是非常多人還是把它當做關係型資料庫在使用,用原來關係型資料庫的思維建表、儲存、查詢。

本文以hbase舉例講述資料模式的變化。

傳統關係型資料庫(mysql,oracle)資料儲存方式主要例如以下:

圖一上圖是個非常典型的資料儲存方式。我把每條記錄分成3部分:主鍵、記錄屬性、索引字段。我們會對索引字段建立索引,達到二級索引的效果。

可是隨著業務的發展。查詢條件越來越複雜,須要很多其它的索引字段,且非常多值都不存在,例如以下圖:

圖二上圖是6個索引字段。

實際情況可能是上百個甚至很多其它,而且還須要依據多個索引欄位刷選。

查詢效能越來越低,甚至無法滿足查詢要求。關係型資料裡的侷限也開始顯現。於是非常多人開始接觸nosql。

列族資料庫非常強大。非常多人就想把資料從mysql遷到hbase,儲存的方式還是跟圖一或者圖二一樣,主鍵為rowkey。其它各個欄位的資料。儲存乙個列族下的不同列。

可是想對索引字段查詢就沒有辦法,眼下還沒有比較好的基於bigtable的二級索引方案,所以無法對索引欄位做查詢。

這時候事實上能夠轉換下思維。能夠把資料倒過來,例如以下圖:

圖三把各個索引欄位的值作為rowkey,然後把記錄的主鍵和屬性值依照一定順序存在相應rowkey的value裡。上圖僅僅有乙個列族。是最簡單的方式。 value裡的記錄能夠設定成定長的byte,多個記錄集合通過移位高速查詢到。

可是上面僅僅適合單個索引欄位的查詢。假設要同一時候對多個索引字段查詢,圖三的方式須要求取出全部value值,比方查詢「浙江」and「手機」。須要取出兩個value,再解析出各自的主鍵求交。假設每條記錄的屬性有上百個,對效能影響非常大。

接下來的變化是解決多索引字段查詢的問題。我們將主鍵欄位和屬性字段分開儲存,儲存在不同的列族下,多索引查詢僅僅須要取出列族1下的資料,再去最小集合的列族2裡取得想要的值。儲存如圖四:

圖四列族資料庫資料檔案是依照列族分的。

在取資料時,都會把乙個列族的全部列資料都取出來。其實我們並不須要把記錄明細取出來。所以把這部分資料放到了還有乙個列族下。

接下來是對列族2擴充套件。列族2儲存很多其它的列,用來做各種刷選、計算處理。例如以下圖:

圖五後來我感覺這玩樣越來越像搜尋了。。。

非關係型資料庫Hbase與Redis

hbase資料庫 hbase hadoop database,是乙個高可靠性 高效能 面向列 可伸縮的分布式存 儲系統,利用hbase技術可在廉價pc server上搭建起大規模結構化儲存集群。hbase特點 1.儲存量大 乙個表可以存上億行資料,上百萬的列。2.記錄稀疏 列表位null時不會被儲存...

關係型資料庫與非關係型資料庫

關係型資料庫與非關係型資料庫的區別 非關係型資料庫的優勢 1.效能 nosql是基於鍵值對的,可以想象成表中的主鍵和值的對應關係,而且不需要經過sql層的解析,所以效能非常高。2.可擴充套件性 同樣也是因為基於鍵值對,資料之間沒有耦合性,所以非常容易水平擴充套件。關係型資料庫的優勢 1.複雜查詢 可...

關係型資料庫與非關係型資料庫

關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表以及多個表之間非常複雜的查詢。缺點 1 讀寫效能比較差,尤其是海量資料的高效率讀寫 2 固定...