Aerospike C客戶端手冊———鍵-值存儲—寫入記錄

寫入記錄

Aerospike C客戶端API提供幾個操作來存儲數據到數據庫:

  • aerospike_key_put() — 將一個記錄對象中指定的所有bin數據寫入到集羣。
  • aerospike_key_operate() — 對集羣中的一條記錄執行操作,包括寫入和修改多個bin數據。

此章節主要討論aerospike_key_put()操作,aerospike_key_operate()操作將在後面的【記錄高級操作】章節中討論。

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

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

初始化記錄數據

aertospike_key_put()操作需要一個初始化過的記錄對象,其包含要存入集羣的多個bin數據。這裏,我們在棧上初始化一個包含2個bin的記錄對象。第一個bin名稱是“test-bin-1”,類型爲整型(integer);第二個bin名稱是“test-bin-2",類型爲字符串(string)。

as_record rec;
as_record_inita(&rec, 2);
as_record_set_int64(&rec, "test-bin-1", 1234);
as_record_set_str(&rec, "test-bin-2", "test-bin-2-data");

初始化鍵(KEY)

寫入記錄時,數據庫需要通過鍵(key)標別這條記錄。下面我們爲前述記錄對象創建一個鍵。用來做鍵的是字符串”test-key",數據所在的namespace名稱爲“test”、set名稱爲“test-set”。其它數據類型也可用作鍵,比如:整型(integer)或二進制大對象塊(blob)。

as_key key;
as_key_init_str(&key, "test", "test-set", "test-key");

寫入數據庫

有了鍵,現在可將這條記錄對象的數據寫入數據庫:

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

清理資源

當不再需要一條記錄對象時,應該釋放它及其關聯的資源。

as_record_destroy(rec);

上面的示例中,記錄對象和它關聯bin + 值均是從棧上分配,所以調用as_record_destroy()不是必須的。

修改寫入行爲

put()操作的默認行爲是:

  • 若記錄在集羣中不存在,則創建。
  • 若記錄已存在,則更新bin的值。
  • 若bin在記錄中不存在,則增加。
  • 若記錄還有其他bin,繼續保持存在。

可通過as_policy_write對象修改aerospike_key_put()調用時的寫入行爲. 一些可作的策略修改舉例如下:

  • 只有記錄時存在時才寫入 -- 修改write_policy.exist的值爲AS_POLICY_EXISTS_CREATE
  • 當記錄存在時完全替換- -- 修改write_policy.exist的值爲AS_POLICY_EXISTS_REPLACE

寫入事務超時控制

應用需要在預定時間內響應調用者的情況下,可設置aerospike_key_put()調用時的事務超時時間,修改write_policy.timeout爲相應的毫秒數。

讀取-修改-寫入模式

一個常見的使用模式是“讀取-修改-寫入”記錄(或稱爲“檢查-設置),步驟包括:

  • 讀取記錄。
  • 應用修改記錄內容。
  • 使用前面讀取到的數據分代編號(generation ),寫入修改過的數據到數據庫。

具體請參見目錄【examples/basic_examples/generation】。

修改記錄生存時間(TTL)

在寫入操作時,可通過設置記錄對象的域成員ttl,修改記錄的生存時間:

  • 0 :使用namespace的默認TTL值。
  • -1:記錄永不過期。
  • 其它整型值:記錄生存時間,單位:秒。

具體請參見目錄【basic_examples/expire】


譯      者 : 歪脖大肚子Q 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章