常见问题
- GreptimeDB 是什么 / 适用场景 → 为什么选择 GreptimeDB
- 性能基准测试 → 功能特性
- Metrics、Logs、Traces 支持 → 功能特性
- 高基数处理 → 功能特性
- 数据模型 → 数据模型
通用问题
哪里可以找到开箱即用的 Demo?
可以看 demo-scene 仓库,里面有覆盖常见场景(metrics、logs、IoT 等)的端到端示例,本地用 Docker Compose 即可运行。
GreptimeDB 的性能表现如何?
GreptimeDB 针对 metrics、logs、traces 场景优化,写入吞吐高、查询延迟低、存储成本低。以下是已发布的基准测试报告:
- GreptimeDB vs. InfluxDB
- GreptimeDB vs. TimescaleDB
- GreptimeDB vs. Grafana Mimir
- GreptimeDB vs. ClickHouse vs. Elasticsearch(日志基准测试)
- GreptimeDB vs. SQLite
- GreptimeDB vs. Loki
- JSONBench 10 亿条冷查询 #1
架构层面的对比参见对比表格。
GreptimeDB 的设计权衡有哪些?
GreptimeDB 针对可观测性和时序工作负载做了专门优化,与通用 OLTP 数据库有不同的取舍:
- 不支持 ACID 事务:优先保证高吞吐写入,而非事务一致性。
- 支持删除,但不适合高频删除场景:GreptimeDB 支持数据删除和基于 TTL 的自动过期, 但不适合需要频繁细粒度删除的场景——可观测性数据本身就是追加为主的。
- 面向时序数据:针对 IoT、metrics、logs、traces 优化,而非通用 OLTP。
GreptimeDB 和 InfluxDB 有什么区别?
主要区别:
- 开源策略:GreptimeDB 的整个分布式系统完全开源。
- 架构:基于 Region 的分片设计,针对可观测性工作负载优化。
- 查询语言:SQL + PromQL vs. InfluxQL + SQL。
- 统一模型:在一个系统中原生支持 metrics、logs 和 traces。
- 存储:可插拔引擎,针对不同场景做专项优化。
- 云原生:原生支持 Kubernetes,计算存储分离(参见 Kubernetes 部署指南)。
详细对比参见 GreptimeDB vs InfluxDB。更多产品对比(如 vs. ClickHouse、Loki 等)可在官网的对比菜单中找到。
数据模型与 Schema
Tag 列和 Field 列有什么区别?
GreptimeDB 使用三种语义列类型:Tag、Timestamp 和 Field。
- Tag 列用于标识时间序列。具有相同 Tag 值的行属于同一条时间序列。Tag 列默认加入主键索引,查询过滤快。在 SQL 中通过
PRIMARY KEY声明。 - Field 列存储实际测量值(数值、字符串等)。Field 列默认不建索引,但可以按需添加索引。
- Timestamp 是时间索引,每张表必须有且仅有一个。
例如,在 system_metrics 表中,host 和 idc 是 Tag,cpu_util 和 memory_util 是 Field,ts 是 Timestamp。
GreptimeDB 支持无 Schema 写入吗?
支持。通过 gRPC、InfluxDB Line Protocol、OpenTSDB、Prometheus Remote Write、OpenTelemetry、Loki 或 Elasticsearch 兼容 API 写入时,GreptimeDB 会在首次写入时自动创建表和列,无需手动定义 Schema。
详见自动 Schema 生成。
使用自动建表时,如何指定默认的表选项(TTL、append mode 等)?
有三种方式为自动创建的表设置 ttl、append_mode、merge_mode、skip_wal、sst_format 等表选项:
-
写入时通过 HTTP Header 指定:在请求中添加
x-greptime-hints头传递表选项,例如x-greptime-hints: ttl=7d, append_mode=true,表在自动创建时会应用这些选项。详见 HTTP Hints。 -
建表后通过 ALTER TABLE 修改:部分选项支持在建表后修改,包括
ttl、append_mode、compaction.*和sst_format:ALTER TABLE my_table SET 'ttl' = '7d';
ALTER TABLE my_table SET 'append_mode' = 'true';注意
merge_mode和skip_wal不支持建表后修改,必须在建表时指定。所有支持的选项和约束参见 ALTER TABLE。 -
设置数据库级别的默认选项:创建或修改数据库时指定默认选项,后续自动创建的表会继承这些值:
CREATE DATABASE my_db WITH (ttl = '7d', append_mode = 'true');
-- 或
ALTER DATABASE my_db SET 'ttl' = '7d';其中
ttl和compaction.*选项具有持续效果——没有单独设置的表会一直继承数据库的值。其他选项(append_mode、merge_mode、skip_wal、sst_format)仅作为新建表的默认值。所有可用选项参见 CREATE DATABASE。