HBase權威指南閱讀 第三章(二)

2021-07-25 19:55:47 字數 4696 閱讀 6582

刪除方法如下:

void delete(delete delete) throws ioexception
在刪除的時候需要乙個delete例項,建構函式如下:

delete(byte row)

delete(byte row, long timestamp, rowlock rowlock)

如果要多次頻繁的修改同一行,還可以提供rowlock例項,指定自己的rowlock。

再刪除的時候最好縮小要刪除的給定行裡涉及資料的範圍:

delete deletefamily(byte family)

delete deletefamily(byte family, long tamestamp)

delete deletecolumns(byte family, byte qualifier)

delete deletecolumns(byte family, byte qualifier, long timestamp)

delete deletecolumn(byte family, byte qualifier)

delete deletecolumn(byte family, byte qualifier, long timestamp)

void settimestamp(long timestamp)

deletecolumns()作用於特定的一列,如果沒指定時間戳,這個方法會刪除該列的所有版本,如果指定了時間戳,會刪除所有與這個時間戳相匹配的版本或者更舊的版本。

deletecolumn()也作用於特定的乙個列,但是只刪除最新的版本或者指定的版本。

delete()列表的呼叫和put()列表的呼叫很類似,需要包含乙個delete例項的列表:

void delete(listdeletes) throws ioexception
和前文類似,如果指定行鍵、列族、列限定符和值來執行刪除操作的檢查,如果檢查失敗就不執行刪除操作,返回false,如果檢查成功,則執行刪除操作,返回true:

boolean checkanddelete(byte row, byte family, byte qualifier, byte value, delete delete) throws ioexception
之前的操作都是基於單個例項或者列表來實現,這裡的批處理呼叫可以批量處理跨多行的不同操作。

提供了batch()方法進行所有操作:

void batch(listactions, object results)

throws ioexception, interriptedexception

object batch(listactions)

throws ioexception, interriptedexception

row類是put、get、delete的父類

使用批處理的例子:

private final static byte row1 = bytes.tobytes("row1");

private final static byte row2 = bytes.tobytes("row2");

private final static byte colfam1= bytes.tobytes("colfam1");

private final static byte colfam2= bytes.tobytes("colfam2");

private final static byte qual1= bytes.tobytes("qual1");

private final static byte qual2= bytes.tobytes("qual2");

listbatch = new arraylist();

put put = new put(row2);

put.add(colfam2, qual1, bytes.tobytes("val5"));

batch.add(put);

get get1 = new get(row1);

get1.addcolum(colfam1,quak1);

batch.add(get1);

delete delete = new delete(row1);

delete.deletecolumns(colfam1, qual2);

batch.add(delete);

get get2 = new get(row2);

get2.addcolum(bytes.tobytes("bogus"));

batch.add(get1)

object results = new object[batch.size()];

trycatch(exception e)

for(int i=0;i行鎖保證只有乙個客戶端能獲取一行資料相應的鎖,同時對這行進行修改,一般盡可能的避免使用它,避免產生死鎖的情況。

rowlock lockrow(byte row) throws ioexception

void unlockrow(rowlock rl) throws ioexception

掃瞄類似資料庫中的游標。

掃瞄提供的類是scan,但是不需要呼叫scan()方法建立例項,可以通過呼叫htable的getscanner()方法返回掃瞄器,同時也可以用它迭代獲得資料:

resultscanner getscanner(scan scan) throws ioexception

reslutscanner getscanner(byte family) throws ioexception

reslutscanner getscanner(byte family, byte qualifier) throws ioexception

後兩個方法隱式的幫使用者建立了乙個scan例項,邏輯中最後呼叫getscanner(scan scan)方法。

在建立scan 例項後可以有多種方法限制掃瞄範圍,例如

scan addfamily(byte family)

scan addcolumn(byte family, byte qualifier)

...

掃瞄的操作不會通過一次rpc請求就返回所有匹配的行,而是以行為單位進行返回。因為一次請求可能需要返回很多行,再一次請求中傳送這麼多資料會占用大量的系統資源並且花費很長時間。

resultscanner吧掃瞄轉換為類似get的操作,吧每一行封裝成result例項,吧所有result例項放入乙個迭代器:

result next() throws ioexception

result next(int nbrows) throws ioexception

void close()

最好把close()方法放入try/finally中,因為乙個開啟的掃瞄器會占用不少伺服器資源。

前面的每乙個next()的呼叫都會為每行資料生成乙個單獨的rpc請求,當單元格資料較小的時候,這樣做的效能不是很好,如果此時一次可以獲得更多行的資料會更好。有乙個掃瞄器快取可以實現,預設情況下這個快取是關閉的。

可以使用htable的方法設定表級的掃瞄器快取:

void setscannercaching(int scannercaching)

int getscannercaching()

也可以把下面的配置項新增到hbase-site.xml中

hbase.client.scanner.caching

10

這樣所有的scan例項的掃瞄器快取的大小都為10.

還有掃瞄層面的配置,這層優先順序最高,使用scan類的方法設定掃瞄級的快取:

void setcaching(int caching)

int getcaching()

很多時候,吧掃瞄器快取設的比較高可以提高掃瞄效能,但是設定過高會使得每次next()呼叫占用更多時間,如果返回客戶端資料超出堆的大小就會出現outofmemoryexception異常。

如果資料量非常大的行,這些行有可能超過客戶端程序的記憶體容量,這時候可以使用批量:

void setbatch(int batch)

int getbatch()

快取是面向行的操作,批量是面向列一級的操作。批量可以選擇每一次resultscanner的例項的next()操作取回多少列。

JavaScript權威指南 第三章

var scope global 宣告乙個全域性變數 function checkscope checkscope local scope global 宣告乙個全域性變數,可以不使用var來宣告 function checkscope2 checkscope2 local local var sc...

C Primer閱讀心得(第三章)

1.在標頭檔案 h或者 hpp 中不要使用using語句。因為如果標頭檔案中使用了using語句後,每個include它的原始檔中都預設包含了這個using,那麼可能會與這個原始檔中的變數名或者其他的標頭檔案中的變數名產生衝突。2.string物件的讀入 過載的 以空格為結束符,而getline以換...

Thinking in C 閱讀筆記(第三章)

c 中的c 建立函式 函式原型 eg.int func in,float,long z long z will be warned int func 無引數而不是任意引數 float func 可變引數列表,避免 返回值 1 每個函式都有返回值,空返回值為void 2 return的結果視返回值而定...