TDengine初体验手记:从安装到集群

TDengine初体验手记:从安装到集群,第1张

文章目录 前言立即开始(服务器端ubuntu客户端(windows数据建模-超级表写入查询集群总结

前言

今天是5月14日,查了一下小蓝的骑行订单,上一次出校门还是3月13日,痛苦面具)

这几天在宿舍闲着把TDengine的整个安装、连接、查询、数据订阅、集群等基本功能按照文档体验了一遍。虽说我研究方向就是时间序列相似性,但其实看论文做实验这些基本上还是在搞数学问题,离产品比较遥远。正好借此机会学习一下~

大体上感觉还是蛮顺利的,也不是那种用起来很重的系统,不至于从入门到入土(给我的自闭生活多了点意思),当然也有遇到一些小坑。

以下先做一些流程上的简单记录,最后进行梳理和总结。


整个TDengine数据库系统结构分为服务端和客户端,两种支持的系统是不一样的

服务端只支持linux64位;(其实光服务端自己玩也可以)客户端版本包括linux64位、windows32位&64位。

我的设备条件比较简陋,就直接在自己电脑上整了个内存2G的虚拟机ubuntu16.04。搭集群的时候又开了俩1.5G内存的同规格玩。安装的TDengine版本都是2.4.0.18。

立即开始(服务器端ubuntu

原本下了32位的虚拟机,发现当前服务器端只有64位的版本,又重开了一个虚拟机。(整体的版本、架构信息最好能用表格的形式列出,现代人都我有点阅读障碍,大段文字里看不到重点TAT)

下载安装都十分快速,这个系统感觉很轻,然后浅 *** 作了一下命令行也ok。


直到使用 taosBenchmark 体验写入速度,没有成功

启动 TDengine 的服务,在 Linux 终端执行 taosBenchmark (曾命名为 taosdemo):taosBenchmark

咋回事呢?查看了视频教程,才发现视频使用的是tar.gz安装包,而我是apt-get的方式安装的,deb安装包本身就是不包括taosBenchmark的。

(后来发现这点是有说明的,但是文档结构有点bug。在【安装包】选项下有提到rpm 和 deb 包不含 taosdump、taosBenchmark 和 TDinsight 安装脚本,但是想以【docker】或者【apt-get】方式安装的朋友比如我,是看不见这些话的。所以会有疑问)


于是进行了卸载重装,重装后启动服务失败,想到可能是两次安装包不同(配置不同?)的原因,将原先配置文件删除后成功。

虚拟机开的比较小,不过速度也很厉害了!

客户端(windows

不好选择安装位置,直接C盘了。(但是C盘容易满,个人习惯不太那么想直接存C盘

配置文件taos.cfg需要手动写服务器地址,写了个虚拟机ip地址。输入taos,即可连接虚拟机上的数据库,顺利查询到之前插入的一亿条数据,NICE!

此外,还试了一下node.js和C方式的连接。


对照github上的node-example,node.js的连接的尝试有报错:

增减数据库、增减表都ok,但是查询报错。

(node:25136) UnhandledPromiseRejectionWarning: TDError.DatabaseError.ProgrammingError: Unable to resolve FQDN

找到博客,get到FQDN的问题!js文件的连接注意要写对应的【服务器名】,我写了IP地址。

const taos = require('td2.0-connector');
var host = "td1"; 
// 【server's hostname】, NOT IP ADDRESS,并且windows hosts文件也要改
var port = 6030;

这里我参悟了一点FQDN,简单说就是:

在数据库配置文件(taos.cfg)中填写好对应的【服务器昵称】,在 *** 作系统的hosts配置中填好【服务器昵称】对应的【IP地址】。

——这样的好处是,如果服务器IP有变化,那么无须反复修改数据库配置文件,只要修改 *** 作系统hosts。开始会觉得:啊?? *** 作系统修改不是更麻烦??后面到了集群的 *** 作,我多开俩虚拟机IP就变了,如果说改数据库配置的话需要给他全关一遍,而/etc/hosts的修改是迅速生效的。

(所以我前面的增减 *** 作可以正常,也可能是因为我有配置好cfg)

数据建模-超级表

超级表不存储具体数据,只存储模式信息,数据还是根据设备存于tables中。超级表这个定义感觉是最有意思的部分,通过这样一个连接模式表,相当于根据工业场景把需要的连接 *** 作简化了。和实际意义相结合,然后又有创新的定义,NICE。

插入数据时,加上USING TAGS(),可以在表不存在的情况下根据超级表自动建表。这个设计也很不错,简化了大量数据时为每个设备新建表的 *** 作,多几个单词少很多重复语句。

一定程度上,把我们正常设计数据库时要考虑的实体关系模型简化了,又可以适用于很多场景。

写入

当同时插入多条数据时(时间都为now),只会成功插入前一项。

文档中写入的命令执行失败,提示时间戳超出范围。以为是【超级表定义】的,想要查看超级表定义,但是记错了超级表的名字。超级表名字可以通过show tables在大表中查看。
(如果可以在describe中显示子表来源的超级表信息就好了。)

》》》查验后是database建立时的KEEPDAYS参数,导致我们的时间戳超出了范围。 show databases中查看可以发现KEEPDAYS设定。
(如果可以在describe中显示database的参数信息就好了。)


写入时即使后面的数据不合规定,也会自动创建表。——这一点方便也带来了一点麻烦。

尝试node.js插入数据时,由于数据上的时间戳不对还是建了表,但是数据还没有插入。又遇到了一个问题是,要【如何同时知道表ID和tag】
select * from meters只能看见已有数据的tag,看不见表ID,show tables只能看见表名ID而看不见具体tags。describe只有定义没有具体tag。

查询

文档中子表降采样查询子表和超级表速度是差不多的,我的虚拟机子性能很差所以子表是0.03s,超级表大约是3s。后面有时间再学习下代码具体是怎么做的。

连续查询的设定很方便,但有点怀疑创建无结束时间的连续查询,是否会影响运行性能。


查询中提到异步查询,又试了一下异步查询的C版本。
示例代码有函数类型报错,将void *fetch_row_callbackvoid *select_callback去星。另外还有sleep报错,添加头文件#include后正常。不知是否是版本问题,当前使用版本是2.4.0.18。

数据订阅体验顺利。但被我发现了个错别字嘿,C代码倒数第五行注释中:

int keep = 0; // 【weather】 to keep subscribe process


体验UDF时,taosd.service状态突然显示连接不上,systemctl status显示start-limit-hit。

搜到问题查看日志发现是磁盘不够,扩容折腾了半天,参考(gparted容易分错,具体gparted看这个)。最后也终于成功。

还有个别扭的是这里发现,所有 *** 作包括(添加functions / 建表/增加数据等)都是一样提示Query OK, 0 of 0 row(s) in database,最好可以区分不同的 *** 作。

缓存以写为主,先进先出,缓存中保存最后写入的数据。

集群

集群搭建也是开源的,NICE。

这里 *** 作我跟着视频教程走的。夸一下视频的例子简洁明了,不仅把集群搭建走了一遍,还有解释vnode高可用。文档里感觉缺一个完整的例子,不然会看得有点懵,可以把视频的添上。

集群上的前序准备步骤总结起来:

【所有节点所在的服务器】hosts,都有【所有服务器】的主机名和IP。
192.168.1.11 td1
192.168.1.12 td2
192.168.1.13 td3【所有数据节点】都可以互相ping通【主机名】,并且防火墙设置ok。【所有节点】关闭taos服务,并统一设置/etc/taos/taos.cfg
firstEp设成待会想第一个启动的节点的[主机名:6030] (所有点都一样),fqdn设成自己主机名。
如上,如果第一个启动td1即是: td1的taos.cfg
firstEp td1:6030
fqdn td1td2的taos.cfg
firstEp td1:6030
fqdn td2td3的taos.cfg
firstEp td1:6030
fqdn td3

然后依次启动td1,td2,td3的服务,连上td1的服务,依次把td2,td3加入dnode就可以。

节点分为三种:
dnode(服务器设备)、
vnode(数据库存数据(或副本),一个dnode里可以有多个vnode)、
mnode(管理逻辑,一个集群有至多三个,一个dnode上至多有一个)。

如果说一个dnode离线,在有多个vnode副本异地存储的情况下是不影响集群工作的(除非坏到超过一半),这就是vnode的高可用性。

总结

(好饿,吃完晚饭再写。)

总体上来说,整个安装过程速度很快,很轻便。中途有出了问题的时刻重装也很快。教程文档简洁明了,新用户亲测上手很快。中间的例子和解释也都不错,尤其是taosdemo这个插1亿条的小工具很不错。新用户体验的时候没有很多的测试数据,这种demo刚好给足了测试数据。设计技术细节还认知不多,但是觉得超级表的设定很有趣。

然后个人觉得可以改进的一些细节:

安装: 整体的版本、架构信息最好在文档开头就能用表格的形式列出;【立即开始】部分的文档结构bug:安装部分的文档,只有【安装包】选项有提到rpm 和 deb 包不含 taosdump、taosBenchmark 和 TDinsight 安装脚本,【docker】或者【apt-get】选项安装的朋友比如我,看不见这些话也无法测试taosBenchMark。 使用: 可以在describe 具体table语句时,显示【具体子表】来源的相应超级表信息;
(show tables感觉不方便)可以在describe 具体database语句时,显示【具体database】的参数信息(keep,days等)
(show databases感觉不方便)如何同时知道表ID和tag?
select * from meters只能看见已有数据的tag,看不见表ID,show tables只能看见表名ID而看不见具体tags。describe也只有定义没有具体tag。示例代码有函数类型报错,将void *fetch_row_callbackvoid *select_callback去星。另外还有sleep报错,添加头文件#include后正常。错别字,C代码倒数第五行注释中:weather应该是whether *** 作提示上,所有 *** 作包括(添加functions / 建表/增加数据/dnode等等)都是一样提示Query OK, 0 of 0 row(s) in database,最好可以区分不同的 *** 作。集群搭建部分的文档可以将视频教程的例子添加上。 其他后续方向小建议: 更多系统版本的开发(更多可配置的细节,比如windows的保存路径默认是C盘。更多的视频教程、博客教程,主要是会在各种可能的地方出现各种可能的错误。
最好能在官网或者google、baidu、CSDN这些网站或者把常见问题的解答放搜索结果前面,不然也需要找很久。可视化的客户端开发。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/927328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存