<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # hbase數據庫介紹 ## 簡介 hbase是bigtable的開源java版本。是**建立在hdfs之上**,提供高可靠性、高性能、列存儲、可伸縮、實時讀寫nosql的**數據庫系統**。 它介于nosql和RDBMS之間,**僅能通過主鍵(row key)和主鍵的range來檢索數據**,**僅支持單行事務**(可通過hive支持來實現多表join等復雜操作)。 主要用來存儲結構化和半結構化的松散數據。 Hbase查詢數據功能很簡單,不支持join等復雜操作,不支持復雜的事務(行級的事務) Hbase中支持的數據類型:`byte[]` 與hadoop一樣,Hbase目標主要依靠**橫向擴展**,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。 HBase中的表一般有這樣的特點: * 大:一個表可以有上十億行,上百萬列 * 無模式: 每行都有一個可排序的主鍵和任意多的列,列可以根據需要**動態的增加**,同一張表中**不同的行可以有截然不同的列** * 面向列:面向列(族)的存儲和權限控制,**列(族)獨立檢索** * 稀疏:**對于為空(null)的列,并不占用存儲空間**,因此,表可以設計的非常稀疏 * 數據多版本:每個單元的數據可以有多個版本,默認情況下版本號自動分配,是單元插入時的時間戳 * 數據類型單一:Hbase中的數據都是字節數組`byte[]` ## 表結構邏輯視圖 HBase以表的形式存儲數據。表有行和列組成。列劃分為若干個列族(column family) ![](https://box.kancloud.cn/c5dcbc8db7ccaca2e09f7a94cf0a6d97_915x315.png) ## Row Key 與nosql數據庫們一樣,row key是用來檢索記錄的主鍵。訪問hbase table中的行,只有三種方式: 1. 通過單個row key訪問 2. 通過row key的range 3. 全表掃描 Row key行鍵 (Row key)可以是任意字符串(最大長度是 64KB,實際應用中長度一般為 10-100bytes),在hbase內部,row key保存為字節數組。 **Hbase會對表中的數據按照rowkey排序(字典順序)** 存儲時,數據按照Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,**將經常一起讀取的行存儲放到一起**。(位置相關性) 注意: 字典序對int排序的結果是 1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,**行鍵必須用0作左填充**。 **行的一次讀寫是原子操作 (不論一次讀寫多少列)** 這個設計決策能夠使用戶很容易的理解程序在對同一個行進行并發更新操作時的行為。 ## 列族 hbase表中的每個列,都歸屬與某個列族。**列族是表的schema的一部分(而列不是)**,必須在使用表之前定義。 列名都以列族作為前綴。例如courses:history , courses:math 都屬于 courses 這個列族。 **訪問控制、磁盤和內存的使用統計都是在列族層面進行的**。 **列族越多,在取一行數據時所要參與IO、搜尋的文件就越多,所以,如果沒有必要,不要設置太多的列族** ## 時間戳 HBase中通過row和columns確定的為一個存貯單元稱為cell。 每個 cell都保存著同一份數據的多個版本。 版本通過時間戳來索引。時間戳的類型是 64位整型。 **時間戳可以由hbase(在數據寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間**。 **時間戳也可以由客戶顯式賦值**。 如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳。 **每個 cell中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。** 為了避免數據存在過多版本造成的的管理 (包括存貯和索引)負擔,hbase提供了兩種數據版本回收方式: * 保存數據的最后n個版本 * 保存最近一段時間內的版本(設置數據的生命周期TTL)。 用戶可以針對每個列族進行設置。 ## Cell 由`{row key, column( =<family> + <label>), version} `唯一確定的單元。 cell中的數據是沒有類型的,全部是字節碼形式存貯。 ![](https://box.kancloud.cn/b23e6c02b893db25ea66bdd61f739a29_819x315.png) hbase的四維數據模型 ![](https://box.kancloud.cn/401fdc61d7bae5ac17af820260ab4ca1_303x168.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看