本章介绍 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 的机制。