Aerospike Cクライアントマニュアル-キー-値ストレージ-高度な操作を記録


高度なアクションの記録
Aerospikeは、単一のトランザクションで複数のbinに対して個別の変更操作を実行する能力を提供します.このプロパティを使用すると、同じレコードに複数のbinの変更とクライアントへのデータの読み取りが単一のトランザクションで完了します.すなわち、アプリケーションが原子的な変更を実行し、変更後の結果を返すことを許可します.
次は、1つのレコードで実行できるアクションのリストです.
操作
説明
条件
write
binへの書き込み
 
read
bin値の読み出し
 
increment
binの整数値を1つ増やします
整数値でなければなりません
append
binコンテンツの追加
追加コンテンツのタイプはbin原値のタイプと一致する必要があります.数値タイプはバイト(bytes)または文字列(string)のみです.
prepend
前加bin内容
追加コンテンツのタイプはbin原値のタイプと一致する必要があります.数値タイプはバイト(bytes)または文字列(string)のみです.
touch
変更レコードの世代番号の更新
 
読み取り操作は、他のすべての操作が完了した後に実行されます.非読み込み操作の実行順序はアプリケーションによって定義されます.
トレースページブラウズ数
次は、Webサイトのページブラウズ数を追跡するアプリケーションの例です.レコードキーはページのURLで、次のbinが含まれています.
Last-updated-整数値.レコードの最終更新時間.
views-整数値.ページブラウズ回数.
addr-バイト配列.IPアドレスシーケンス、NULLで分割.user-バイト配列.ユーザIDシーケンス、NULLで分割.time-バイト配列.タイムスタンプ文字列シーケンス.NULLで分割されます.アドレス、ユーザ、および時間binは、空の文字(NULL)で分割された文字列である.アドレス、ユーザ、および時間は同期され、このようなページブラウズに関連する値は、各binにおいて同じインデックス位置である.
as_operations ops; as_operations_inita(&ops, 5); as_operations_add_write_int64(&ops, "last-updated", timestamp); as_operations_add_incr(&ops, "views", 1); as_operations_add_append_raw(&ops, "addr", (uint8_t*)addr, strlen(addr) + 1); as_operations_add_append_raw(&ops, "user", (uint8_t*)user, strlen(user) + 1); as_operations_add_append_raw(&ops, "time", (uint8_t*)time, strlen(time) + 1); as_key key; as_key_init(&key, "app", "pages", url); if (aerospike_key_operate(&as, &err, NULL, &key, &ops, &rec) != AEROSPIKE_OK) { fprintf(stderr, "err(%d) %s at [%s:%d]
"
, err.code, err.message, err.file, err.line); } as_operations_destroy(&ops);

追加と読み込み
増加と読み取りは一般的な操作順序です.カウンタを使用して、増加するたびに値を読み込むことができます.
次はページブラウズカウンタです.レコードのキーはURLで、カウンタを含むbin名は「views」です.
読み取りを実行するためには、読み取りの記録値を埋めるための記録オブジェクトを指定する必要があります.
as_operations ops; as_operations_inita(&ops, 2); as_operations_add_incr(&ops, "views", 1); as_operations_add_read(&ops, "views"); as_record _rec; as_record *rec = as_record_inita(&_rec, 1); as_key key; as_key_init(&key, "app", "pages", url); if (aerospike_key_operate(&as, &err, NULL, &key, &ops, &rec) != AEROSPIKE_OK) { fprintf(stderr, "err(%d) %s at [%s:%d]
"
, err.code, err.message, err.file, err.line); } else { printf("views = %ld
"
, as_record_get_int64(rec, "views", 0)); } as_record_destroy(rec); as_operations_destroy(&ops);

Touchingレコード
各レコードにはメタデータが含まれています.例えば、記録された世代番号と生存時間(TTL).世代番号は記録のバージョン番号と考えられ、記録は更新ごとに増加する.生存時間は記録が失効した期限である.記録を読み取る場合、これらの値は変更されない.1つの記録の生存時間が5分であれば、絶えず読み取っても5分後には使用できない.記録が失効しないようにtouch操作を使用する.
次の例では、3つのbinを読み取り、1つのレコードを失効させないようにします.これらのbinをデータベースから読み出すため、3つのbinを格納するレコードオブジェクトを初期化します.
as_operations ops; as_operations_inita(&ops, 4); as_operations_add_touch(&ops); as_operations_add_read(&ops, "x"); as_operations_add_read(&ops, "y"); as_operations_add_read(&ops, "z"); as_record _rec; as_record *rec = as_record_inita(&_rec, 3); as_key key; as_key_init(&key, "app", "pages", url); if (aerospike_key_operate(&as, &err, NULL, &key, &ops, &rec) != AEROSPIKE_OK) { fprintf(stderr, "err(%d) %s at [%s:%d]
"
, err.code, err.message, err.file, err.line); } else { printf("x = %ld
"
, as_record_get_int64(rec, "x", 0)); printf("y = %ld
"
, as_record_get_int64(rec, "y", 0)); printf("z = %ld
"
, as_record_get_int64(rec, "z", 0)); } as_record_destroy(rec); as_operations_destroy(&ops);

追加の例
カタログ【examples/basic_examples/touch】のaerospike_key_operate()の使用例を参照してください.
テキストリンク:http://www.aerospike.com/docs/client/c/usage/kvs/multiops.html
首をかしげる