本章介绍 HoraeDB 的数据模型。
1 - 数据类型
HoraeDB 实现了 Table
模型,支持的数据类型和 MySQL 比较类似。
下列表格列出了 HoraeDB 的数据类型和 MySQL 的数据类型的对应关系。
支持的数据类型 (大小写不敏感)
SQL | HoraeDB |
---|---|
null | Null |
timestamp | Timestamp |
double | Double |
float | Float |
string | String |
Varbinary | Varbinary |
uint64 | UInt64 |
uint32 | UInt32 |
uint16 | UInt16 |
uint8 | UInt8 |
int64/bigint | Int64 |
int32/int | Int32 |
int16/smallint | Int16 |
int8/tinyint | Int8 |
boolean | Boolean |
date | Date |
time | Time |
2 - 特殊字段
HoraeDB 的表的约束如下:
- 必须有主键
- 主键必须包含时间列,并且只能包含一个时间列
- 主键不可为空,并且主键的组成字段也不可为空
Timestamp 列
HoraeDB 的表必须包含一个时间戳列,对应时序数据中的时间,例如 OpenTSDB/Prometheus 的 timestamp
。
时间戳列通过关键字 timestamp key
设置,例如 TIMESTAMP KEY(ts)
。
Tag 列
Tag
关键字定义了一个字段作为标签列,和时序数据中的 tag
类似,例如 OpenTSDB 的 tag
或 Prometheus 的 label
。
主键
主键用于数据去重和排序,由一些列和一个时间列组成。 主键可以通过以下一些方式设置:
- 使用
primary key
关键字 - 使用
tag
来自动生成 TSID,HoraeDB 默认将使用(TSID,timestamp)
作为主键。 - 只设置时间戳列,HoraeDB 将使用
(timestamp)
作为主键。
注意:如果同时指定了主键和 Tag
列,那么 Tag
列只是一个额外的信息标识,不会影响主键生成逻辑。
|
|
TSID
如果建表时没有设置主键,并且提供了 Tag
列,HoraeDB 会自动生成一个 TSID
列和时间戳列作为主键。TSID
由所有 Tag
列的 hash 值生成,本质上这是一种自动生成 ID 的机制。