CnosDB 是一款高性能、高压缩率、高易用性的开源分布式时序数据库。主要应用场景为物联网,工业互联网,车联网,IT运维等。所有代码均已在GitHub开源。
我们在设计上充分利用了时序数据特点,包括结构化数据、无事务、较少的删除更新、写多读少等等,因此相比其它时序数据库,CnosDB 有以下特点:
- 高性能:CnosDB 解决了时间序列膨胀,理论上支持时间序列无上限,支持沿时间线的聚合查询,包括按等间隔划分窗口的查询、按某列枚举值划分窗口的查询、按相邻时序记录的时间间隔长度划分窗口。具备对最新数据的缓存能力,并且可以配置缓存空间,能够高速获取最新数据。
- 简单易用:CnosDB 提供清晰明了的接口,简单的配置项目,支持标准SQL,轻松上手,与第三方工具生态无缝集成,拥有便捷的数据访问功能。支持 schemaless ("无模式")的写入方式,支持历史数据补录(含乱序写入)。
- 云原生: CnosDB 有原生的分布式设计、数据分片和分区、存算分离、Quorum 机制、Kubernetes 部署和完整的可观测性,具有最终一致性,能够部署在公有云、私有云和混合云上。提供多租户的功能,有基于角色的权限控制。支持计算层无状态增减节点,储存层水平扩展提高系统存储容量。
我们支持以下平台,如果发现可以在列表以外的平台上运行, 请报告给我们。
- Linux x86(
x86_64-unknown-linux-gnu
) - Darwin arm(
aarch64-apple-darwin
)
- 安装
Rust
,可前往官网下载安装 - 安装Cmake
# Debian or Ubuntu
apt-get install cmake
# Arch Linux
pacman -S cmake
# CentOS
yum install cmake
# Fedora
dnf install cmake
# macOS
brew install cmake
- 安装FlatBuffers
# Arch Linux
pacman -S flatbuffers
# Fedora
dnf install flatbuffers
# Ubuntu
snap install flatbuffers
# macOS
brew install flatbuffers
如果您的系统不在此列,可按照如下方法安装FlatBuffers
$ git clone -b v22.9.29 --depth 1 https://github.com/google/flatbuffers.git && cd flatbuffers
# 根据操作系统选择以下命令之一
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
$ cmake -G "Visual Studio 10" -DCMAKE_BUILD_TYPE=Release
$ cmake -G "Xcode" -DCMAKE_BUILD_TYPE=Release
$ sudo make install
git clone https://github.com/cnosdb/cnosdb.git && cd cnosdb
make build
以下为单节点启动,如需启动集群,见集群启动流程
./target/debug/cnosdb-meta --id 1 --http-addr 127.0.0.1:21001
curl http://127.0.0.1:21001/init -d '{}'
curl http://127.0.0.1:21001/metrics
./target/debug/cnosdb run --config ./config/config_31001.toml
cargo run --package client --bin cnosdb-cli
-
安装 Docker
-
使用 Docker 启动容器
docker run --name cnosdb -d --env cpu=2 --env memory=4 -p 31007:31007 cnosdb/cnosdb:v2.0.1
- 进入容器
docker exec -it cnosdb sh
- 运行
cnosdb-cli
cnosdb-cli
退出请输入
\q
查看帮助请输入\?
更多内容请查看基本操作
下面将展示使用cli进行SQL写入的例子
- 创建表
CREATE TABLE air (
visibility DOUBLE,
temperature DOUBLE,
pressure DOUBLE,
TAGS(station)
);
public ❯ CREATE TABLE air (
visibility DOUBLE,
temperature DOUBLE,
pressure DOUBLE,
TAGS(station)
);
Query took 0.063 seconds.
- 插入一条数据
INSERT INTO air (TIME, station, visibility, temperature, pressure) VALUES
(1673591597000000000, 'XiaoMaiDao', 56, 69, 77);
public ❯ INSERT INTO air (TIME, station, visibility, temperature, pressure) VALUES
(1673591597000000000, 'XiaoMaiDao', 56, 69, 77);
+------+
| rows |
+------+
| 1 |
+------+
Query took 0.032 seconds.
- 插入多条数据
INSERT INTO air (TIME, station, visibility, temperature, pressure) VALUES
('2023-01-11 06:40:00', 'XiaoMaiDao', 55, 68, 76),
('2023-01-11 07:40:00', 'DaMaiDao', 65, 68, 76);
public ❯ INSERT INTO air (TIME, station, visibility, temperature, pressure) VALUES
('2023-01-11 06:40:00', 'XiaoMaiDao', 55, 68, 76),
('2023-01-11 07:40:00', 'DaMaiDao', 65, 68, 76);
+------+
| rows |
+------+
| 2 |
+------+
Query took 0.038 seconds.
- SQL,兼容SQL标准
- Prometheus remote read
下面将展示使用cli进行SQL查询的例子
-- 查询表数据
SELECT * FROM air;
public ❯ -- 查询表数据
SELECT * FROM air;
+---------------------+------------+------------+-------------+----------+
| time | station | visibility | temperature | pressure |
+---------------------+------------+------------+-------------+----------+
| 2023-01-11T06:40:00 | XiaoMaiDao | 55 | 68 | 76 |
| 2023-01-13T06:33:17 | XiaoMaiDao | 56 | 69 | 77 |
| 2023-01-11T07:40:00 | DaMaiDao | 65 | 68 | 76 |
+---------------------+------------+------------+-------------+----------+
Query took 0.036 seconds.
- Java: 支持JDBC和Java Arrow Flight
- C++: 支持ODBC和C++ Arrow Flight
- Go
- Python: 符合Python数据访问规范(PEP 249)
- Rust
欢迎所有热爱时序数据库的开发者/用户参与到CnosDB User Group中。扫描下方二维码,加CC为好友,即可入群。
入群前请查看入群须知
请参照贡献指南成为CnosDB的Contributor。
- CnosDB 2.0使用Apache Arrow作为内存模型。
- CnosDB 2.0的查询引擎基于Apache Arrow DataFusion构建。