数据模型
模型
GreptimeDB 使用时序表来进行数据的组织、压缩和过期管理。数据模型主要基于关系型数据库中的表模型,同时考虑到了指标(metrics)、日志(logs)及事件(events)数据的特点。
GreptimeDB 中的所有数据都被组织成表,每个表中的数据项由三种类型的列组成:Tag
、Timestamp
和 Field
。
- 表名通常与指标、日志的名称相同。
Tag
列中存储经常被查询的元数据,其中的值是数据源的标签,通常用于描述数据的特定特征。Tag
列具有索引,所以使用Tag
列的查询具备良好的性能。Timestamp
是指标、日志及事件的时序数据库的基础,它表示数据生成的日期和时间。Timestamp 具有索引,所以使用Timestamp
的查询具有良好的性能。一个表只能有一个Timestamp
列,被称为时间索引列。- 其他列是
Field
列,其中的值是被收集的数据指标或日志。这些指标通常是数值或字符串,但也可能是其他类型的数据,例如地理位置。Field
列默认情况下没有被索引,对该字段做过滤查询会全表扫描。这可能会消耗大量资源并且性能较差,但是字符串字段可以启用全文索引,以加快日志搜索等查询的速度。
Metric 表
假设我们有一个名为 system_metrics
的时间序列表 用于监控独立设备的资源使用情况。
CREATE TABLE IF NOT EXISTS system_metrics (
host STRING,
idc STRING,
cpu_util DOUBLE,
memory_util DOUBLE,
disk_util DOUBLE,
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(host, idc),
TIME INDEX(ts)
);
该表的数据模型如下:
这与大家熟悉的表模型非常相似。不同之处在于 Timestamp
约束,它用于将 ts
列指定为此表的时间索引列。
- 表名为
system_metrics
。 - 对于
Tag
列,host
列表示收集的独立机器的主机名,idc
列显示机器所在的数据中心。这些是查询元数据,可以在查询时有效地过滤数据。 Timestamp
列ts
表示收集数据的时间。使用该列查询具有时间范围的数据时具备较高的性能。Field
列中的cpu_util
、memory_util
、disk_util
和load
列分别表示机器的 CPU 利用率、内存利用率、磁盘利用率和负载。 这些列包含实际的数据并且不被索引,但是可以被高效地计算,例如求最大最小值、均值和百分比分布等。 请避免在查询条件中使用Field
列,这会消耗大量资源并且性能较差。
Log 表
你还可以创建一个日志表用于存储访问日 志:
CREATE TABLE access_logs (
access_time TIMESTAMP TIME INDEX,
remote_addr STRING,
http_status STRING,
http_method STRING,
http_refer STRING,
user_agent STRING,
request STRING FULLTEXT,
PRIMARY KEY (remote_addr, http_status, http_method, http_refer, user_agent)
)
其中: