00:00
那么现在呢,我们给大家补充一个知识点,就是我们刚才在导入数据的时候呢,啊使用的是行协议的方式,那么什么是行协议呢?行协议实际上是英Fla DB自己提出的一种数据格式,你只要这个数据呢,满足这个行协议的格式,满足它的规范,那么你就可以使用inlux DB的API,然后把数据写到in inlux DB里面。呃,这一节呢,我们就给大家详细介绍一下这个英拉斯蒂比航协议。如果说之前有学过我们这个上硅谷台里graph课程的同学呢,啊,可以跳过这一部分,因为在那个课程里面我们也介绍过这个英拉斯比航协议。呃,In DB行协议呢,首先这个数据呢,它是按一行一行分隔的,然后一行呢,就是一条数据,然后每一条数据呢,它有四个组成部分。啊,分别是measurement,也就是这个测量名称,还有就是标签级,字段级和时间戳。这个measurement呢,实际上你可以把它等同于啊,我们普通的关系型数据库中的表啊,只不过呢,在这个in Fla DB里面,你没有必要手动去创建表啊,大家刚才看到我们这个插入数据的过程中,我们只去指定了这个bucket,也就是只去指定了我们的存储桶,相当于普通关系型数据库中的数据库啊,但是我我们呢,并没有去create table,我们没有创建一张表啊,那么这个呢,说明了拉斯TB它是一个无模式的啊数据库,也就是说啊,你在这个像英TB去插入数据时呢,没有必要去创建一张表,或者是或者说指定这张表有哪些固定的字段啊,这个过程呢,是in Fla DB后面自动帮你完成的。
01:47
那么现在呢,我们还是来看行协议啊,首先呢,测量名称啊,我们刚才说相当于一个表明,那么这个肯定是不能省略的,另外呢,你会发现这个行协议里面呢,它还有一个东西叫做标签集。
02:00
那么这个标签集是干什么用的呢?它其实相当于一个索引,相当于一个索引啊,假如说呢,你这里面再加一个这个标签集呢,可以方便我们后面很快速的去在这个数据库里面检索数据。那么我们现在回想一下我们刚才这个插入数据时的例子啊,我们写的这个数据呢,叫parking。啊,然后又指定了一个。这个呃,我们当前的这个车辆数,我们说是50,然后呢,又给了一个当前的时间戳。呃,把它复制一下。呃,我们刚才的这个数据格式是这样的,那么这个name等于50,它是标签集吗?哎,注意它不是,因为这个标签集和测量名称之间必须要用逗号分隔,而我们刚才的这个数据呢,哎,它是用空格分隔,那么用空格分格就成了什么呢?就成了字段机,所以说那等于50呢,实际上是我们行协议中的字段机。
03:03
那么标签集呢,它其实是可以省略的,也就是你在一行数据里面可以不加这个标签,也就相当于这个数据呢,它没有索引,直接用这个measurement啊,就可以查询到这条数据。好,那么这里呢,再详细讲一下这个标签级,那么标签集呢,实际上它是一堆建齿,对,我们可以看到这里面的TAG1啊,就是标签的K,那么value呢,就是标签的值啊,如果说呢,我们这里面有加标签的需求,那么我们的这个啊,数据的格式应该写成啊parking啊上面写错了,比如说我们现在啊有这个啊四个停车场,0123,那么我这里呢,可以说它的name啊,这个停车场的名字啊就叫零,然后当前的车辆的数目是50,然后后面呢是我们的时间戳。呃,这样的话呢,就是一个带标签的啊,行协议的数据我们可以看到呢,这里面其实你需要注意一个点,就是你的标签它的值呢,一定是可以枚举的啊,也就是它的值是有限的,比如说我停车场一共就四个啊,那么这个时候呢,像0123这种编号,或者说停车场名称,我们可以将它作为一个标签,那么如果说这个值呢,它不是无限的,它没有下限,没有上限,或者说它是一个小数,叭如说当前这个我们车的速度,如果说你用一个小数数表示车速,那么这个值的可能性呢?叭如说1.1 1.2 1.22 1.23,那么这种可能性是很多的,像这种字段呢,它就不适合去做标签啊,其实在in DB里面呢,对标签有严格的限制,也就是说啊,这里面的一个标签啊,它的取值的可能性呢啊,不能超过10万个啊,当然呢,在配置里面可以改,但是如果你改。
04:56
的话啊,是会影响性能的,另外就是如果标签的值过多的话,实际上到后期会影响你这个时序数据库的写入和插入性能啊,那后面的时候我们会专门拿出来讲这个问题。
05:11
好,那么接下来呢,我们还要注意就是标签级呢,它是一堆间值对,然后间值对之间呢,键和值之间的关系是用等于号来说明的,然后键值对之间的分格呢,是用英文逗号来来进行分隔的,另外就是我们的字段级,字段级就是我们当前的观测值,比如说我们刚才说的车速,或者说我这个停车场里面啊车的数量,通常来说呢,啊,这应该是一个数字类型的变量啊,可以是小数或者整数啊,那么字段集呢,其实这个是不可以省的啊,字段集是必须要有的啊,不过字段集啊,你这里面呢,它你可以看到啊,这个例子里面实际上是给了两个字段,其实这个字段呢啊,你可以给好几个啊,但是呢,至少要有一个,也就是说你必须要有一个,那么等于50,如果这个地方没有,那么等于50只有一个parking,那么这个行协议呢,它就是不合规范的。
06:05
最后要说的就是这个字段级呢,字段级前后呢,都是用空格去进行分隔,然后字段级本身也是个建制队,建制队之间呢,用逗号进行分隔啊,最后这个时间戳呢,可以看到我们这个例子里面呢,给的是一个纳秒级别的时间戳,纳秒进度的。呃,那么实际上呢,这个时间戳呢啊,你还可以给我们刚才看到你还可以给秒级毫秒级微秒级的啊,关键就是这个时间戳其实可以省略。那么一旦省略这个时间戳呢,实际上in TB呢,会自动帮我们补上这个时间戳,那么补上的这个时间戳呢,实际上就是我们这个插入这个操作进行的那一刻。那么这样一看呢,我上面这个写的parking,那么等于50其实也是合规的,也是可以往这个in DB里面直接写的。好,我们把这个给它清掉。呃,那么最后说一下呢,就是在这个in Fla DB里面呢,File的字段集,它其实呢,也能插字符串啊,这里面它包括这个可以指定一些类型,包括这个in发DB里面支持的类型啊,我们可以看一下。
07:13
我们看到这个,呃,协议中的这个数据类型及其格式。呃,首先呢,Float也就是浮点数啊,其实是默认的类型,刚才呢,我们写的,呃,这个parking,然后那等于50。实际上呢,这个50在这个in拉斯DB里面已经被存成了这个float类型,它是一个浮点数啊,50.0。呃,另外呢,就是我们还可以指定整数,那么在这个行协议里面呢,啊,对这个类型进行指定,实际上是用的这个尾注的方式,也就是在这一行的最后一项,最后这个地方,哎,加上一个类型的标识。啊,假如说我这个行协议写的是啊parking,然后那么等于。50I,那么它呢,就会是一个整数啊,另外除了整数之外呢,我们还可以看到,其实这里面它还支持无符号整数啊,无号整数的尾注呢,就是U,然后字符串就直接用这个双引号给它引起来啊,包括我们的这个布尔值啊,布尔值呢,它支持非常多的这个写法,比如你小写T大写T呢啊,它都可以给你识别成布尔值,最后呢,下面两个写的是这个时间戳和这个注释啊,这一部分呢,大家看就行了,注释是用这个井号开头。
08:29
呃,那么再往前呢,我们其实还可以看一下这个重点关注行协议中的空格。呃,我们之前呢,是把这个measurement呢当做关系型数据库中的表,严格来说呢,啊,这不是很准确,呃,我们可以看到呢,其实这个空格呢,分隔符,我们通常说分隔符呢,是把截然不同东西给它分开,哎那么为什么measurement和标签集之间不用空格呢?哎,实际上是因为这个measurement和标签集之间呢,哎,他们可以共同组成索引啊,然后这呢是一部分索引,然后空格呢,哎,把这个索引和这个被索引的数据给它分开,后面这个时间戳呢,又用一个空格啊,实际上呢,这个时间戳时间对于我们的时序数据库来说也是一个索引,所以说它其实是一个双索引的结构,首先有前面我们说的维度索引,另外就是一个有序的我们说的时间索引啊,这就是我们这个英拉斯DB的行协议的全部内容。
我来说两句