设为首页 加入收藏

TOP

AerospikeC客户端手册―――最佳实践―记录使用(一)
2015-11-21 01:34:59 来源: 作者: 【 】 浏览:0
Tags:AerospikeC 客户端 手册 最佳 实践 记录 使用
??

记录使用

记录是Aerospike表示存储在 数据库中数据的形式。记录由元数据和多个bin组成。这些bin保存记录的数据。每个bin有一个名称与一个值。元数据是关于记录的附加信息。在数据库中使用键(key)查找记录。

初始化记录

通过下列函数之一可初始化一条记录:
as_record_inita() — 在栈上初始化一条记录及其bin。
as_record_init() — 在栈上初始化一条记录,但在堆上分配bin。
as_record_new() — 在堆上分配一条记录及其bin并初始化。

无论何时初始化的记录,不再使用时应通过as_record_destroy()释放资源。

栈上分配记录

as_record_inita()与as_record_init()都在栈上分配且初始化一个记录,但它们分配记录bin的行为不同。

as_record_inita() 在栈上分配bin。
as_record_init() 在堆上分配bin。

下面是一个简单的as_record_inita()例子。在使用上没有区别,只是在如何分配空间上存在不同。

as_record rec;
as_record_inita(&rec, 3);
as_record_set_int64(&rec, 1);
as_record_set_int64(&rec, 2);
as_record_set_int64(&rec, 3);

as_record_destroy(&rec);

即使记录和bin都是在栈上分配,bin值所用空间还是可能会从堆上分配。因此,应使用as_record_destroy()安全地释放记录及其相关资源。

堆上分配记录

使用as_record_new()将在堆上分配记录。

as_record *rec = as_record_new(10); as_record_set_int64(rec, 1); as_record_set_int64(rec, 2); as_record_set_int64(rec, 3); as_record_destroy(rec);

当不再需要此记录时,应使用as_record_destroy()安全地释放记录及其相关资源。

访问记录的bin

API提供多种方法来访问记录的bin。

为访问记录的bin,首先需要初始化一条记录并以bin数据填充。有两种获取记录数据的方法:

初始化并填充记录的bin。请参见【填充记录的bin】。
从读取操作的返回中获取记录数据。请参见【记录与读操作】。

一旦有个初始化完成的记录,就可使用这些功能之一,读取记录的bin数据。

获取Bin

API提供了一系列getter函数,从记录中取出指定数据类型的bin数值。getter函数要求一个记录对象与bin名称做为参数。

下面的getter函数用于获取bin的原生类型(native-type)数值:

as_record_get_int64()
as_record_get_str()

更详细内容在【API文档】。

以下是getter函数使用示例:

int64_t ibin = as_record_get_int64(rec, "ibin", 123); char *sbin = as_record_get_str(rec, "sbin");

下面的getter函数返回非原生类型数值的指针:

as_record_get_integer()
as_record_get_string()
as_record_get_bytes()
as_record_get_list()
as_record_get_map()

若应用保存这些getter函数返回的数值指针,然后销毁了这条记录,那么指针将指向无效数据。为防止出现这种情况,可通过as_val_reserve()增加这些getter函数返回值的引用计数。

as_list *lbin = (as_list*)as_val_reserve(as_record_get_list(&rec, "lbin")); as_record_destroy(&rec); int64_t i1 = as_arraylist_get_int64(lbin, 1); int64_t i2 = as_arraylist_get_int64(lbin, 2); int64_t i3 = as_arraylist_get_int64(lbin, 3); as_list_destroy(lbin);

上面代码中的5-7行会有效地读取数据。若as_val_reserve()没被调用,就会引起无效读取,可能导致数据损坏。完成数据读取后,应使用相应的销毁函数释放它。

填充记录的bin

在能填充一条记录数据前,必须先初始化它。有三个初始化记录的方法。

as_record_inita() — 在栈上初始化一条记录及其bin。
as_record_init() — 在栈上初始化一条记录,但在堆上分配bin。
as_record_new() — 在堆上分配一条记录及其bin并初始化。

这些函数都接受一个参数指明需分配bin的个数,初始化完成的记录能用来填充数据。

设置Bin值

有一系列的setter函数,用来设置不同数据类型的bin。每个setter函数要求一个记录对象、一个bin名称和一个bin值做为参数,操作成功返回true。

下面是设置原生类型bin数据的setter函数:

as_record_set_int64() — 设置一个int64_t类型的值。
as_record_set_str() — 设置值为一个以空字符(NULL)结束的字符串。
as_record_set_strp() — 设置值为一个以空字符(NULL)结束的字符串,指定在记录销毁时是否释放原值所占用的空间。
as_record_set_raw() — 设置一个字节数组类型的值
as_record_set_rawp() — 设置一个字节数组类型的值,指明在记录销毁时是否释放原值所占用的空间。

具体细节请参见【API文档】。

下面是一些使用setter函数的例子:

as_record_set_int64(rec, "ibin", 123); as_record_set_str(rec, "sbin", "abc"); as_record_set_strp(rec, "spbin", strdup("ijk"), true); as_record_set_raw(rec, "rbin", (uint8_t*)"xyz", 3);

下列setter函数保持对非原生类型数据的指针引用:

as_record_set_integer() — Sets an as_integer value. as_record_set_string() — Sets an as_string value. as_record_set_bytes() — Sets an as_bytes value. as_record_set_list() — Sets an as_list value. as_record_set_map() — Sets an as_map value.

当通过as_record_destroy()释放一个记录,使用这些调用设置的值也将被释放。若在其它地方使用这些值,在向记录设置这些值时应用通过as_

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Hibernate主键生成策略 下一篇CDC变更数据捕获技术的问题及局限

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: