Aerospike C客户端手册———键-值存储—读取记录

来源:互联网 发布:大众网络报编辑 编辑:程序博客网 时间:2024/05/18 02:15

读取记录

Aerospike C 客户端AP提供四个从数据库读取一条记录的操作:

  • aerospike_key_get() — 读取一条记录所有bin数据。
  • aerospike_key_select() — 读取一条记录指定bin数据。
  • aerospike_key_exists() — 检查一条记录的存在性。
  • aerospike_key_operate() — 在一条记录上执行操作,包括对指定bin的读取操作。

此章节主要讨论前三个操作,aerospike_key_operate()操作将在后面的【记录高级操作】章节中讨论。

后面的代码引用自示例目录【examples/basic_examples/get】,由Aerospike C客户端安装包自带。

请先阅读【建立连接】章节内容,理解如何建立与集群的连接。

初始化键(KEY)

读取记录时,数据库需要通过键(key)来标识这条记录。下面我们为示例创建一个键。用来做键的是字符串”test-key",数据所在的namespace名称为“test”、set名称为“test-set”。其它数据类型也可用作键,比如:整型(integer)或二进制大对象块(blob)。

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

读取一条记录所有bin数据

使用aerospike_key_get()操作,读取一条记录所有bin数据。此操作尽可能多地以bin数据填充参数中的记录对象。记录对象(第1行)初始化为空指针(NULL)。当记录对象为空指针时,允许读取操作在堆上为记录分配足够多的bin对象空间,以容纳从数据库返回的所有bin数据。

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

当不再需要一条记录对象时,一定要通过as_record_destroy()操作释放所占用资源。

读取一条记录指定bin数据

若精确地知道需从数据库中读取的bin名称,那么最好在读取时指定这些bin,而不是获取整条记录。为了指定需从服务器取回的bin,首先要创建一个以空指针(NULL)结束的字符串(string)数组,其中每个字符串是一个bin名称;然后调用aerospike_key_select()操作读取数据。

下面的代码示意用包含两个bin名称的字符串数组,从数据库中读取名称为”test-bin-1“和”test-bin-3“的bin数据。数组以空指针(NULL)结束,告诉读取操作后面不再有下一个bin名称。

as_record* p_rec = NULL;static const char* bins_1_3[] = { "test-bin-1", "test-bin-3", NULL };if (aerospike_key_select(&as, &err, NULL, &key, bins_1_3, &p_rec) != AEROSPIKE_OK) {    fprintf(stderr, "err(%d) %s at [%s:%d]\n", err.code, err.message, err.file, err.line);}as_record_destroy(rec);

当不再需要一条记录对象时,一定要通过as_record_destroy()操作释放所占用资源。

遍历记录的bin

请参见最佳实践章节中【遍历记录的bin】。

检查记录的存在性

经常十分简单地需要知道一个记录是否存在于数据库中。aerospike_key_exists()操作用记录的元数据填充参数中的记录对象,比如:分代(generation)编号、生存时间,可用来检查记录是否存在

as_record* p_rec = NULL;if (aerospike_key_exists(&as, &err, NULL, &key, &p_rec) == AEROSPIKE_ERR_RECORD_NOT_FOUND) {    fprintf(stderr, "record not found");}

读取事务超时控制

应用需要在预定时间内响应调用者的情况下,可设置读取调用时的事务超时时间,修改write_policy.timeout为相应的毫秒数。


原文链接: http://www.aerospike.com/docs/client/c/usage/kvs/read.html
译       者: 歪脖大肚子Q
 
0 0
原创粉丝点击