程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> AerospikeC客戶端手冊———數據掃描—記錄掃描

AerospikeC客戶端手冊———數據掃描—記錄掃描

編輯:DB2教程

AerospikeC客戶端手冊———數據掃描—記錄掃描


記錄掃描

Aerospike C客戶端提供掃描指定namespace和set中所有記錄的能力。
掃描可使用掃描API定義。使用掃描API,可以初始化和填充一個as_scan對象。
以初始化過的as_scan,可用下面任一個操作執行掃描:
aerospike_scan_foreach() — 執行掃描並對每個記錄調用一個函數。
aerospike_scan_background() — 執行掃描但不要結果,提供檢查掃描狀態的能力。

使用foreach處理結果

函數aerospike_scan_foreach()執行掃描,對查找到的記錄逐個調用回調函數。回調函數的型構是:

typedef bool (*aerospike_scan_foreach_callback)(const as_val *value, void *udata);

這個回調函數在掃描期間找到的每條記錄上被調用,記錄通過參數value傳遞,用戶提供數據由參數udata傳遞。需注意到value的類型是const as_val *,意味著回調函數沒有責任去銷毀value,並且value僅在回調函數作用域中可見。回調函數不能將value傳遞到函數作用域以外。

沒有更多的結果需要處理時,會以NULL做為參數value的值調用回調函數。

對於正常的掃描操作,value將是一個記錄,可簡單地使用as_record_fromval()轉換成記錄對象。若參數value是個記錄,此函數返回一個記錄對象;否則返回空值(NULL)。也可使用as_val_type()檢查value的類型。

bool callback(const as_val *value, void *udata) {
    if (value == NULL) {
        // scan is complete
        return true;
    }

    as_record *rec = as_record_fromval(value);

    if (rec != NULL) {
        // process record
    }

    return true;
}

檢查後台掃描狀態

函數aerospike_scan_background()把發送掃描請求發給到數據庫執行,客戶端不用等待結果。客戶端會被返給一個掃描id(scan id),用來檢查掃描的運行狀態。

掃描id能用來周期性檢查掃描的狀態,理想狀況下,應用將根據獲取到的掃描狀態,智能判斷輪詢狀態的頻度。

掃描的狀態信息被填充到as_scane_info實例對象中:

as_scan_info scan_info;
if (aerospike_scan_info(&as, &err, NULL, scan_id, &scan_info) != AEROSPIKE_OK) {
    fprintf(stderr, "err(%d) %s at [%s:%d]\n", err.code, err.message, err.file, err.line);
}

以上代碼只是很簡單地檢查狀態,並假設狀態檢查只做一次。

若應用持續跟蹤運行已用時間,那在獲取狀態後就能通過檢查scan_info的成員域progress_pct,估計出掃描還將占用多長時間,。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved