首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

Aerospike C 客戶端記錄掃描 API 詳解

     編輯:DB2 教學

Aerospike C 客戶端記錄掃描 API 詳解

記錄掃描概述

Aerospike C 客戶端提供掃描指定 namespace 與 set 中所有記錄的能力。掃描透過掃描 API 定義:初始化並填充 as_scan 物件,再以以下任一操作執行:

  • aerospike_scan_foreach() — 執行掃描,對每筆記錄呼叫回呼函數(同步取得結果)。
  • aerospike_scan_background() — 背景執行掃描,不等待結果,回傳掃描 ID 供狀態查詢。

使用 foreach 同步處理結果

aerospike_scan_foreach() 執行掃描並對每筆找到的記錄逐一呼叫回呼函數。回呼函數簽名:

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

關鍵點:

  • 掃描期間每筆記錄透過 value 參數傳遞,使用者資料透過 udata 傳遞。
  • value 型別為 const as_val *,回呼函數不負責銷毀 該物件,且 value 僅在回呼作用域內有效,不可傳遞至作用域外。
  • 掃描完成時,會以 NULL 作為 value 呼叫回呼函數。
  • 一般掃描下 value 為記錄,可用 as_record_fromval() 轉換為記錄物件;若非記錄則回傳 NULL。也可用 as_val_type() 檢查型別。

回呼函數範例

bool callback(const as_val *value, void *udata) {
    if (value == NULL) {
        // 掃描完成
        return true;
    }
    as_record *rec = as_record_fromval(value);
    if (rec != NULL) {
        // 處理記錄
    }
    return true; // 繼續掃描
}

背景掃描狀態查詢

aerospike_scan_background() 將請求送至伺服器執行,客戶端不等待結果,獲得 scan_id 供狀態追蹤。應用程式可定期輪詢狀態,理想情況下根據掃描進度智慧調整輪詢頻率。

狀態資訊填入 as_scan_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