Aerospike C客户端手册———数据扫描—记录扫描
来源:互联网 发布:无间道3电影解析知乎 编辑:程序博客网 时间:2024/04/30 10:42
记录扫描
Aerospike C客户端提供扫描指定namespace和set中所有记录的能力。
扫描可使用扫描API定义。使用扫描API,可以初始化和填充一个as_scan对象。
aerospike_scan_foreach()
— 执行扫描并对每个记录调用一个函数。aerospike_scan_background()
— 执行扫描但不要结果,提供检查扫描状态的能力。
使用foreach处理结果
函数aerospike_scan_foreach()执行扫描,对查找到的记录逐个调用回调函数。回调函数的型构是:
typedef bool (*aerospike_scan_foreach_callback)(const as_val *value, void *udata);
这个回调函数在扫描期间找到的每条记录上被调用,记录通过参数value传递,用户提供数据由参数udata传递。需注意到value的类型是const as_val *,意味着回调函数没有责任去销毁value,并且value仅在回调函数作用域中可见。回调函数不能将value传递到函数作用域以外。
没有更多的结果需要处理时,会以NULL做为参数value的值调用回调函数。
对于正常的扫描操作,value将是一个记录,可简单地使用as_record_fromval()转换成记录对象。若参数value是个记录,此函数返回一个记录对象;否则返回空值(NULL)。也可使用as_val_type()检查value的类型。
bool callback(const as_val *value, void *udata) { if (value == NULL) { // scan is complete return true; } as_record *rec = as_record_fromval(value); if (rec != NULL) { // process record } return true;}
检查后台扫描状态
函数aerospike_scan_background()把发送扫描请求发给到数据库执行,客户端不用等待结果。客户端会被返给一个扫描id(scan id),用来检查扫描的运行状态。
扫描id能用来周期性检查扫描的状态,理想状况下,应用将根据获取到的扫描状态,智能判断轮询状态的频度。
扫描的状态信息被填充到as_scane_info实例对象中:
as_scan_info scan_info;if (aerospike_scan_info(&as, &err, NULL, scan_id, &scan_info) != AEROSPIKE_OK) { fprintf(stderr, "err(%d) %s at [%s:%d]\n", err.code, err.message, err.file, err.line);}
以上代码只是很简单地检查状态,并假设状态检查只做一次。
若应用持续跟踪运行已用时间,那在获取状态后就能通过检查scan_info的成员域progress_pct,估计出扫描还将占用多长时间,。
- Aerospike C客户端手册———数据扫描—记录扫描
- Aerospike C客户端手册———数据扫描—记录变更
- Aerospike C客户端手册———数据扫描—在扫描上应用聚合
- Aerospike C客户端手册——简介
- Aerospike C客户端手册——安装
- Aerospike C客户端手册———键-值存储—写入记录
- Aerospike C客户端手册———键-值存储—读取记录
- Aerospike C客户端手册———键-值存储—删除记录
- Aerospike C客户端手册———键-值存储—批量读取记录
- Aerospike C客户端手册———键-值存储—记录高级操作
- Aerospike C客户端手册———用户定义函数—应用UDF到记录
- Aerospike C客户端手册———查询—查询记录
- Aerospike C客户端手册———聚合—记录聚合
- Aerospike C客户端手册———最佳实践—记录使用
- Aerospike C客户端手册———目录
- Aerospike C客户端手册———简介
- Aerospike C客户端手册———入门指南
- Aerospike C客户端手册———安装
- Random Sample Consensus(RANSAC)算法介绍
- 信息系统项目人员转移流程
- 64bit CentOS搭建基于LAMP架构的discuz 3.2论坛
- DB 查询分析器 方便地创建DB2自定义函数
- 哲学家进餐问题的c语言代码
- Aerospike C客户端手册———数据扫描—记录扫描
- JDBC(三)数据库连接池,动态代理
- 数据仓库专题(8)-维度属性选择之维护历史是否应该保留
- Tips to Optimize Your SQL Statements - Part 1
- 数学电子书下载
- 线程局部存储
- kpush源码解析---android端
- Tips to Optimize Your SQL Statements - Part 2
- 【HDU】5227 Tom and game【快速求gcd值+点分治】