涛思数据 TDengine 征稿— 利用python脚本做TDengine性能测试

90 阅读3分钟

【本文正在参与 “拥抱开源 | 涛思数据 TDengine有奖征稿】marketing.csdn.net/p/0ada836ca…

设备上传的数据具有很明显的物联网特点,通常是时序性的,按时间先后顺序上报,而且写入后,几乎不会修改,主要是查询和统计。针对这些特点,时序数据库TDengine 将数据库、消息队列、缓存、流式计算等功能融合一起,在大幅提高性能的同时,降低平台开发维护的复杂度和成本。

  • 实现方案

  • 服务端安装

官网提供了三种格式的安装包其中deb支持ubuntu系统,rpm支持centos系统,tar.gz包两种系统都支持。我们常用centOS,下载tar.gz包。

1、解压

tar -xzvf /home/tdengine/TDengine-server-1.6.5.5-Linux-x64.tar.gz

2、安装

解压文件后,进入子目录,执行其中的install.sh安装脚本:

sudo ./install.sh

3、启动服务

设置为自启动 :

systemctl start taosd

设置成功后,输入taos,测试服务是否正常启动

  • 客户端安装

研发使用环境通常是windows,在官网上下载对应版本,双击安装即可。

安装完成后,默认会生成C:\Tdengine目录,在此目录下运行taos命令,连接服务端。

建立数据库,并使用

create database td_test

创建表格,

  • python****库安装

在C:\TDengine\connector\python\windows目录下安装第三方连接库

pip install python3/

  • **python **连接TDengine

引入taos包,与pg的连接方式类似,在connect中传入服务端的ip,用户名,密码,数据库名。

ip="10.19.133.18"pwd="taosdata"db="tc"user="root"# 连接taos数据库conn = taos.connect(host=ip, user=user, password=pwd, database='td_test')cursor = conn.cursor()```+ +  **TDengine****插入性能**采用随机生成经纬度,uuid和时间戳累加的方式构造10000条假数据,插入TDengine,测试其插入性能代码如下:```pythondef forInsert():    startTime = time.time()    start_time = datetime.datetime(2019, 7, 1)    for i in range(1,10001):        time_interval = datetime.timedelta(seconds=60)        latitude = random.randrange(11879804, 11879904)        longitude = random.randrange(43278291, 43278491)        id = str(uuid.uuid4())        sql = '''INSERT INTO t_gps_info_h            (sampling_time,device_index_code, longitude, latitude)VALUES('%s', '%s', '%d', '%d')'''        try:            cursor.execute(sql % (start_time, id, longitude, latitude))            start_time += time_interval        except Exception as err:            cursor.close            raise(err)        print(i,start_time, id, longitude, latitude)    endTime = time.time()    print('总用时:' + str(endTime - startTime))    cursor.close```运行后得到结果如下:![](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/20200822113537579.png)插入10000条数据,用时8秒左右,大概是postgre的4倍左右,未达到其官方的10倍以上,可能还需要后期具体优化。+ +  **TDengine****查询性能**通过sql语句查询其中的四个字段,测试其查询性能,代码如下:```pythondef select():    startTime = time.time()    # sql语句    sql = "SELECT sampling_time,device_index_code, longitude, latitude FROM t_gps_info_h"    # read_sql 方法返回的数据类型是DataFrame    dataframe = pd.read_sql(sql, con=conn)    endTime = time.time()    print(dataframe)    print('查询条数:' + str(dataframe.size))    print('总用时:' + str(endTime - startTime))```运行后,得到测试结果,如下图所示:![](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/20200822113605538.png)查询条数近4万条,用时0.15s,性能是其插入的200倍。+ 结束语1、 centos上第一次安装服务端后,如果出现dberror的错误,客户端也无法连接,则服务器需要重启。2、语言与sql类似,只是数据类型比较有限,第一列必须是时间戳,并且会自动设为主键。3、TDengine最大的优势就是性能,但是限制条件比较多,后期还需要在相同条件下与postgre进行对比。4、本文仅对TDengine性能进行测试,其内置消息队列和预统计的功能还未涉及。【本文正在参与 “拥抱开源 | 涛思数据 TDengine有奖征稿】[https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c](https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c)