今日學習總計

2022-09-14 10:33:14 字數 3197 閱讀 1519

hbase 是 bigtable 的開源(原始碼使用 j**a 編寫)版本。是 apache hadoop 的資料庫,是建 立在 hdfs 之上,被設計用來提供高可靠性、高效能、列儲存、可伸縮、多版本的 nosql 的分布式資料儲存系統,實現對大型資料的實時、隨機的讀寫訪問。

hbase 依賴於 hdfs 做底層的資料儲存,bigtable 依賴 google gfs 做資料儲存

hbase 依賴於 mapreduce 做資料計算,bigtable 依賴 google mapreduce 做資料計算

hbase 依賴於 zookeeper 做服務協調,bigtable 依賴 google chubby 做服務協調

nosql = no sql

nosql = not only sql:會有一些把 nosql 資料的原生查詢語句封裝成 sql,比如 hbase 就有 phoenix 工具

nosql:hbase, redis, mongodb

rdbms:mysql,oracle,sql server,db2

① 它介於 nosql 和 rdbms 之間,僅能通過主鍵(rowkey)和主鍵的 range 來檢索資料

② hbase 查詢資料功能很簡單,不支援 join 等複雜操作

③ 不支援複雜的事務,只支援行級事務(可通過 hive 支援來實現多表 join 等複雜操作)。

hbase 中支援的資料型別:byte(底層所有資料的儲存都是位元組陣列)

主要用來儲存結構化和半結構化的鬆散資料。

結構化:資料結構字段含義確定,清晰,典型的如資料庫中的表結構

半結構化:具有一定結構,但語義不夠確定,典型的如 html 網頁,有些欄位是確定的(title), 有些不確定(table)

非結構化:雜亂無章的資料,很難按照乙個概念去進行抽取,無規律性

與 hadoop 一樣,hbase 目標主要依靠橫向擴充套件,通過不斷增加廉價的商用伺服器,來增加 計算和儲存能力。

1、:乙個表可以有上十億行,上百萬列

2、面向列:面向列(族)的儲存和許可權控制,列(簇)獨立檢索。

3、稀疏:對於為空(null)的列,並不占用儲存空間,因此,表可以設計的非常稀疏。

4、無模式:每行都有乙個可排序的主鍵和任意多的列,列可以根據需要動態的增加,同一 張表中不同的行可以有截然不同的列

回到頂部

初次接觸hbase,可能看到以下描述會懵:「基於列儲存」,「稀疏map」,「rowkey」,「columnfamily」。

其實沒那麼高深,我們需要分兩步來理解hbase, 就能夠理解為什麼hbase能夠「快速地」「分布式地」處理「大量資料」了。

1.記憶體結構

2.檔案儲存結構

加入我們有如下一張表

rowkey的概念

rowkey的概念和mysql中的主鍵是完全一樣的,hbase使用rowkey來唯一的區分某一行的資料。

由於hbase只支援3中查詢方式:

1、基於rowkey的單行查詢

2、基於rowkey的範圍掃瞄

3、全表掃瞄

因此,rowkey對hbase的效能影響非常大,rowkey的設計就顯得尤為的重要。設計的時候要兼顧基於rowkey的單行查詢也要鍵入rowkey的範圍掃瞄。具體rowkey要如何設計後續會整理相關的文章做進一步的描述。這裡大家只要有乙個概念就是rowkey的設計極為重要。

rowkey 行鍵可以是任意字串(最大長度是64kb,實際應用中長度一般為 10-100bytes),最好是 16。在 hbase 內部,rowkey 儲存為位元組陣列。hbase 會對錶中的資料按照 rowkey 排序 (字典順序)

column的概念

列,可理解成mysql列。

columnfamily的概念

列族, hbase引入的概念。

hbase通過列族劃分資料的儲存,列族下面可以包含任意多的列,實現靈活的資料訪問。就像是家族的概念,我們知道乙個家族是由於很多個的家庭組成的。列族也類似,列族是由乙個乙個的列組成(任意多)。

hbase表的建立的時候就必須指定列族。就像關係型資料庫建立的時候必須指定具體的列是一樣的。

hbase的列族不是越多越好,官方推薦的是列族最好小於或者等於3。我們使用的場景一般是1個列族。

timestamp的概念

timestamp對hbase來說至關重要,因為它是實現hbase多版本的關鍵。在hbase中使用不同的timestame來標識相同rowkey行對應的不通版本的資料。

hbase 中通過 rowkey 和 columns 確定的為乙個儲存單元稱為 cell。每個 cell 都儲存著同乙份 資料的多個版本。版本通過時間戳來索引。時間戳的型別是 64 位整型。時間戳可以由 hbase(在資料寫入時

自動)賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由 客戶顯式賦值。如果應用程式要避免資料版本衝突,就必須自己生成具有唯一性的時間戳。 每個 cell 中,不同版本的資料按照時間

倒序排序,即最新的資料排在最前面。

為了避免資料存在過多版本造成的的管理 (包括存貯和索引)負擔,hbase 提供了兩種資料版 本**方式:

儲存資料的最後 n 個版本

儲存最近一段時間內的版本(設定資料的生命週期 ttl)。

使用者可以針對每個列簇進行設定。

單元格(cell)

由 唯一確定的單元。 cell 中的資料是沒有型別的,全部是位元組碼形式存貯。

今日學習總計

1.1 numpy numpy常用資料結構 numpy中常用的資料結構是ndarray格式 使用array函式建立,語法格式為array 列表或元組 可以使用其他函式例如arange linspace zeros等建立 numpy常用方法 ndim 返回int,表示ndarray的維度 shape ...

今日學習總計

有以下兩個重要的步驟來使系統的廣播意圖配合廣播接收器工作。建立廣播接收器 註冊廣播接收器 還有乙個附加的步驟,要實現自定義的意圖,你必須建立並廣播這些意圖。建立廣播接收器 廣播接收器需要實現為broadcastreceiver類的子類,並重寫onreceive 方法來接收以intent物件為引數的訊...

今日學習總計

bean 的裝配可以理解為依賴關係注入,bean 的裝配方式也就是 bean 的依賴注入方式。spring 容器支援多種形式的 bean 的裝配方式,如基於 xml 的 bean 裝配 基於 annotation 的 bean 裝配和自動裝配等。spring 基於 xml 的裝配通常採用兩種實現方式...