TDengine性能测试

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

  • 实现方案
    1. 服务端安装

官网提供了三种格式的安装包其中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,测试服务是否正常启动

    1. 客户端安装

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

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

建立数据库,并使用

create database td_test

创建表格,

    1. python库安装

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

pip install python3/

    1.  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()
    1.  TDengine插入性能

采用随机生成经纬度,uuid和时间戳累加的方式构造10000条假数据,插入TDengine,测试其插入性能代码如下:

def 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

运行后得到结果如下:

插入10000条数据,用时8秒左右,大概是postgre的4倍左右,未达到其官方的10倍以上,可能还需要后期具体优化。

    1.  TDengine查询性能

通过sql语句查询其中的四个字段,测试其查询性能,代码如下:

def 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))

运行后,得到测试结果,如下图所示:

查询条数近4万条,用时0.15s,性能是其插入的200倍。

  • 结束语

1、 centos上第一次安装服务端后,如果出现dberror的错误,客户端也无法连接,则服务器需要重启。

2、语言与sql类似,只是数据类型比较有限,第一列必须是时间戳,并且会自动设为主键。

3、TDengine最大的优势就是性能,但是限制条件比较多,后期还需要在相同条件下与postgre进行对比。

4、本文仅对TDengine性能进行测试,其内置消息队列和预统计的功能还未涉及。

猜你喜欢

转载自blog.csdn.net/luansj/article/details/108165911