日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《HBase权威指南》读书笔记3

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《HBase权威指南》读书笔记3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第3章 客戶端API:基礎知識

  • 所有修改都保證了行級別的原子性: 要么讀到最新的修改,要么等待系統允許寫入改行修改
  • 用戶要盡量使用批處理(batch)更新來減少單獨操作同一行數據的次數
  • 寫操作中設計的列的數目并不會影響該行數據的原子性,行原子性會同時保護到所有列
  • 創建HTable實例(指的是在java中新建該類),每個實例都要掃描.META. 表,以檢查該表是否存在,推薦用戶只創建一次HTable實例,而且是每個線程創建一個
  • 如果用戶需要多個HTable實例,建議使用HTablePool類(類似連接池

CRUD

  • 還可以通過 KeyValue 來添加Put: Put add(KeyValue kv)
  • getFamilyMap() 可以遍歷Put實例中每一個可用的KeyValue實例
  • 用 has(family, qualifier) 來檢查是否存在特定的單元格,而不需要遍歷整個集合
  • Put.getRow() 可以獲取rowkey
  • Put.heapSize() 可以計算當前Put實例所需的堆大小,既包含其中的數據,也包含內部數據結構所需的空間

KeyValue

KeyValue提供了一些比較器(可能可以進行服務器端排序?),列出可能用到的幾種:
  • KeyComparator ? 比較 getKey()
  • KVComparator ?
  • RowComparator ? 比較 getRow()

客戶端的寫緩沖區

  • 客戶端有一個寫緩沖區(默認大小2M),收集一堆put,然后一次發給服務器
  • 通過 table.setAutoFlush(false) 來激活緩沖區(只有在寫非常頻繁的情況下會用到)
  • hbase-site.xml 中的 hbase.client.write.buffer來調整大小
以下情況會激發緩沖區的刷寫
  • 激活寫緩沖區之后要手動調用 flushCommits()?
  • 緩沖區滿了的時候也會自動調用flushCommits()方法
  • table.close()也會觸發刷寫
  • 注意:如果只存儲大單元格,緩沖區的作用就不大,因為大部分時間是傳輸時間而不是開關socket的時間

    Put列表

    可以傳入一個列表的 Put void Put(List<Put> puts) 不過如果同時插入多個put,當其中某個出錯的時候,前面幾個會被正常插入,往后的put就都不會插入 而且客戶端也不能保證服務器端的寫入順序

    GET

    • get.exist(Get get) 方法,在需要檢查一個比較大的列的時候能節省網絡傳輸
    • Result getRowBefore 可以獲取某個行之前的行

    批量處理操作

    • put,get, delete 列表其實都是通過 batch() 方法實現的
    • 直接使用batch(List<Action> actions, Object[] results, ... ) 可以同時傳入3種實例中的任意一種
    • batch并不使用寫緩沖區
    注意:不可以把對同一行的put和delete放在一個批量處理里面,因為批量處理的順序不可控

    兩種批量查詢的區別

    用batch(List<Row> actions, Object[] results)批量查 和 Object[] batch(List<Row> actions) 的區別是
    • ?batch(List<Row> actions, Object[] results)可以返回部分結果
    • Object[] batch(List<Row> actions) 一旦出錯,一條都沒有

    行鎖

    盡量不要使用行鎖,如果必須使用,請一定節約占用鎖的時間

    掃描

    • 通過 hbase-site.xml 中的 hbase.regionserver.lease.period 設定 ResultScanner 的租約
    • 由于每次next()都要發一次請求,所以掃描器也有緩存,叫scanner caching ,默認是關閉的
    • 通過 setBatch(5) 可以每次 next() 返回5列,注意是 列!

    各種特性

    HRegionLocation getRegionLocation(row) Map<HRegionInfo, HServerAddress> getRegionInfo() 這些方法可以獲取某一行數據的具體位置,或者所在的region信息

    總結

    以上是生活随笔為你收集整理的《HBase权威指南》读书笔记3的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。