五分鐘輕鬆瞭解Hbase面向列的存儲

来源:https://www.cnblogs.com/lixinjie/archive/2018/12/26/five-minutes-glance-at-hbase.html
-Advertisement-
Play Games

說明:從嚴格的列式存儲的定義來看,Hbase並不屬於列式存儲,有人稱它為面向列的存儲,請各位看官註意這一點。 行式存儲 傳統的資料庫是關係型的,且是按行來存儲的。如下圖: 其中只有張三把一行數據填滿了,李四王五趙六的行都沒有填滿。因為這裡的行結構是固定的,每一行都一樣,即使你不用,也必須空到那裡,而 ...


說明:從嚴格的列式存儲的定義來看,Hbase並不屬於列式存儲,有人稱它為面向列的存儲,請各位看官註意這一點。

 

行式存儲

 

傳統的資料庫是關係型的,且是按行來存儲的。如下圖:

其中只有張三把一行數據填滿了,李四王五趙六的行都沒有填滿。因為這裡的行結構是固定的,每一行都一樣,即使你不用,也必須空到那裡,而不能沒有。來一張形象的圖:

不管你坐或不坐,座位都在那裡,不離不棄。

 

列式存儲

 

為了與傳統的區別,新型資料庫叫做非關係型資料庫,是按列來存儲的。如下圖:

初次看列式存儲稍微有點懵,下麵給出行存與列存的轉換:

原來張三的一列(單元格)數據對應現在張三的一行數據。原來張三的六列數據變成了現在的六行。

原來的六列數據是在一行,所以共用一個主鍵(即張三)。現在變成了六行,每行都需要一個主鍵(不然不知道這行數據是誰的),所以原來的主鍵(即張三)重覆了六次。如下圖:

由於原來的列變為了現在的行,有需要就加一行,沒需要就不加,不會造成空間浪費。來一張形象的圖:

(擺渡車內部就是一個大平板)

你要站便站,我給你空間,你不站便不站,還給我空間。

 

行列對比

 

行式存儲傾向於結構固定,列式存儲傾向於結構弱化。

行式存儲相當於套餐,即使一個人來了也給你上八菜一湯,造成浪費;列式存儲相等於自助餐,按需自取,人少了也不浪費

行式存儲一行數據只需一份主鍵,列式存儲一行數據需要多份主鍵。

行式存儲存的都是業務數據,列式存儲除了業務數據外,還要存儲列名。

行式存儲更像一個Java Bean,所有欄位都提前定義好,且不能改變;列式存儲更像一個Map,不提前定義,隨意往裡添加key/value。

 

官方介紹

 

Apache Hbase是Hadoop資料庫,一個分散式、可擴展、大數據存儲。

當你需要隨機地實時讀寫大數據時使用Hbase。它的目標是管理超級大表-數十億行X數百萬列。

Hbase是一個開源的、分散式的、帶版本的、非關係型資料庫,模仿谷歌的BigTable。BigTable使用Google File System作為分散式數據存儲,同理Hbase使用HDFS。

 

Hbase世界

 

Hbase雖然弱化了結構,但並不等於放任不管。傳統關係型資料庫在插入數據前表結構(即所有列和列的數據類型)已經是嚴格確定的。

Hbase的表在放入數據前也有需要確定下來的東西,那就是Column Family(常譯為列族/列簇)。單詞Family就是家庭的意思,所以列族就是列的家庭。那麼列自然就是家庭成員了,通常家庭成員都有多個,所以一個列族包含多個列。

一個家庭的成員之間具有血緣關係,所以一個列族的多個列之間通常也具有某種關係,比如相似或同種類別。所以列族可以看作是某種分類(歸類)。

一個非常常見的例子,去面試的時候,一般前臺MM都會讓填一張表,通常信息很多,每個公司又不盡相同。但大致可以分三類:人員基本信息,教育經歷信息,工作經歷信息,這三個類別其實就相當於三個列族。如下圖:

 

每個類別里都會有具體的信息,比如人員基本信息里有姓名、電話、出生年月等,它們就相當於一個個標識符(變數名),在Hbase中叫做Column Qualifier列修飾符)。列修飾符位於列族裡面用來標識一條條數據。如下圖:

 

在Hbase中一個列族(Column Family)和一個列修飾符(Column Qualifier)組合起來才叫一個Column),使用冒號(:)分割,列族:列修飾符,如下圖:

 

在傳統資料庫中每一行的唯一標識符叫做主鍵,在Hbase中叫做row key行鍵)。如下圖:

 

數據在進入Hbase時都會被打上一個時間戳,這個時間戳可以作為版本號來使用。

在t1時間我存入一個人的基本信息,之後發現姓名錯了,在t2時間又更新了姓名,此時並不會去更新原來的那條數據,而是又插入了一條新數據且打上新的時間戳。

此時去查詢獲取的是新數據,仿佛是更新了,但其實只是預設返回了最新版本的數據而已。如下圖:

 

一個行鍵、列族、列修飾符、數據和時間戳組合起來叫做一個單元格Cell)。這裡的行鍵、列族、列修飾符和時間戳其實可以看作是定位屬性(類似坐標),最終確定了一個數據。下圖中的一行相等於Hbase中的一個單元格:

 

一個行鍵、一到多列(包括數據)組合起來叫做一Row)。下圖中所有1001的數據合起來相當於Hbase中的一行,1002的相當於另一行:

 

在Hbase中,只要確定了列族(具體的列不用管),Table)就確定了。如下圖:

 

官方文檔中提醒把傳統資料庫中的表/行/列的概念用在Hbase中不是一個有幫助的類比。相反可以把Hbase的表想象成一個維MapMap套Map)。列族是第一維,列修飾符是第二維

 

說明:任何細微的差別在大數量時都會被無限放大,那麼列族和列修飾符的名字起的短一些能夠節省可觀的空間。

 

(完)

 

編程新說


用獨特的視角說技術


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要: 下文講述通過一條sql語句,採用over關鍵字同時對不同類型進行分組的方法,如下所示: 實驗環境:sql server 2008 R2 當有一張明細表,我們需同時按照不同的規則,計算平均、計數、求和等聚合計算時,此時我們可以使用over子句對數據進行操作。例: 我們需獲取一個學生成績的 總平 ...
  • 最近在複習資料庫相關知識點,過幾天就要考試了; 第一章 資料庫基礎知識 1、資料庫管理是數據處理的基礎工作,資料庫是數據管理的技術和手段。資料庫中的數據具有整體性和共用性。 1.2、資料庫系統的核心:資料庫管理系統。 1.3、資料庫核心:數據模型; 2、資料庫(DB)是一個按數據結構來存儲和管理數據 ...
  • 穿透: 從緩存中查詢一個數據,查到為空,需要每次都去資料庫中查詢。而從資料庫中查詢出來也為空,也就不寫入緩存。導致一個不存在的數每次都去資料庫中查詢,造成db系統很大壓力 造成緩存穿透 解決:如果從資料庫中查詢結果為空,我們也要緩存起來,避免下次訪問緩存中沒有,而去訪問資料庫 雪崩:緩存在一段是時間 ...
  • 在前面兩篇文章中( 淺談SQL Server內部運行機制 and 淺談SQL Server數據內部表現形式 ),我們交流了一些關於SQL Server的一些術語,SQL Sever引擎 與SSMS抽象模型,SQL Server內部存儲機制和SQL Server內部體繫結構等。討論的這些問題,均可以歸 ...
  • -- 創建ASM實例及ASM資料庫 一、ASM相關概念 1.什麼是ASM(Auto Storage Management) 簡稱自動存儲管理,是一種用於管理磁碟的工具 能夠在多個物理設備之間實現條帶化、鏡像數據文件、恢覆文件等 文件按分配單元AUs(allocation units)平衡分佈在磁碟組 ...
  • [20181226]簡單探究cluster table.txt--//簡單探究cluster table.以前也做過,有點生疏了.1.環境:SCOTT@book> @ ver1PORT_STRING VERSION BANNER x86_64/Linux 2.4.xx 11.2.0.4.0 Orac ...
  • 小弟初來乍到,分享一些工作學習中遇到的問題和解決方式,如有不准確或是有錯誤的地方,希望不吝賜教,謝過了。 --Dogtwo 處理某問題時遇到的MySQL問題及解決方案. 1.隨著Project數量越來越多,DB的備份文件大小也越來越大,難以導入。 之前導入備份DB時採用的方法有兩種: 1.將導出的. ...
  • 用戶、角色、許可權、表空間 create tablespace test1_tablespace datafile ‘test1file.dbf’ size 10m; create temporary tablespace temptest1_tablespace tempfile ‘temp1fil ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...