OBKV 是 OceanBase 数据库提供的通过 API 接口访问 Table 模型/Hbase 模型的能力,OBKV 为用户提供更加简单高效的 API 访问接口,并且能在单一数据库下提供多种数据模型,满足用户不同场景下数据的多样性需求。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。
OBKV 基本介绍
OBKV 适用于表模型,KV 模式,宽表模型(Hbase),同时可以在此之上接入多种兼容性服务,同时提供多种 NoSQL 模型(如时序 CeresDB),适用于读写简单,没有复杂的 SQL 需求(连接,聚合等),但是读写量大,数据规模大,OBKV 直接和存储层进行交互,RT 更低,吞吐量更大。

表模型
表模型下,数据是强 Schema 的,就像 SQL 表一样。用户通过 SQL 的 DDL 语句创建表(支持 OceanBase 数据库所有分区表类型),表需要包含一个主键(primary key)和若干强类型的列,还可以定义二级索引和唯一性约束。OceanBase TableAPI 提供的表模型 API 可以和 OceanBase SQL 无缝集成,甚至共同使用。除了 Query 接口外,表模型的其他 API 都是通过主键对行数据进行读写的。
表模型的 API 我们称之为 TableAPI。
二级索引
表上可以创建索引,所有 TableAPI 的操作都会同步更新索引。使用 Query 接口,可以使用二级索引进行查询扫描。这对于普通 KV 模型下只有主键一个维度进行查询,在很多时候对于业务需求来说这是不够的。为此,在支持主键查询的简单KV模型下,应用不得不在业务层自己维护一个“索引表”。这样做不仅增加了业务数据层的复杂度,而且索引和主表的一致性往往难以保证,而且读写索引表需要应用和数据库之间多次交互响应延时很大。OceanBase TableAPI 在服务端原生支持二级索引,克服了上述所有问题。
与 SQL 比较
OceanBase TableAPI 提供的表模型 API 可以和 OceanBase SQL 无缝集成,甚至共同使用。
- TableAPI 比基于 SQL 的存储设计,数据访问路径短,相同功能时性能更优;因为语义简单,更容易优化,性能预期更可控(Predictable)。
- Batch 操作的语义比 SQL 更灵活高效。例如,multi-get 的不同行可以选取不同的列。
- API 接口使用简单,直接提供 entity 语义,不需要复杂的 ER 映射。
- 提供异步 API 接口,极大提升应用端的线程资源利用率(暂未实现)。
- 使用简单的 RPC 协议,没有传统 JDBC/ODBC 接口的“重”连接,几乎不受连接数的限制(目前受 RPC 框架的限制)。
但是 TableAPI 的查询(Query)功能无法和 SQL 同日而语,提供 get、scan、limit 等有限功能。如果你需要聚合,排序,应该使用 SQL。TableAPI 也不提供交互式的事务等复杂事务功能。不同于传统关系数据库,OceanBase 数据库本身作为一个 SQL 功能齐全的 NewSQL 数据库,高扩展性和高可用性并不是选择使用 TableAPI 的考量因素。
OBKV 的产品体系
所有的客户端都是在 Github 开源的,用户可以选择源码编译打包来使用客户端,也可以通过从中央仓库拉取最新的客户端。
服务端
当前除了 V4.0 版本 OBServer 不支持 OBKV 的功能外,V3.x 和 V4.1 的商业版/开源版都支持 OBKV 的功能。
TableAPI 客户端
TableAPI 提供表模型的访问接口,当前 TableAPI 实现了多种语言版本的客户端,包括 JAVA/Rust/GO。
TableAPI 当前提供的接口主要有三类,包括:
单行操作接口:对单行数据进行读写
批量操作接口:同时对多行进行操作,支持单行操作的所有类型
查询接口:指定过滤条件对表中数据进行查询,类似 SQL 的 select-from-where
JAVA 客户端
在 pom.xml 中添加依赖引入 TableAPI JAVA 客户端。
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>obkv-table-client</artifactId>
<version>1.1.1</version>
</dependency>
当前版本服务端版本支持:
- OceanBase 数据库 V4.1 以及以后:需要使用 1.1.0 及以后的版本
- OceanBase 数据库 V3.x:需要使用 1.0.0 以及以后的版本
公有云 TableAPI 版本支持:需要使用 V1.1.0 及以后的版本
Rust 客户端
在 cargo.toml 中添加 rust 客户端依赖。
[dependencies]
obkv-table-client-rs = "0.1.0"
Go 客户端
HbaseAPI
HbaseAPI 提供宽表模型的访问接口,目前兼容 Hbase 094 版本的所有接口。
JAVA 客户端
在 pom.xml 中添加依赖引入 HbaseAPI JAVA客户端。
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>obkv-hbase-client</artifactId>
<version>0.1.1</version>
</dependency>
当前版本服务端版本支持:
- OceanBase 数据库 V4.1 以及以后:需要使用 V0.1.1 及以后的版本
- OceanBase 数据库 V3.x: 需要使用 V0.1.0 及以后的版本 公有云 HbaseAPI 版本支持:需要使用 V0.1.1 及以后的版本