CeresDB 1.0 正式发布,Rust 高性能云原生时序数据库


CeresDB 是一款高性能、分布式的云原生时序数据库,采用 Rust 编写。其开发团队近日宣布:经过近一年的开源研发工作,时序数据库 CeresDB 1.0 正式发布,达到生产可用标准

CeresDB 1.0 官方中文文档:https://docs.ceresdb.io/cn/


CeresDB 1.0 核心特性介绍

存储引擎

  • 支持列式混合存储

  • 高效 XOR 过滤器

云原生分布式

  • 实现了计算存储分离(支持 OSS 作为数据存储,WAL 实现支持 OBKV、Kafka)

  • 支持 HASH 分区表

部署与运维

  • 支持单机部署

  • 支持分布式集群部署

  • 支持 Prometheus + Grafana 搭建自监控

读写协议

  • 支持 SQL 查询与写入

  • 实现了 CeresDB 内置高性能读写协议,提供多语言 SDK

  • 支持 Prometheus,可以作为 Prometheus 的 remote storage 进行使用

多语言读写 SDK

  • 实现了四种语言的客户端SDK:Java、Python、Go、Rust

CeresDB 架构介绍

CeresDB 是一个时序数据库,与经典时序数据库相比,CeresDB 的目标是能够同时处理时序型和分析型两种模式的数据,并提供高效的读写。

在经典的时序数据库中,Tag列(InfluxDB称之为TagPrometheus称之为Label)通常会对其生成倒排索引,但在实际使用中,Tag的基数在不同的场景中是不一样的 ———— 在某些场景下,Tag的基数非常高(这种场景下的数据,我们称之为分析型数据),而基于倒排索引的读写要为此付出很高的代价。而另一方面,分析型数据库常用的扫描 + 剪枝方法,可以比较高效地处理这样的分析型数据。

因此 CeresDB 的基本设计理念是采用混合存储格式和相应的查询方法,从而达到能够同时高效处理时序型数据和分析型数据。

下图展示了 CeresDB 单机版本的架构

┌──────────────────────────────────────────┐
│ RPC Layer (HTTP/gRPC/MySQL)│
└──────────────────────────────────────────┘
┌──────────────────────────────────────────┐
│ SQL Layer│
│ ┌─────────────────┐┌─────────────────┐ │
│ │ Parser││ Planner │ │
│ └─────────────────┘└─────────────────┘ │
└──────────────────────────────────────────┘
┌───────────────────┐┌───────────────────┐
│Interpreter││Catalog│
└───────────────────┘└───────────────────┘
┌──────────────────────────────────────────┐
│ Query Engine │
│ ┌─────────────────┐┌─────────────────┐ │
│ │Optimizer││Executor │ │
│ └─────────────────┘└─────────────────┘ │
└──────────────────────────────────────────┘
┌──────────────────────────────────────────┐
│ Pluggable Table Engine │
│┌────────────────────────────────────┐│
││Analytic││
││┌────────────────┐┌────────────────┐││
│││Wal ││Memtable│││
││└────────────────┘└────────────────┘││
││┌────────────────┐┌────────────────┐││
│││ Flush││ Compaction │││
││└────────────────┘└────────────────┘││
││┌────────────────┐┌────────────────┐││
│││Manifest││Object Store│││
││└────────────────┘└────────────────┘││
│└────────────────────────────────────┘│
│┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ Another Table Engine││
│└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
└──────────────────────────────────────────┘

性能优化与实验结果

CeresDB 组合使用了列式混合存储、数据分区、剪枝、高效扫描等技术,解决海量时间线(high cardinality)下写入查询性能变差的问题。

写入优化

CeresDB 采用类 LSM(Log-structured merge-tree)写入模型,无需在写入时处理复杂的倒排索引,因此写入性能上较好。

查询优化

主要采用以下技术手段提高查询性能:

剪枝:

  • min/max 剪枝:构建代价比较低,在特定场景,性能较好

  • XOR 过滤器:提高对 parquet 文件中的 row group 的筛选精度

高效扫描:

  • 多个 SST 间并发:同时扫描多个 SST 文件

  • 单个 SST 内部并发:支持 Parquet 层并行拉取多个 row group

  • 合并小 IO:针对 OSS 上的文件,合并小 IO 请求,提高拉取效率

  • 本地 cache:缓存 OSS 拉取文件,支持内存和磁盘缓存

性能测试结果

采用 TSBS 进行性能测试。压测参数如下:

  • 10个 Tag

  • 10 个 Field

  • 时间线(Tags 组合数)100w 量级

压测机器配置:24c90g

InfluxDB 版本:1.8.5

CeresDB 版本:1.0.0

写入性能对比

InfluxDB 写入性能随着时间下降较多。CeresDB 在写入稳定后,写入速率趋于平稳,并且总体写入性能表现为 InfluxDB 的 1.5 倍以上(一段时间后可达 2 倍以上差距)

下图中,单行 row 包含 10 个 Field。

上图为Influxdb,下图为CeresDB

查询性能对比

低筛选度条件(条件:os=Ubuntu15.10),CeresDB 比 InfluxDB 快 26 倍,具体数据如下:

  • CeresDB 查询耗时:15s

  • InfluxDB 查询耗时:6m43s

高筛选度条件(命中的数据较少,条件:hostname=[8个],此时理论上传统倒排索引会更有效),这是 InfluxDB 更有优势的场景,此时在预热完成条件下,CeresDB 比 InfluxDB 慢 5 倍。

  • CeresDB:85ms

  • InfluxDB:15ms


2023 年 roadmap

开发团队表示,2023 年,在 CeresDB 1.0 发布之后,他们大部分工作将聚焦在性能、分布式与周边生态方面的工作。尤其周边生态的对接支持工作,希望能让各种不同的用户更加简单的用上 CeresDB:

周边生态

  • 生态兼容,包括 PromQL、InfluxdbQL、OpenTSDB 等常用时序数据库协议兼容

  • 运维工具支持,包括 k8s 支持、CeresDB 运维系统、自监控等

  • 开发者工具,包括数据导入导出等

性能

  • 探索新的存储格式

  • 增强不同类型索引,强化 CeresDB 在不同工作负载下的表现

分布式

  • 自动负载均衡

  • 提高可用性、可靠性


相關推薦

2023-03-11

test cases,在 v0.3 版本中通过 70% 以上。 Protocol 新版高性能通信协议 基于 Arrow Flight RPC 构建,相比原来的 gRPC 私有协议,现在更加简洁高效,也很方便多种语言利用 Arrow Flight 的 SDK 直接与 GreptimeDB 通信。对 Stream 的支持也

2023-04-05

t 1.0 已发布,标志着项目已顺利从开发阶段“毕业”,可正式用于生产环境。 1.0 文档:https://slint-ui.com/releases/1.0.0/docs/slint/ Slint(最初称为"SixtyFPS")是一个 Rust 编写的综合性 UI 工具包,用于为桌面和嵌入式设备构建原生用户

2023-07-13

台模板、提升效率的主题配置系统。 新发布项目二:高性能服务网格—Kmesh 服务网格作为云原生的下一代技术,已逐步成为云上基础设施标配,但其sidecar架构存在性能问题,是当前网格技术推广的关键;Kmesh高性能服务网

2023-03-17

nGemini 开源后持续版本迭代,现已发布 v1.0.0 版本,在高性能、高安全、企业级特性、可扩展性、功能、应用开发等六个方面已全面具备生产环境可使用的完整能力。 高性能 openGemini 针对物联网、运维监控等领域海量数

2023-04-05

nbsp;现已发布,Apache IoTDB 是一个物联网原生数据库,具有高性能的数据管理和分析功能,可部署在边缘和云端。 新功能 [IOTDB-4572] 支持按设备对齐按时间排序 [IOTDB-4816] 支持显示查询命令 [IOTDB-4817] 支持kill查询命令 [IOTDB-50

2023-11-16

布 🍀 OpenNJet Ingress Controller基于opennjet proxy的动态特性、高性能实现。弥补了nginx 在云原生场景中应用的不足。 🍀 OpenNJet Ingress Controller提供了丰富的流量管理功能,如动态location、host / path路由、负载均衡、动态upstream、金丝

2023-08-22

,支持告警屏蔽、告警抑制、告警自愈、告警事件管理 高性能可视化引擎:支持多种图表样式,内置众多Dashboard模版,也可导入Grafana模版,开箱即用,开源协议商业友好 无缝搭配 Flashduty:实现告警聚合收敛、认领、升

2022-06-20

Tauri 1.0 已正式发布。 Tauri 是一个桌面 UI 框架,可让开发者使用每个平台的 Webview 技术栈为所有主要桌面操作系统构建应用程序,目前支持 Windows/macOS/Linux 等平台。开发者通过 Tauri 几乎可以使用任何编译为 HTML、JS 和 CSS 的前端

2023-10-18

astral.sh。 详情查看发布公告。 Ruff 是基于 Rust 编写的高性能 Python 代码分析工具(即 Linter),用于检查代码中的语法错误、编码规范问题、潜在的逻辑问题和代码质量问题等,可以提供实时反馈和自动修复建议。其主打的特

2022-02-16

夜莺5.0发版之后,前面两周社区反馈了一些问题,做了集中修复系统很快稳定了,感谢社区小伙伴们的支持。近期又增加了一些新的优化项,这里给大家罗列一下,有兴趣的小伙伴可以升级尝试。 注意:如果是从低版本升级

2022-12-25

Meson 1.0 已正式发布,此版本带来如下增强改动: 支持带有“prefix”关键字参数的数组, 从 cpp/objcpp 警告级别 1 中删除一些标志 各种开发环境改进 支持字符串上的“in”运算符 “warning-level= everything”选项 Rust 模块被

2023-02-10

可用于生产环境且向前兼容。 Meilisearch 是 Rust 实现的高性能开源搜索引擎,支持方便地集成到任何网站或应用程序,支持自托管 (self-hosting),可作为 Algolia 和 Elasticsearch 的轻量替代方案。Meilisearch 内置了许多实用功能,比如

2023-08-29

,支持告警屏蔽、告警抑制、告警自愈、告警事件管理 高性能可视化引擎:支持多种图表样式,内置众多Dashboard模版,也可导入Grafana模版,开箱即用,开源协议商业友好 无缝搭配 Flashduty:实现告警聚合收敛、认领、升

2022-08-20

据的建模和查询,同时保留了经典关系数据库的可靠性和高性能。 在 EdgeDB 出现之前,使用传统关系数据库搭建应用程序往往需要用到各种关系对象映射(ORM)和额外的中间件,它们曾经是数据建模、迁移和查询所必不可少的