作者:少安事务所
原文链接:https://blog.itpub.net/31492144/viewspace-3086394/
在国产数据库蓬勃发展的浪潮中,KWDB 作为一款开源分布式多模数据库,凭借其出色的技术特性和广泛应用场景,逐渐崭露头角。今天,我将深入剖析 KWDB v2.2.0 的产品新特性以及实际应用体验,带你领略这款数据库的非凡魅力。
01 KWDB 介绍
1.1 KWDB 诞生
KWDB 是基于浪潮 KaiwuDB 2.0 开源的面向 AIoT 物联网场景的分布式多模数据库项目,目前由开放原子开源基金会孵化及运营。KWDB 支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。典型应用场景包括但不限于物联网、能源电力、交通车联网等,旨在为各行业领域提供一站式数据存储、管理与分析的基座,助力企业数智化建设,以更低的成本挖掘更大的数据价值。
1.2 KWDB 社区
KWDB 社区是一个开放、平等的数据库开源社区。KWDB 开源以来,先后获得“2024 OSCAR尖峰开源项目及社区”、 “GVP — Gitee 最有价值开源项目”、“2024 年度数据库领域国内活跃开源项目”等荣誉,是《2024 中国开源年度报告》中唯一入选 “2024 全球新势力项目 OpenRank 排行榜 Top 10” 的中国项目。
1.3 KWDB 版本迭代
2024 年 8 月基于 KaiwuDB 2.0 开源,采用 MulanPSL2 许可证,至今已发布多个版本。
2024 年 11 月,KWDB v2.1.0 发版。新增分布式架构,支持单副本集群。支持在关系引擎下创建物化视图。新增支持 ThinkPHP、R2DBC、hsweb、ADO.NET 等多个框架协议。
2025 年 3 月,KWDB v2.2.0 发版。时序引擎的时间戳数据类型新增对微秒、纳秒级精度的支持。关系引擎新增对可重复读(Repeatable Read,RR)、读已提交(Read Committed,RC)隔离级别的支持。使用无模式写入方式创建库、表时,自动区分大小写。支持按照 OpenTSDB 的 telnet 行协议及 JSON 格式协议进行数据写入。
1.4 KWDB 核心能力
KWDB 提供 多模数据管理能力,支持不同数据模型的统一存储,助力企业跨部门、跨业务统一管理数据,实现多业务数据融合,支撑多样化的应用服务。KWDB 采用 行列混存架构,支持多种存储设备,并通过 Shared Nothing 架构及 Raft 协议实现高可用、多副本的数据存储,具备数据均衡与容错能力。融合多种数据计算引擎,根据不同数据特征选择存储与计算模式,提供统一接口及多种分析计算能力,提升查询效率。 自适应时序引擎支持复杂查询与多维聚合,查询性能优于传统关系数据库,且有 5-30 倍压缩能力,数据压缩后可直接使用。 事务处理引擎支持分布式事务和 MVCC,具备多种数据库功能。
KWDB 提供多种管理方式,配备可视化工具– KaiwuDB 开发者中心,兼容 EMQX、Kafka、Telegraf 等第三方工具。
02 KWDB 快速体验
KWDB 支持单节点裸机部署、单节点容器部署、单副本集群、多副本集群等多种部署形态。接下来,我将以单节点容器部署为例,带你快速上手体验 KWDB v2.2.0。
2.1 环境准备
准备实验环境,操作系统为 Rocky Linux 9。
[shawnyan@kwdb ~]$ hostnamectl
Static hostname: kwdb.shawnyan.cn
Operating System: Rocky Linux 9.5 (Blue Onyx)
Kernel: Linux 5.14.0-503.34.1.el9_5.x86_64
Architecture: x86-64
[shawnyan@kwdb ~]$
从国内镜像站拉取 KWDB v2.2.0 容器镜像。
podman pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kwdb/kwdb:2.2.0
查看镜像信息。
[shawnyan@kwdb ~]$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kwdb/kwdb 2.2.0 54712e6a5f83 2 months ago 264 MB
2.2 安全模式部署
如需以安全模式部署 KWDB,需要先使用以下命令创建数据库证书颁发机构、 root 用户的客户端证书以及节点服务器证书。
podman run --rm --privileged \
-v /home/shawnyan/kaiwudb/certs:/kaiwudb/certs \
-w /kaiwudb/bin \
54712e6a5f83 \
bash -c './kwbase cert create-ca --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key && \
./kwbase cert create-client root --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key && \
./kwbase cert create-node 127.0.0.1 localhost 192.168.40.90 0.0.0.0 --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key'
查看生成的证书。
[shawnyan@kwdb certs]$ ls
ca.crt ca.key client.root.crt client.root.key node.crt node.key
以 TLS 安全模式启动数据库实例。
podman run -d --privileged --name kwdb1 \
-p 26257:26257 \
-p 8080:8080 \
-v /home/shawnyan/kaiwudb/certs:/kaiwudb/certs \
-w /kaiwudb/bin \
54712e6a5f83 \
./kwbase start-single-node \
--certs-dir=/kaiwudb/certs \
--listen-addr=0.0.0.0:26257 \
--http-addr=0.0.0.0:8080 \
--store=/kaiwudb/deploy/kaiwudb-container
查看容器状态,确认数据库已正常启动。
[shawnyan@kwdb ~]$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1671a4653d3 swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kwdb/kwdb:2.2.0 ./kwbase start-si... 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:26257->26257/tcp kwdb1
查看容器日志,确认数据库已成功初始化。
[shawnyan@kwdb ~]$ podman logs -f kwdb1
*
* INFO: Replication was disabled for this cluster.
* When/if adding nodes in the future, update zone configurations to increase the replication factor.
*
KWDB node starting at 2025-05-30 13:44:01.329674321 +0000 UTC (took 0.4s)
build: 2.2.0 @ 2025/03/31 07:20:02 (go1.16.15)
sql: postgresql://root@0.0.0.0:26257?sslcert=%2Fkaiwudb%2Fcerts%2Fclient.root.crt&sslkey=%2Fkaiwudb%2Fcerts%2Fclient.root.key&sslmode=verify-full&sslrootcert=%2Fkaiwudb%2Fcerts%2Fca.crt
RPC client flags: ./kwbase <client cmd> --host=0.0.0.0:26257 --certs-dir=/kaiwudb/certs
logs: /kaiwudb/deploy/kaiwudb-container/logs
temp dir: /kaiwudb/deploy/kaiwudb-container/kwbase-temp566787153
external I/O path: /kaiwudb/deploy/kaiwudb-container/extern
store[0]: path=/kaiwudb/deploy/kaiwudb-container
storage engine: rocksdb
status: initialized new cluster
clusterID: 87eb4778-e0f4-4c89-8280-d87af3781218
nodeID: 1
连接数据库,创建数据库用户并赋予管理员权限。
[shawnyan@kwdb certs]$ podman exec -it kwdb1 ./kwbase sql --host=0.0.0.0:26257 --certs-dir=/kaiwudb/certs
#
# Welcome to the KWDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: KaiwuDB 2.2.0 (x86_64-linux-gnu, built 2025/03/31 07:20:02, go1.16.15, gcc 11.4.0) (same version as client)
# Cluster ID: 87eb4778-e0f4-4c89-8280-d87af3781218
#
# Enter \? for a brief introduction.
#
root@0.0.0.0:26257/defaultdb> create user shawnyan with password 'Kwdb@2025';
CREATE USER
Time: 75.764002ms
root@0.0.0.0:26257/defaultdb> grant admin to shawnyan with admin option;
GRANT
Time: 57.586902ms
2.3 可视化工具
KaiuwDB 开发者中心(KDC)是 KWDB 官方量身定制的可视化管理工具,用户可通过该工具更加直观地管理数据库,提升数据库运维的便利性和效率。
下载、安装 KDC,并使用该图形化工具连接到 KWDB。
03 KWDB v2.2.0 新特性品鉴
3.1 纳秒级精度的时间戳
KWDB 时序引擎的时间戳数据类型有 TIMESTAMP 和 TIMESTAMPTZ 两种,从 KWDB v2.2.0 版本开始,支持微秒、纳秒级精度。
创建带有数据类型为 TIMESTAMP(9) 的时序表。
CREATE TABLE t_time_series
(ts TIMESTAMP(9) NOT NULL, -- 精度为纳秒
value FLOAT)
TAGS (sensor_id INT NOT NULL)
PRIMARY TAGS (sensor_id);
写入并查询数据。
time_bucket 函数可帮助你对任意时间段内的数据进行聚合计算。通常,它会与 GROUP BY 一起使用来实现这一目的。
SELECT time_bucket(ts, '1ns') AS bucket
FROM t_time_series
GROUP BY bucket
ORDER BY bucket ASC;
3.2 无模式写入
无模式写入(Schemaless Writing) 是一种灵活的数据库写入方式,允许用户在未预定义数据结构或模式的情况下,直接将数据写入数据库。数据库会根据写入数据的格式和内容自动解析数据,在没有表的情况下自动建表并写入数据。
KWDB v2.2.0 新增支持按照 OpenTSDB 的 telnet 行协议及 JSON 格式协议进行数据写入;使用无模式写入方式创建库、表时,自动区分大小写。OpenTSDB Telnet 或 JSON 接口是 KWDB 开发的特殊 RESTful API 接口,用于将 OpenTSDB Telnet 或 JSON 格式的数据通过 HTTP 请求写入 KWDB 数据库。
下面使用 Postman 以 OpenTSDB Telnet 格式的数据向 KWDB 发送 POST 请求来完成数据写入。
http://192.168.40.90:8080/restapi/opentsdbtelnet?db=mytsdb
请求体。
t_ts_postman 1748610835587000000 33 gid=333
从 KDC 查看表数据。
下面使用 Postman 以 OpenTSDB JSON 格式的数据向 KWDB 发送 POST 请求来完成多行数据写入。
http://192.168.40.90:8080/restapi/opentsdbjson?db=mytsdb
请求体。
[
{
"metric": "sys.cpu.nice",
"timestamp": 1346846400,
"value": 18,
"tags": {
"host": "web01",
"dc": "lga"
}
},
{
"metric": "sys.cpu.nice",
"timestamp": 1346846400,
"value": 9,
"tags": {
"host": "web02",
"dc": "lga"
}
}
]
从 KDC 查看表数据,确认数据已成功提交。
3.3 关系引擎事务隔离级别
在 KWDB 之前的版本中,关系引擎的事务隔离级别为序列化。从 KWDB v2.2.0 开始,新增支持可重复读(Repeatable Read,RR)、读已提交(Read Committed,RC)。用户可在 KDC 中进行修改集群配置。
应用修改后,在 SQL 编辑器执行语句 SHOW transaction_isolation; 验证。也可以在 KDC 的菜单中调整当前会话的事务隔离级别。
04 KWDB 跨模查询
KWDB 的跨模查询功能是其核心亮点之一,支持在时序数据和关系型数据之间进行联合查询与分析,无需数据迁移或转换即可实现多模数据的融合处理。KWDB 跨模查询支持对关系表和时序表进行关联查询、嵌套查询、联合查询。需要注意的是,时序数据不支持事务,因此,跨模查询也不支持语句的事务完整性。
4.1 典型应用场景
IoT 设备监控:关联设备元数据(关系表)与实时传感器数据(时序表),生成带设备属性的监控报表。
金融风控:结合交易记录(关系表)与市场行情(时序数据),分析异常交易模式。
能源管理:统计不同区域(关系表)的用电量(时序表),优化资源分配。
4.2 实践演示
KWDB 研发团队前段时间开源了一个示例项目 SampleDB,内附“智能电表模型”场景的样例数据,我们使用该数据集演示跨模查询。
分别导入关系库 rdb 数据和时序库 tsdb 数据。
[shawnyan@kwdb smart-meter]$ podman exec -it kwdb1 ./kwbase sql --host=0.0.0.0:26257 --certs-dir=/kaiwudb/certs -e 'import database csv data ("nodelocal://1/rdb");'
job_id | status | fraction_completed | rows | abandon_rows | reject_rows | note
----------------------+-----------+--------------------+------+--------------+-------------+-------
1076606972086812673 | succeeded | 1 | 305 | 0 | 0 | None
(1 row)
Time: 251.881287ms
[shawnyan@kwdb smart-meter]$ podman exec -it kwdb1 ./kwbase sql --host=0.0.0.0:26257 --certs-dir=/kaiwudb/certs -e 'import database csv data ("nodelocal://1/tsdb");'
job_id | status | fraction_completed | rows | abandon_rows | reject_rows | note
---------+-----------+--------------------+-------+--------------+-------------+-------
- | succeeded | 1 | 10100 | 0 | 0 | None
(1 row)
Time: 171.470089ms
将电表基础信息表(普通表)、区域信息表(普通表)与实时用电数据表(时序表)关联查询。
select
a.area_name,
sum(md.energy) as total_energy
from
tsdb.meter_data md
join rdb.meter_info mi on
md.meter_id = mi.meter_id
join rdb.area_info a on
mi.area_id = a.area_id
group by
a.area_name
order by
total_energy desc
limit 10;
在 KDC 中运行该语句,并查看执行计划。
从 KWDB v2.2.0 开始, INSERT INTO SELECT 语句支持将跨模查询的结果写入时序表。
总结
KWDB 作为一款国产开源分布式多模数据库,在物联网、能源电力、交通车联网等 AIoT 场景中展现出巨大的应用潜力。其多模数据管理能力、行列混存架构、自适应时序引擎以及事务处理引擎等核心优势,为各行业提供了高效的数据存储、管理和分析解决方案。通过快速体验和新特性品鉴,我们了解到 KWDB 的易用性和灵活性,而跨模查询功能更是为复杂的数据分析场景提供了有力支持。随着国产基础软件的不断发展,KWDB 有望在数据库领域中占据更重要的地位,为企业的数智化转型、工业 4.0 提供坚实的支撑。
参考阅读
KaiwuDB 入选全球新势力榜单
如何编译安装KWDB v2.0.4数据库