首批通过分布式安全可靠测评,为关键业务系统打造
OBKV-Table 操作类型
更新时间:2024-12-19 16:51:33
OBKV-Table 支持 login、execute、batch_execute 和 query(查询扫描)四种不同的操作类型。
操作类型的实现背后是分别使用四个不同的 Processor 类进行管理。每一种类型通过继承和派生衍生出对应的 process 处理函数,分别处理不同的 RPC 消息请求。

- 登录请求:ObTableLoginRequest,需要提供和 SQL 一样的 OceanBase 租户用户名和密码用于认证,认证成功才可以使用其他 OBKV-Table。
- OBKV-Table 单次处理请求:ObTableOperationRequest,例如 insert、update、replace、get、increment、append 等。
- OBKV-Table 批处理请求:ObTableBatchOperationRequest,单处理的集合。
- OBKV-Table 流式查询请求:ObTableQueryRequest,例如针对某 primary key 范围的 scan range。
各操作类型实现类图如下:

单处理(execute)
单处理在 OBServer 服务端的处理结果将以返回值 errno & 影响行数 affected_rows 的方式返回给客户端,表示操作的最终结果。
说明
下文中的 Insert、Get 等字样为操作行为,并非实际的函数或接口。
Insert
该操作的作用是插入一行记录。
该操作的返回结果分为以下几种:
- 插入成功,返回 errno 为 OB_SUCCESS,affected_rows 为 1。
- 插入失败,返回 affected_rows 为 0。
- 因为主键冲突(即这行已经存在)插入失败,返回 errno 为 OB_ERR_PRIMARY_KEY_DUPLICATE。
- 其他常见错误码:
- OB_TIMEOUT:执行超时。
- OB_TRY_LOCK_ROW_CONFLICT:等待行锁超时。
Get
该操作的作用是取回一行记录。
如果目标行存在,返回目标行记录,否则,返回为空。
Delete
该操作的作用是删除一行记录。
该操作的返回结果分为以下几种:
- 目标行记录被成功删除,返回 errno 为 OB_SUCCESS,affected_rows 为 1。
- 目标行不存在,返回 errno 为 OB_SUCCESS,affected_rows 为 0。
Update
该操作的作用是更新一行记录。
该操作的返回结果分为以下几种:
- 目标行记录被成功更新,返回 errno 为 OB_SUCCESS,affected_rows 为 1。
- 目标行不存在,返回 errno 为 OB_SUCCESS,affected_rows 为 0。
Insert_or_update
该操作的作用是插入或修改一行记录。
该操作的返回结果分为以下几种:
- 目标行不存在,则插入记录,成功后返回 errno 为 OB_SUCCESS,affected_rows 为 1。
- 目标行已经存在(即主键冲突),则更新该行记录,成功后返回 errno 为 OB_SUCCESS,affected_rows 为 1。
- 插入存在唯一索引冲突,则也执行更新操作。
Replace
该操作的作用是替换一行记录。
该操作的返回结果分为以下几种:
- 目标行不存在,则插入记录,成功后返回 errno 为 OB_SUCCESS,affected_rows 为 1。
- 目标行已经存在(即主键冲突),则删除原记录,然后再插入需替换的记录,成功后返回 errno 为 OB_SUCCESS,affected_rows 大于 1。
- 若存在唯一索引冲突,则删除所有引起冲突的行,然后再插入需替换的记录,成功后返回 errno 为 OB_SUCCESS,affected_rows 大于1(包含被删除的行)。
注意
replace 操作和 insert_or_update 操作很容易混淆,您可参考文档 replace 和 insert_or_update 的区别 对这两种操作进行区分。
Increment
该操作的作用是把指定列的值原子地增加某个增量值(可以为负数)。
该操作为 OceanBase 1.4.75 开始新增特性,支持操作整型列类型,含 tinyint、smallint、mediumint、int、bigint 及对应的无符号列类型,其他列类型报错。 该操作的返回结果分为以下几种:
- 如果计算结果溢出列类型的值域,则报错。
- 如果目标行不存在,则插入,把增量值设置为初值(即等价于原值为 0)。
- 如果目标行存在,但是指定列的值为 NULL,把增量值设置为初值(即等价于原值为 0)。
Append
该操作的作用是把指定列的值原子的追加某个串。
该操作为 OceanBase 1.4.75 开始新增特性,支持 varchar/varbinary 类型,其他列类型报错。 该操作的返回结果分为以下几种:
- 如果计算结果溢出列的长度,则报错。
- 如果目标行不存在,则插入,把增量值设置为初值(即等价于原值为空串)。
- 如果目标行存在,但是指定列的值为 NULL,把增量值设置为初值(即等价于原值为空串)。
批操作(batch operation)
批操作为单操作的合集,因此若想了解批处理的具体表现,您可以参考本文的 单处理(execute) 章节。
特别的,为了加速批操作流程,在针对只读批操作集合的处理上,OBServer 节点做了只读事务的优化,因此相比于读写批操作,只读批操作集合在性能上的表现会更好。
查询操作(query)
OBKV-Table 支持根据主键或主键的前缀进行范围扫描,也可以不指定主键,根据索引或索引前缀范围进行扫描查询。
Query 操作类型可以指定多段范围进行扫描。现阶段,在一次 Query 的 RPC 消息交互过程中,最大能从服务端返回 64M 的结果数据集合(可调整)。
关于 Query 各种条件的设置方式,可以参考 客户端简介与使用说明。