乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Thrift介紹與應(yīng)用(三)

       huhuwoo 2015-10-15

      一、概述

      Hbase是目前比較火的列存儲數(shù)據(jù)庫,由于Hbase是用Java寫的,因此它原生地提供了Java接口,對非Java程序人員,怎么辦呢?幸好它提供了thrift接口服務(wù)器,因此也可以采用其他語言來編寫Hbase的客戶端,本文即是Hbase C++接口的介紹。
      目前的Hbase(0.94.11,本文即基于此版本)有兩套thrift接口(可以叫thrift1和thrift2),它們并不兼容(隨意性太強,這可能是所有開源軟件都具有的問題)。根據(jù)官方文檔,thrift1很可能被拋棄,但網(wǎng)上的文章基本是介紹thrift1的,本文則主要介紹thrift2。
      要使用Hbase的thrift接口,必須將它的服務(wù)啟動,命令行為:
      1. hbase-deamon.sh start thrift2  
      thrift默認的監(jiān)聽端口是9090,可以用netstat -nl | grep 9090看看該端口是否有服務(wù)。

      二、thrift1與thrift2的簡單比較

      兩個版本的thrift文件位于如下位置,
      1. src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift  
      2. src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift  

      thrift1的文件有24K左右,而thrift2只有12K左右,看來新版做了大量的簡化。
      命名空間上,新版都將thrift改為thrift2,以示區(qū)別。下表是thrift和thrift2的區(qū)別,可以看出,二者真的差別挺大,特別是服務(wù)中的方法,thrift2做了簡化與合成,并把DDL有關(guān)的內(nèi)容去掉了,關(guān)于這些結(jié)構(gòu)、服務(wù)的具體意義,請參閱thrift文件中的注釋,下文將詳細列出。

       

      Thrift

      Thrift2

      結(jié)構(gòu)

      struct TCell

      struct ColumnDescriptor

      struct TRegionInfo

      struct Mutation

      struct BatchMutation

      struct TIncrement

      struct TColumn

      struct TRowResult

      struct TScan

      struct TTimeRange

      struct TColumn

      struct TColumnValue

      struct TColumnIncrement

      struct TResult

      struct TGet

      struct TPut

      struct TDelete

      struct TIncrement

      struct TScan

      struct TRowMutations

      異常

      exception IOError

      exception IllegalArgument

      exception AlreadyExists

      exception TIOError

      exception TIllegalArgument

      其他

       

      union TMutation

      enum TDeleteType

      enum TDurability

      服務(wù)

      名稱為:Hbase

      void enableTable()

      void disableTable()

      bool isTableEnabled()

      void compact()

      void majorCompact()

      list<Text> getTableNames()

      map<Text,ColumnDescriptor> getColumnDescriptors()

      list<TRegionInfo> getTableRegions()

      void createTable()

      void deleteTable()

      list<TCell> get()

      list<TCell> getVer()

      list<TCell> getVerTs()

      list<TRowResult> getRow()

      list<TRowResult> getRowWithColumns()

      list<TRowResult> getRowTs()

      list<TRowResult> getRowWithColumnsTs()

      list<TRowResult> getRows()

      list<TRowResult> getRowsWithColumns()

      list<TRowResult> getRowsTs()

      list<TRowResult> getRowsWithColumnsTs()

      void mutateRow()

      void mutateRowTs()

      void mutateRows()

      void mutateRowsTs()

      i64 atomicIncrement()

      void deleteAll()

      void deleteAllTs()

      void deleteAllRow()

      void increment()

      void incrementRows()

      void deleteAllRowTs()

      ScannerID scannerOpenWithScan()

      ScannerID scannerOpen()

      ScannerID scannerOpenWithStop()

      ScannerID scannerOpenWithPrefix()

      ScannerID scannerOpenTs()

      ScannerID scannerOpenWithStopTs()

      list<TRowResult> scannerGet()

      list<TRowResult> scannerGetList()

      void scannerClose()

      list<TCell> getRowOrBefore()

      TRegionInfo getRegionInfo()

      名稱為:THBaseService

      bool exists(...)

      TResult get(...)

      list<TResult> getMultiple(...)

      void put(...)

      bool checkAndPut(...)

      void putMultiple(...)

      void deleteSingle(...)

      list<TDelete> deleteMultiple(...)

      bool checkAndDelete(...)

      TResult increment(...)

      i32 openScanner(...)

      list<TResult> getScannerRows(...)

      void closeScanner(...)

      void mutateRow(...)

      list<TResult> getScannerResults(...)


      三、thrift2接口客戶端生成文件

      包含6個文件hbase_constants.cpp/.h、 hbase_types.cpp/.h、THBaseService.cpp/.h,結(jié)構(gòu)的定義都在hbase_types中,服務(wù)方法的實現(xiàn)在THBaseService中(關(guān)于這幾個文件的詳細說明,見作者其他博文)。由于我們通常關(guān)心數(shù)據(jù)的查、增、刪(對Hbase來說,改是增加一個新“版本”),因此下面的討論只圍繞這些操作展開。

      四、thrift2接口主要結(jié)構(gòu)


      以下是主要涉及的結(jié)構(gòu)及其意義。

      • TColumn 對列的封裝
      • TColumnValue  對列及其值的封裝
      • TResult  對單行(Row)及其查詢結(jié)果(若干colunmvalue)的封裝
      • TGet  對查詢一行(row)的封裝,可以設(shè)置行內(nèi)的查詢條件
      • TPut  與TGet一樣,只是它是寫入若干“列”
      • TDelete  與TGet一樣,只是它是刪除若干“列”
      • TScan 對查詢多行和多列的封裝,有點類似于“cursor”
      • TRowMutations 實際上是若干個TDelete和TPut的集合,完成對一行內(nèi)數(shù)據(jù)的“原子”操作

      五、thrift2接口service函數(shù)

      1.    查數(shù)據(jù)

      Service中有關(guān)查數(shù)據(jù)的函數(shù)如下:

      • get:對某一行內(nèi)的查詢,輸入是表名、TGet結(jié)構(gòu),輸出是TResult
      • getMultiple:實際上是對get的擴展,輸入是表名、TGet數(shù)組,輸出是TResult數(shù)組
      • openScanner、getScannerRows、closeScanner:這三個連在一起使用,類似于”cursor”,由openScanner打開一個scanner,getScannerRows從這個打開的scanner順序得到若干行(也就是一個TResult數(shù)組,行數(shù)可指定),得不到數(shù)據(jù)行后可認為已讀完,最后用closeScanner關(guān)閉這個scanner。查詢的條件由TScan封裝,在打開時傳入。需要注意的是每次取數(shù)據(jù)的行數(shù)要合適,否則有效率問題。

      2.    增數(shù)據(jù)

      Service中有關(guān)添加數(shù)據(jù)的函數(shù)如下:

      • put:對某一行內(nèi)增加若干列,輸入是表名,TPut結(jié)構(gòu)
      • putMultiple:對put的擴展,一次增加若干行內(nèi)的若個列,輸入是表名、TPut數(shù)組
      • checkAndPut:這個函數(shù)比較有意思,它提供了一種“原子”操作的概念,當(dāng)傳入的(表名+列族名+列名+數(shù)據(jù))都存在于數(shù)據(jù)庫時,才做操作,返回true,否則不做任何操作而返回false??梢钥闯?,Hbase內(nèi)部實現(xiàn)這個操作時肯定是加鎖的。它使用的場合如下:某時刻一個用戶取得了某個值,以后只有在確保沒有其他人操作該值的情況下才能進行更新。

      3.    刪數(shù)據(jù)

      Service中有關(guān)刪除數(shù)據(jù)的函數(shù)如下:deleteSingle,deleteMultiple,checkAndDelete,這三個與上面的put函數(shù)類似,不再論述。

      4.    其他

      Service中其他的函數(shù)如下:

      • exists:檢查表內(nèi)是否存在某行或某行內(nèi)某些列,輸入是表名、TGet,輸出是bool
      • mutateRow:將某行內(nèi)若干put和delete操作集合起來,形成一個“原子”操作。輸入是表名、TRowMutations結(jié)構(gòu)。
      • increment:增加一行內(nèi)某些列的值,這個操作比較特別,是專門用于計數(shù)的,也保證了“原子”操作特性。


      需要注意的是,以上大部分函數(shù)都是void,如果操作發(fā)生錯誤,thrift的做法是拋出異常,因此進行操作時應(yīng)有異常捕獲處理。


      thrift2接口比較簡單明了,當(dāng)然,實際使用時,會進行或多或少的再次封裝,以適應(yīng)自己的應(yīng)用需要,對該接口的再次封裝,這里不在討論。




        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多