【本文正在参与 “拥抱开源 | 涛思数据 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```运行后得到结果如下:插入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))```运行后,得到测试结果,如下图所示:查询条数近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)