【KWDB 2025 创作者计划】_一文带你了解 KWDB 数据库

作者:少安事务所

原文链接: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数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值