涛思数据 TDengine 征稿— 利用python脚本做TDengine性能测试
【本文正在参与 “拥抱开源 | 涛思数据 TDengine有奖征稿】https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c
设备上传的数据具有很明显的物联网特点,通常是时序性的,按时间先后顺序上报,而且写入后,几乎不会修改,主要是查询和统计。针对这些特点,时序数据库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,测试其插入性能代码如下:
```python
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```
运行后得到结果如下:
![](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/20200822113537579.png)
插入10000条数据,用时8秒左右,大概是postgre的4倍左右,未达到其官方的10倍以上,可能还需要后期具体优化。
+
+ **TDengine****查询性能**
通过sql语句查询其中的四个字段,测试其查询性能,代码如下:
```python
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))```
运行后,得到测试结果,如下图所示:
![](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)