Hbase就是Hadoop database。與傳統的mysql、oracle究竟有什么差別。即列式數據與行式數據由什么區別。NoSql數據庫與傳統關系型數據由什么區別:
Hbase VS Oracle
1、 Hbase適合大量插入同時又有讀的情況。輸入一個Key獲取一個value或輸入一些key獲得一些value。
2、 Hbase的瓶頸是硬盤傳輸速度。Hbase的操作,它可以往數據里面insert,也可以update一些數據,但update的實際上也是insert,只是插入一個新的時間戳的一行。Delete數據,也是insert,只是insert一行帶有delete標記的一行。Hbase的所有操作都是追加插入操作。Hbase是一種日志集數據庫。它的存儲方式,像是日志文件一樣。它是批量大量的往硬盤中寫,通常都是以文件形式的讀寫。這個讀寫速度,就取決于硬盤與機器之間的傳輸有多快。而Oracle的瓶頸是硬盤尋道時間。它經常的操作時隨機讀寫。要update一個數據,先要在硬盤中找到這個block,然后把它讀入內存,在內存中的緩存中修改,過段時間再回寫回去。由于你尋找的block不同,這就存在一個隨機的讀。硬盤的尋道時間主要由轉速來決定的。而尋道時間,技術基本沒有改變,這就形成了尋道時間瓶頸。
3、 Hbase中數據可以保存許多不同時間戳的版本(即同一數據可以復制許多不同的版本,準許數據冗余,也是優勢)。數據按時間排序,因此Hbase特別適合尋找按照時間排序尋找Top n的場景。找出某個人最近瀏覽的消息,最近寫的N篇博客,N種行為等等,因此Hbase在互聯網應用非常多。
4、 Hbase的局限。只能做很簡單的Key-value查詢。它適合有高速插入,同時又有大量讀的操作場景。而這種場景又很極端,并不是每一個公司都有這種需求。在一些公司,就是普通的OLTP(聯機事務處理)隨機讀寫。在這種情況下,Oracle的可靠性,系統的負責程度又比Hbase低一些。而且Hbase局限還在于它只有主鍵索引,因此在建模的時候就遇到了問題。比如,在一張表中,很多的列我都想做某種條件的查詢。但卻只能在主鍵上建快速查詢。所以說,不能籠統的說那種技術有優勢。
5、 Oracle是行式數據庫,而Hbase是列式數據庫。列式數據庫的優勢在于數據分析這種場景。數據分析與傳統的OLTP的區別。數據分析,經常是以某個列作為查詢條件,返回的結果也經常是某一些列,不是全部的列。在這種情況下,行式數據庫反應的性能就很低效。
行式數據庫:Oracle為例,數據文件的基本組成單位:塊/頁。塊中數據是按照一行行寫入的。這就存在一個問題,當我們要讀一個塊中的某些列的時候,不能只讀這些列,必須把這個塊整個的讀入內存中,再把這些列的內容讀出來。換句話就是:為了讀表中的某些列,必須要把整個表的行全部讀完,才能讀到這些列。這就是行數據庫最糟糕的地方。
列式數據庫:是以列作為元素存儲的。同一個列的元素會擠在一個塊。當要讀某些列,只需要把相關的列塊讀到內存中,這樣讀的IO量就會少很多。通常,同一個列的數據元素通常格式都是相近的。這就意味著,當數據格式相近的時候,數據就可以做大幅度的壓縮。所以,列式數據庫在數據壓縮方面有很大的優勢,壓縮不僅節省了存儲空間,同時也節省了IO。(這一點,可利用在當數據達到百萬、千萬級別以后,數據查詢之間的優化,提高性能,示場景而定)。