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】


原文链接: http://www.aerospike.com/docs/client/c/usage/kvs/write.html
译      者 : 歪脖大肚子Q 

你可能感兴趣的:(NoSQL,分布式,内存数据库,Aerospike,Shard-nothing)