前言
Taos 主要针对物联网使用,物联网设备的特点是:设备基本有固定的上报数数据,上报的数据有时序性。设备种类不同,上报的数据格式不同。设备数据格式千变万化,需要根据具体设备创建具体的数据模型
Taos关键词概念
库: 单纯的数据库。所有的超级表、表都属于库。在创建表之前,必须先创建库。处于两个不同库的表是不能进行JOIN操作的。
超级表: 表的模板, 可以包含表。 目的是整合同一类数据,共享相同的静态属性字段(不是值,只是字段,例如:每个表都有一个位置字段,后续设备)。每一种类型的数据采集点创建一个超级表
举例:
每一种设备需要创建一个超级表:例如:电网中有电表数据、变压器数据、开关数据,我们足以给每一个设备创建一个超级表。
同一种设备有可能上报多种类型的数据,例如:电表,有的采集电流、电压数据,有的采集有功、无功数据,这样就得给每一种数据格式都创建一个超级表原则:
超级表中的所有字段数据,必须是同一时间上报的
表:可以属于某个超级表,每一个设备拥有一张表。表名用设备ID命名,如果设备没有ID,通过上报字段组合一个唯一字段作为表名(设备表名用设备ID名吗不是必须的,但是建议这么做)
举例:
比如我在一个工厂安装了100块采集电流、电压的电表,这一百块电表上报的数据格式都是一样的,我们就只需要创建一个超级表,这个超级表里包含了100个表,每个表的表名就是电表的ID
多列模型与单列模型:多列模型就是只一张表里有多个字段,只要上报数据是一个数据采集点同时采集的(时间戳一致),这些数据就可以作为不同列放在一张超级表里。
单列模型就是一张表里只有一个字段,比如电流、电压、相位,就建三张超级表。
TDengine建议尽可能采用多列模型,因为插入效率以及存储效率更高。但对于有些场景,一个采集点的采集量的种类经常变化,这个时候,如果采用多列模型,就需要频繁修改超级表的结构定义,让应用变的复杂,这个时候,采用单列模型会显得简单。
TAOS 类型定义关键词
# | 类型 | Bytes | 说明 |
---|---|---|---|
1 | TIMESTAMP | 8 | 时间戳。缺省精度毫秒,可支持微秒。从格林威治时间 1970-01-01 00:00:00.000 (UTC/GMT) 开始,计时不能早于该时间。(从 2.0.18.0 版本开始,已经去除了这一时间范围限制) |
2 | INT | 4 | 整型,范围 [-2^31+1, 2^31-1], -2^31 用作 NULL |
3 | BIGINT | 8 | 长整型,范围 [-2^63+1, 2^63-1], -2^63 用于 NULL |
4 | FLOAT | 4 | 浮点型,有效位数 6-7,范围 [-3.4E38, 3.4E38] |
5 | DOUBLE | 8 | 双精度浮点型,有效位数 15-16,范围 [-1.7E308, 1.7E308] |
6 | BINARY | 自定义 | 记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 nchar。理论上,最长可以有 16374 字节,但由于每行数据最多 16K 字节,实际上限一般小于理论值。binary 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 binary(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 byte 的存储空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 ’。 |
7 | SMALLINT | 2 | 短整型, 范围 [-32767, 32767], -32768 用于 NULL |
8 | TINYINT | 1 | 单字节整型,范围 [-127, 127], -128 用于 NULL |
9 | BOOL | 1 | 布尔型,{true, false} |
10 | NCHAR | 自定义 | 记录包含多字节字符在内的字符串,如中文字符。每个 nchar 字符占用 4 bytes 的存储空间。字符串两端使用单引号引用,字符串内的单引号需用转义字符 ’。nchar 使用时须指定字符串大小,类型为 nchar(10) 的列表示此列的字符串最多存储 10 个 nchar 字符,会固定占用 40 bytes 的空间。如果用户字符串长度超出声明长度,将会报错。 |
常见问题解答
表可以不属于某个超级表吗?
答:可以的,在创建表时,如果关联了超级表,则此表就属于超级表,如果不关联,就属于一个独立的表
超级表的主键必须为时间戳吗?可以改吗?
答: 超级表的主键必须时时间戳,默认精度为毫秒时间戳,在创建数据库时,可以通过传递 PRECISION
参数,这样时间戳就支持微秒了
创建超级表命令有的是 create table
, 有的是 create stabel
, 为什么?
答: taosd版本在2.0.15.0之前,创建超级表命令为 create table
, 在2.0.15.0及以后的版本中,增加了关键词 stable
, 所以创建超级表命令就变成了create stabel