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

AerospikeC客戶端手冊———用戶定義函數—注冊用戶定義函數

編輯:DB2教程

AerospikeC客戶端手冊———用戶定義函數—注冊用戶定義函數


注冊用戶定義函數

Aerospike C 客戶端提供在數據庫中注冊、更新或移除一個用戶定義函數(UDF)模塊的能力。目前,用戶定義函數僅支持LUA語言。
aerospike_udf_put() — 注冊或更新UDF模塊。
aerospike_udf_remove() — 移除UDF模塊。

下面的代碼引用自示例目錄【examples/basic_examples/udf】,由Aerospike C客戶端安裝包自帶。

請先閱讀【創建連接】章節內容,理解如何建立與集群的連接。

從文件讀取UDF

很可能,試圖注冊的模塊保存在一個文件中。所以首先讀入這個文件:

FILE* file = fopen("myudf.lua", "r");

if (! file) {
    LOG("cannot open script file %s : %s", udf_file_path, strerror(errno));
    return false;
}

// Read the file's content into a local buffer.

uint8_t* content = (uint8_t*)malloc(1024 * 1024);

if (! content) {
    LOG("script content allocation failed");
    return false;
}

uint8_t* p_write = content;
int read = (int)fread(p_write, 1, 512, file);
int size = 0;

while (read) {
    size += read;
    p_write += read;
    read = (int)fread(p_write, 1, 512, file);
}

fclose(file);

// Wrap the local buffer as an as_bytes object.
as_bytes udf_content;
as_bytes_init_wrap(&udf_content, content, size, true);

向Aerospike服務器注冊UDF

一旦UDF內容轉換到as_bytes對象格式,就可以注冊函數。

as_error err;

// Register the UDF file in the database cluster.
if (aerospike_udf_put(&as, &err, NULL, "myudf", AS_UDF_TYPE_LUA,
        &udf_content) != AEROSPIKE_OK) {
    LOG("aerospike_udf_put() returned %d - %s", err.code, err.message);
}

// This frees the local buffer.
as_bytes_destroy(&udf_content);

此調用將發送UDF模塊到集群中某一節點。這個節點會將UDF傳播到集群中其它節點。

若在任何時候,需要更新UDF功能,簡單地以相同模塊名稱重新注冊新的拷貝即可。

通常UDF注冊只需要幾秒就可以注冊到集群中所有節點。

檢查UDF模塊是否正確注冊

檢查UDF模塊是否正確注冊的最佳方法是通過使用aql工具。請參見【aql手冊】。

從服務器移除UDF

若在任何時候服務器不再需要某UDF模塊,可從集群中移除它。

as_error err;
if (aerospike_udf_remove(&as, &err, NULL, "myudf") != AEROSPIKE_OK) {
    LOG("aerospike_udf_remove() returned %d - %s", err.code, err.message);
    return false;
}

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