【KWDB创作者计划】10分钟快速了解到体验KWDB数据库

前置知识

KWDB有比较多的新概念,这与传统的数据库有所不同。为了更好的理解KWDB,所以在介绍KWDB之前,我会提前介绍一些前置知识,这会让后面看到KWDB的时候就能了解它的作用。

什么是多模数据库

多模数据库(Multimodal Database)是一种能够支持多种不同数据模型(如关系型、文档型、图形型、键值型等)并允许这些数据模型共存并在同一数据库系统中进行交互的数据库。与传统的单一数据模型数据库不同,多模数据库提供了更大的灵活性,可以在不同类型的数据存储需求之间进行切换和集成。

多模数据库的主要特点:

  1. 支持多种数据模型:可以同时处理关系型数据(如表格数据)、非关系型数据(如文档、图、键值对等)以及其他数据类型。这样,用户可以根据数据的特点选择最合适的数据模型,而不必依赖于单一的数据结构。
  2. 灵活性和兼容性:多模数据库能够处理不同来源和格式的数据,因此能够更好地支持多样化的数据分析需求。例如,它可以同时处理结构化数据(如传统的SQL表格)和半结构化或非结构化数据(如JSON文档、图形数据等)。
  3. 统一查询接口:尽管多模数据库支持不同类型的数据模型,但它们通常提供统一的查询接口,允许用户在多个数据模型间进行跨类型查询。例如,用户可以在关系型数据和图数据之间联合查询。
  4. 简化数据管理:多模数据库通过集成多个数据模型,可以减少数据存储和管理系统的复杂性。它使得用户无需使用多个不同的数据库系统(例如,一个用于关系型数据,另一个用于文档数据),从而简化了系统架构和运维工作。
  5. 适应复杂应用场景:多模数据库非常适合那些需要处理不同类型数据的复杂应用场景,例如物联网、大数据分析、社交网络、金融分析等场景,这些场景中的数据结构常常是多样化的。

什么是分布式数据库

分布式数据库(Distributed Database)是指将数据分布在多个物理位置或节点上,并能够通过网络进行互联的数据库系统。它通过协调多个数据库节点之间的数据存储和管理,实现数据的高可用性、可扩展性和容错性。分布式数据库使得数据存储和访问不再局限于单一机器或服务器,而是分布在多个位置上,可以是不同的服务器、数据中心或地理位置。

分布式数据库的主要特点:

  1. 数据分布性

    • 数据被划分并存储在多个物理节点上。每个节点可以存储数据库的一部分数据,也可以是完整的副本。数据的分布通常是透明的,用户不需要关心数据存放的位置。
  2. 高可用性和容错性

    • 分布式数据库系统通过数据复制和冗余机制保证高可用性。当某个节点发生故障时,其他节点可以接管工作,系统仍然可以提供服务。
    • 数据的副本在多个节点上同步更新,确保即使部分节点发生故障,系统仍然能够保证数据的持续可访问性。
  3. 水平扩展性

    • 分布式数据库能够通过增加更多的节点来水平扩展,以适应不断增长的数据量和查询需求。这与传统的单一数据库系统的垂直扩展(增加硬件资源)不同。
  4. 透明性

    • 位置透明性:用户不需要知道数据存储在具体哪个节点上,可以像访问本地数据库一样访问分布式数据库。
    • 访问透明性:用户可以无缝地查询和修改数据,系统会自动将请求路由到合适的节点。
    • 复制透明性:多个副本的管理对用户透明,用户无需关心数据是否被复制。
  5. 一致性

    • 分布式数据库需要在多个节点间保持数据一致性,常见的一致性模型有强一致性、最终一致性等。分布式事务协议(如两阶段提交、Paxos协议等)确保跨节点的操作具有一致性。
  6. 并发控制和事务管理

    • 分布式数据库通常需要处理并发访问问题,保证多个客户端访问数据时不产生冲突或数据不一致。分布式事务和锁机制确保在多个节点间的事务能得到有效管理。

分布式数据库的类型:

  1. 共享存储型(Shared Storage)

    • 所有节点都共享一个中央存储系统,节点之间通过网络访问数据。它的优点是数据访问非常快速,但扩展性相对较差。
  2. 共享无存储型(Shared Nothing)

    • 每个节点都有自己独立的存储,数据分布在不同的节点上,节点之间通过网络交换数据。这种架构提供了更好的可扩展性和容错性,是现代分布式数据库的主流架构。
  3. 混合型

    • 结合了共享存储和共享无存储的特点,部分数据可能共享存储,部分数据分布在各个节点上。

分布式数据库的优势:

  • 高可用性:系统能够在部分节点故障时继续运行,确保服务的不中断。
  • 弹性扩展:可以根据需求增加或减少节点,实现水平扩展。
  • 数据冗余:通过数据复制和备份机制,提高数据的可靠性和容错能力。
  • 分布式计算:可以在多个节点上并行处理数据,提升系统性能。

总的来说,分布式数据库能够处理大规模的数据存储和查询需求,是现代大数据应用和云计算环境中的核心技术。

KWDB产品介绍

KaiwuDB 是一款面向 AIoT 场景的分布式、多模融合、支持原生 AI 的数据库产品,支持同一实例同时建立时序库和关系库并融合处理多模数据,具备时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。面向工业物联网、数字能源、车联网、智慧产业等领域,KaiwuDB 提供一站式数据存储、管理与分析的基座。

KWDB产品架构

相比传统的数据库,KaiwuDB 提供多模数据管理能力,支持不同数据模型的统一存储,助力企业跨部门、跨业务统一管理数据,实现多业务数据融合,支撑多样化的应用服务。KaiwuDB 的产品架构如下图所示:

  • 数据存储:采用行列混存架构,支持固态硬盘、机械硬盘等各类存储设备。
  • 数据副本:采用 Shared Nothing 架构,基于 Raft 协议的高可用、多副本架构,支持数据均衡及容错,保障数据服务不中断。
  • 执行计算:融合多种数据计算引擎,根据不同模型数据特征选择不同的存储、计算模式,对外提供统一的接口,提供多种分析计算能力,提升查询效率。
    • 自适应时序引擎:支持多种时序数据特色的复杂查询和多维聚合方式。与传统关系数据库相比,KaiwuDB 具备优异的查询性能。另外,KaiwuDB 提供 5-30 倍的压缩能力,数据压缩后无需解压缩即可使用。
    • 事务处理引擎:支持分布式事务和 MVCC(Multi-Version Concurrency Control,多版本并发控制),具备注释、视图、约束、索引、序列等功能。
    • 预测分析引擎:提供模型生命周期管理、模型训练、模型推理预测等功能。任何拥有数据库应用开发背景的开发人员都可以轻松地完成模型管理和预测等操作。
  • 系统管理:提供系统连接、身份认证、权限管理、资源管理等多种系统管理方式。
  • 生态工具与兼容:提供数据库操作、监控管理等可视化工具,兼容 EMQXopen in new windowKafkaopen in new windowTelegrafopen in new window 等第三方工具。

KWDB产品特性

  • 更高的处理性能
    • 优化海量时序数据的高速读写,具备时序数据高效处理能力。
    • 提供插值查询、数学函数查询等丰富的时序特色查询。
    • 简化查询分析难度,提高应用效率,提升用户使用体验。
  • 更低的运管成本
    • 提供多模数据管理能力,统一存储不同数据模型,实现多业务数据融合,支撑多样化的应用服务。
    • 企业采用一套数据库系统就能够跨部门、跨业务统一管理数据,降低企业信息化设施的采购成本和运维成本。
  • 更低的存储成本
    • 支持 5-30 倍压缩比和数据生命周期管理。
    • 根据数据的重要程度,灵活制定数据保存策略,使用最少的的节点和资源满足业务需求,极大地降低存储成本。
    • 支持多级存储策略,进一步优化存储资源的利用,降低存储开销。
  • 更高的数据价值
    • 轻量化内置自治优化引擎,用 AI 驱动数据库自治。
    • 提供一站式可插拔的 AI 预测分析引擎,通过 SQL 函数灵活导入并部署预训练模型,用 AI 驱动对海量多模数据的挖掘,提升数据整体的价值。
  • 更安全的管理
    • 支持数据库审计与加密等功能以保证安全性,保障数据库在业务场景下稳定安全的运行。
    • 支持多种身份认证方式协同工作,用户密码复杂度、用户名和密码的有效期、最大连接错误次数等均可灵活配置。
    • 支持开启三权分立模式,降低因单一用户或角色权限过大而引发的安全风险。
  • 更简易的使用
    • 为系统管理员提供细粒度全方位的数据库监控接口,大幅降低管理成本。
    • 为运维人员提供多种异构数据库的数据快速迁移方案,降低数据迁移成本。
    • 为数据分析专家提供多样化编程接口和 AI 集成能力,提高数据挖掘的便捷性。
    • 为开发者提供简单接口,与第三方工具无缝集成,降低开发难度,提升开发使用效率。
    • 提供 MCP Server,通过自然语言与 KaiwuDB、大模型及服务实现高效交互和商业智能。

KWDB产品体验

介绍了那么多的KWDB特性,功能,接下来就开始上手使用。

使用Docker快速安装KWDB

官方提供了Docker安装脚本,我们直接使用脚本就能快速的进行KWDB安装,直接按照这个示例使用就行。

➜  docker docker run -d --privileged --name kwdb \
  -p 26257:26257 \
  -p 8080:8080 \
  -v /var/lib/kaiwudb:/kaiwudb/deploy/kaiwudb-container \
  --ipc shareable \
  -w /kaiwudb/bin \
  kwdb/kwdb \ 
  ./kwbase start-single-node \
    --insecure \
    --listen-addr=0.0.0.0:26257 \
    --http-addr=0.0.0.0:8080 \
    --store=/kaiwudb/deploy/kaiwudb-container
Unable to find image 'kwdb/kwdb:latest' locally
latest: Pulling from kwdb/kwdb
9b857f539cb1: Pull complete 
24fd278016bd: Pull complete 
e915a1b38e6a: Pull complete 
Digest: sha256:9dda946922a69557e20be9f1d99c504c467fba6351bb8af0a34fe42711cde73f
Status: Downloaded newer image for kwdb/kwdb:latest
a7f598722140c5b31dab0df03b1def6ace3cd50eb8547e74aca46885bc58660b

参数说明:

  • -d:后台运行容器并返回容器 ID。
  • --name kaiwudb:指定容器名称为 kaiwudb,便于后续管理。
  • --privileged:给予容器扩展权限。
  • --ulimit memlock=-1:取消容器内存大小限制。
  • --ulimit nofile=$max_files:设置容器内进程可以打开的最大文件数。
  • -p $db_port:26257:将容器的 26257 端口(数据库主端口)映射到主机的指定端口。
  • -p $http_port:8080: 将容器的 8080 端口(HTTP 端口)映射到主机的指定端口。
  • -v:设置容器目录映射:
    • 将主机的 /var/lib/kaiwudb 目录挂载到容器内的 /kaiwudb/deploy/kaiwudb-container 目录,用于持久化数据存储。
    • 安全模式下,将主机的 /etc/kaiwudb/certs 目录挂载到容器内的 /kaiwudb/certs 目录,用于存放证书和密钥。
  • --ipc shareable:允许其他容器共享此容器的IPC命名空间。
  • -w /kaiwudb/bin:将容器内的工作目录设置为 /kaiwudb/bin
  • $kaiwudb_image:容器镜像变量,需替换为实际的镜像名称及标签, 例如 kaiwudb:2.2.0
  • ./kwbase start: 容器内运行的数据库启动命令, 根据安全模式和非安全模式有所不同:
    • --insecure:(仅非安全模式)指定以非安全模式运行。
    • --certs-dir=/kaiwudb/certs:(安全模式)指定证书目录位置。
    • --listen-addr=0.0.0.0:26257:指定数据库监听的地址和端口。
    • --http-addr=0.0.0.0:8080:指定 HTTP 接口监听的地址和端口。
    • --store=/kaiwudb/deploy/kaiwudb-container:指定数据存储位置。
    • --tlcp:(TLCP 安全模式)使用 TLCP 加密协议。

使用dbeaver连接到KWDB

注意,上面的docker安装使用的事非安全模式,所以是没有密码的,数据库的端口为26257,使用pg协议,所以在使用 dbeaver 连接的时候,可以直接使用postgre数据库类型进行连接。PS:当然了,kwdb也提供了连接工具,因为我个人电脑里面已经有了dbeaver了,直接使用就行。如果你喜欢navicat 也可以直接使用navicat进行连接,就不做多的解释了。

首先打开dbeaver,选择postgreSQL连接数据类型。

设置主机为本机127.0.0.1,端口为26257,数据库为defaultdb,用户名为root,密码为空(非安全模式),测试链接后可能需要下载驱动,下载完成再点击测试连接,弹出成功连接到kuaiwudb提示就OK了。点击确定到下一步


成功打开数据库

KWDB基础使用

作为一款多模数据库系统,KaiwuDB 支持用户在一个 KaiwuDB 实例中创建一个或多个数据库对象(Database)用来管理时序和关系数据。其中专门用于存储和管理时间数据的数据库对象为时序数据库(Time Series Database)。时序数据库中包括 public 模式和用户自定义的时序表。

KWDB关系数据库操作

新建数据表

创建一个user表

CREATE TABLE public.user (
id SERIAL NOT NULL,
"name" varchar(20) COLLATE "en-US" NOT NULL,
age int4 NOT NULL,
CONSTRAINT newtable_pk PRIMARY KEY (id ASC)
);

插入一条数据

插入几条数据

INSERT INTO public."user" ("name",age)
VALUES ('张三',18);
INSERT INTO public."user" ("name",age)
VALUES ('李四',28);
INSERT INTO public."user" ("name",age)
VALUES ('王五',30);

查询数据

select * from public."user" u where u.age = 18;

删除数据

delete from "user" where age=30;

总结

目前来看,KWDB的基本数据是没有任何问题,很丝滑。

KWDB时序数据库操作

时序数据库前置知识点

在时序数据库中,tag 和 (column)是两个重要的概念,它们用于存储和组织数据,但在结构和用途上有所不同。

  1. Tag

    • 定义:在时序数据库中,tag 是一种元数据,用来标识和描述时间序列数据的不同特征。它通常用于存储一些定性的、标识性的字段,比如设备ID、位置、用户ID等。
    • 用途tag 用于数据查询时的过滤或分组。通过标签可以非常方便地对数据进行分类,进而高效地进行查询。
    • 特点tag 是索引字段,查询时可以帮助快速定位相关数据。它通常是定性的,不会随着时间发生变化。
    • 例子:假设你在监控设备的温度数据,每个设备有不同的ID和位置作为 tag: textCopy Code temperature,device_id=device_1,location=office value=22.5
  2. 列(Column)

    • 定义 是实际存储的数值数据字段,通常包含时间序列中记录的测量值。例如,设备的温度、湿度、压力等。
    • 用途 存储的是具体的数值数据,通常是度量值。它们是时间序列的核心数据部分,可以是数值类型、字符串类型等。
    • 特点 通常是随着时间变化的,存储了具体的度量数据,并且在查询时会进行数值计算(如求平均值、最大值等)。
    • 例子:上述 temperature 数据中的 value 就是一个 ,它存储的是具体的温度数据。
总结关系:
  • Tag 是描述数据特征的元数据,通常用于标识或分类数据,而  存储的是时间序列数据的实际度量值。
  • tag 是索引字段,帮助快速定位数据, 是核心数据字段,记录着具体的度量数值。
  • 在查询时,你通常会使用 tag 来过滤数据并选择特定的时间序列,使用  来读取或计算具体的数值数据。

简单来说,tag 是用来标识或分类的字段,而  是用来存储数值数据的字段。

KaiwuDB 时序数据库支持数据类型

  • 时间类型
  • 数值类型
  • 布尔类型
  • 字符类型

下表列出了 KaiwuDB 支持修改的时序数据类型、默认宽度、最大宽度、可转换的数据类型和特殊要求。

原数据类型默认宽度最大宽度支持转换的数据类型说明
TIMESTAMP--TIMESTAMPTZ、INT8、FLOAT4、FLOAT8标签不支持该类型。TIMESTAMP 转 INT8 时,输出结果固定为毫秒精度的数字,即 13 位数字。TIMESTAMP 转 FLOAT4 时,输出结果只能保证约前 7 位有效数字的精度。TIMESTAMP 转 FLOAT8 时,输出结果只能保证约前 15-17 位有效数字的精度。
TIMESTAMPTZ--TIMESTAMP、INT8、FLOAT4、FLOAT8标签不支持该类型。TIMESTAMPTZ 转 INT8 时,输出结果固定为毫秒精度的数字,即 13 位数字。TIMESTAMPTZ 转 FLOAT4 时,输出结果只能保证约前 7 位有效数字的精度。TIMESTAMPTZ 转 FLOAT8 时,输出结果只能保证约前 15-17 位有效数字的精度。
INT22 字节-INT4、INT8、VARCHARINT2 转 VARCHAR 时,VARCHAR 的最小宽度为 6。
INT44 字节-INT8、VARCHARINT4 转 VARCHAR 时,VARCHAR 的最小宽度为 11。
INT88 字节-VARCHARINT8 转 VARCHAR 时,VARCHAR 的最小宽度为 20。
FLOAT44 字节-FLOAT、VARCHARREAL 转 VARCHAR 时,VARCHAR 的最小宽度为 30。
FLOAT88 字节-VARCHARFLOAT 转 VARCHAR 时,VARCHAR 的最小宽度为 30。
CHAR1 字节1023NCHAR、VARCHAR、NVARCHARCHAR 转 NCHAR 或 NVARCHAR 时,NCHAR 或 NVARCHAR 的宽度不得小于原宽度的 ¼。
VARCHAR254 字节65536 字节CHAR、NCHAR、NVARCHAR、INT2、INT4、INT8、REAL、FLOATVARCHAR 转 NCHAR 或 NVARCHAR 时,NCHAR 和 NVARCHAR 的宽度不得小于原宽度的 ¼。
NCHAR1 字符254 字符CHAR、VARCHAR、NVARCHARNCHAR 转 CHAR 或 VARCHAR 时,CHAR 和 VARCHAR 的宽度不得小于原宽度的 4 倍。
NVARCHAR63 字符16384 字符CHAR、VARCHAR、NCHARNVARCHAR 转 CHAR 或 VARCHAR 时,CHAR 和 VARCHAR 的宽度不得小于原宽度的 4 倍。标签不支持该类型。

创建时序数据库

CREATE TS DATABASE ts_db;
SHOW databases;

创建时序数据表

use ts_db;
CREATE TABLE sensor_data (
k_timestamp TIMESTAMP NOT NULL,
temperature FLOAT NOT NULL,
humidity FLOAT,
pressure FLOAT
) TAGS (
sensor_id INT NOT NULL,
sensor_type VARCHAR(30) NOT NULL
) PRIMARY TAGS (sensor_id);

show tables;

插入时序数据

INSERT INTO public.sensor_data (k_timestamp,temperature,humidity,pressure,sensor_id,sensor_type)
VALUES ('now()',2.0,3.0,4.0,3,'2');

查询时序数据

select * from sensor_data sd where sd.sensor_id =0;

删除数据

delete from sensor_data sd where sd.sensor_id = 0;

总结

从初见KWDB到使用KWDB,KWDB非常的棒,目前已经浅试了一下,在关系数据库和时序数据库的存储上非常优秀,因为兼容PG协议,这使得也不需要额外的学习成本,可以快速的上手KWDB,还能和其他的业务数据库进行快速的迁移替换。另外作为国产数据库,能够达到这样的水准。特别是超高的压缩率,和分布式的扩展能力,还有完整的解决方案,生态能力。我相信,KWDB肯定会越来越好。

### KWDB 数据库的深入剖析 #### 1. KWDB 的架构特性 KWDB 是一款专为 AIoT(人工智能物联网)场景设计的国产开源数据库。它的存储引擎是整个系统的基石,决定了其性能表现和适用范围[^1]。以下是 KWDB 的主要架构特性和优势: - **高并发写入支持** 面向 IoT 设备产生的高频次、低延迟数据流,KWDB 提供高效的写入机制,能够在大规模设备接入的情况下保持稳定的吞吐率。 - **时序数据压缩优化** 对于时间序列数据,KWDB 运用了多种压缩算法来减少磁盘占用并提升读取效率。这种优化特别适合监控系统、工业自动化等领域中的大量历史数据分析需求[^1]。 - **高效检索能力** 借助索引结构以及分布式计算框架的支持,KWDB快速定位目标记录集合,在复杂查询条件下仍能维持良好的响应速度。 - **可扩展性与分布部署灵活性** 支持水平分片策略下的动态扩容缩容功能,允许用户根据业务增长调整资源分配方案;同时兼容单机模式到集群环境的不同运行形态。 #### 2. 技术实现细节 从源码层面来看,KWDB 采用模块化设计理念构建其核心组件——即存储引擎部分。具体而言,该子系统由以下几个关键环节组成[^1]: - **WAL (Write-Ahead Logging)** 在每次事务提交前先将变更日志持久化至硬盘文件中,从而保障即使发生意外宕机事件也不会丢失未保存的数据修改内容。 - **内存表管理器** 将最近访问频繁的对象缓存起来以加速后续请求处理过程,同时也负责协调不同线程间对于共享资源的竞争关系。 - **磁盘布局规划工具** 定义如何物理上组织实际存储单元上的键值对排列方式,直接影响随机查找成本及时延指标等方面的表现效果。 #### 3. 应用场景探讨 基于上述提到的技术特点,可以预见 KWDB 主要适用于如下几类典型应用场景: - **智能家居平台后台支撑服务** - 当前越来越多的家庭开始引入各种智能化硬件设施比如温控面板或者安防摄像头等等,这些装置每天都会上传大量的状态更新报告给云端服务器端进行汇总统计工作。而借助 KWDB 出色的时间维度关联分析能力和灵活的空间划分选项,则完全可以胜任此类任务的需求满足程度评估标准之上。 - **车联网大数据解决方案提供商** - 现代汽车制造业正在经历一场深刻的数字化转型浪潮,其中很重要的一环就是围绕车辆行驶轨迹及其衍生出来的各类附加价值展开探索研究活动。因此如果选用 KWDB 来充当这类项目的底层基础设施的话,那么不仅可以有效应对海量位置坐标点位信息录入压力测试挑战之外,还能够充分利用内置函数完成诸如路径重建之类的高级运算逻辑操作流程简化目的达成共识之间建立桥梁作用发挥出来。 - **金融风控预警体系搭建者** - 在银行信贷审批过程中往往涉及到多个维度的风险因子考量因素综合评判决策依据制定原则遵循情况审查核实确认手续办理进度跟踪反馈意见收集采纳改进措施落实执行监督考核评价结果公布透明度增强公众信任感营造氛围促进健康发展态势形成良性循环链条运转顺畅无阻滞现象出现几率降低风险防控等级提高安全保障系数增加经济效益最大化追求目标接近现实可能性增大成功概率上升趋势明显可见成果显著值得推广借鉴意义非凡影响深远令人期待未来发展前景广阔无限可能等待发掘创造奇迹时刻即将到来让我们共同见证这一伟大历程吧! ```python import kwdb # 创建连接实例 conn = kwdb.connect(host='localhost', port=9086, user='root', password='password') # 插入一条时间戳标记的日志条目 with conn.cursor() as cursor: sql = """INSERT INTO logs(timestamp, message) VALUES (%s, %s)""" cursor.execute(sql, ('2023-10-07 14:30:00', 'System started')) # 查询过去一天内的所有告警消息 sql_query = """ SELECT * FROM alarms WHERE timestamp >= NOW() - INTERVAL 1 DAY ORDER BY id DESC LIMIT 10; """ result_set = conn.query(sql_query) for row in result_set: print(f"{row['id']} | {row['timestamp']} | {row['level']} | {row['description']}") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值