核心概念
数据库
Database 是表和其他对象的命名空间,用于组织和管理数据,但本身不等于完整的租户隔离边界。
Time-Series Table
GreptimeDB 的表使用关系 schema,并且有且仅有一个时间索引。列采用 Tag、Timestamp、Field 语义。时序表适合 metrics 和 IoT workload;logs、traces 和事件数据使用同一套表模型,但采用适合各自信号的 schema 和表选项。
表可以用 SQL 创建,也可以由支持的写入协议自动创建。分布式部署中,一张表可以拆成多个 Region,放置在不同的 Datanode 上。详见数据模型。
时间索引与主键
每张 GreptimeDB 表都有且只有一个时间索引。它记录样本或事件时间,存储引擎据此按时间组织和裁剪数据。
主键列采用 Tag 语义,用来标识一组时间序列或记录。对于开启去重的表,主键与时间索引共同标识数据行,并按表的 merge_mode进行合并。这里的主键不是通用关系数据库中的唯一约束:append-only 表可以不设置主键,append-only mode 也会把主键和时间戳重复的写入保留为不同数据行。
Table Engine
表引擎决定表数据如何写入、组织、compaction 和读取。主要引擎是:
- Mito Engine:用于一般的时间索引表,包括 logs、traces 和事件数据。
- Metric Engine:基于 Mito Engine,针对大量 Prometheus 风格的 metrics 表做优化。用户操作的 metrics 表仍是 logical table,内部可以共享 physical table 和 metadata。
表引擎与本地文件、Amazon S3、Google Cloud Storage 等 storage provider 是不同层次的抽象。详见表引擎和存储位置。
Region
Region 是表的物理分区,也是存储、调度和迁移的基本单位。Region 由 Datanode 承载,Metasrv 维护它的路由和放置 metadata。客户端通常通过 Frontend 访问表,不需要直接指定 Region。