最美分享 | Github上Star 1W+物联网而生的大数据平台:TDengine

  • 小编 发布于 2019-11-24 18:23:41
  • 栏目:科技
  • 来源:Wooola
  • 6739 人围观

迎关注我的头条号:Wooola,10年Java软件开发及架构设计经验,专注于Java、Go语言、微服务架构,致力于每天分享原创文章、快乐编码和开源技术。

简介

最美分享 | Github上Star 1W+物联网而生的大数据平台:TDengine

TDengine是涛思数据推出的一款开源的专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。

Github上Star1W+,fork 2.8K。

最美分享 | Github上Star 1W+物联网而生的大数据平台:TDengine

传送门

官网

https://www.taosdata.com/cn/

Github

https://github.com/taosdata/TDengine

特性

最美分享 | Github上Star 1W+物联网而生的大数据平台:TDengine

应用场景

最美分享 | Github上Star 1W+物联网而生的大数据平台:TDengine

架构设计

数据模型和设计

  • 数据模型:关系型数据库模型,但要求每个采集设备单独建表
  • 主要模块:包含管理节点、数据节点和客户端,数据节点支持虚拟化
  • 写入流程:先写入WAL、之后写入缓存,再给应用确认
  • 数据存储:数据按时间段切片、采取列存、不同数据类型不同压缩算法

TAOS SQL

  • 支持的数据类型:支持时间戳、整型、浮点型、布尔型、字符型等多种数据类型
  • 数据库管理:添加、删除、查看数据库
  • 表管理:添加、删除、查看、修改表
  • 数据写入:支持单表单条、多条、多表多条写入,支持历史数据写入
  • 数据查询:支持时间段、值过滤、排序、查询结果手动分页等
  • SQL函数:支持各种聚合函数、选择函数、计算函数,如avg, min, diff等
  • 时间维度聚合:将表中数据按照时间段进行切割后聚合,降维处理

超级表STable:多表聚合

  • 什么是超级表:一种创新的方式来管理和聚合同一类设备
  • 超级表管理:创建/删除、改变超级表
  • 写数据时自动建子表:用超级表做模板,自动建表
  • STable中TAG管理:增加、删除、修改超级表或表的标签
  • STable多表聚合:通过设置标签过滤条件,将一组表进行聚合
  • STable使用示例:解释超级表的使用

高级功能

  • 连续查询(Continuous Query):基于滑动窗口,定时自动的对数据流进行查询计算
  • 数据订阅(Publisher/Subscriber):象典型的消息队列,应用可订阅接收到的最新数据
  • 缓存 (Cache):每个设备最新的数据都会缓存在内存中,可快速获取

连接器

  • C/C++ Connector:通过libtaos客户端的库,连接TDengine服务器的主要方法
  • Java Connector(JDBC):通过标准的JDBC API,给Java应用提供到TDengine的连接
  • Python Connector:给Python应用提供一个连接TDengine服务器的驱动
  • RESTful Connector:提供一最简单的连接TDengine服务器的方式
  • Go Connector:给Go应用提供一个连接TDengine服务器的驱动
  • Node.js Connector:给node应用提供一个链接TDengine服务器的驱动

与其他工具的连接

  • Telegraf:将DevOps采集的数据发送到TDengine
  • Grafana:获取并可视化保存在TDengine的数据
  • Matlab:通过配置Matlab的JDBC数据源访问保存在TDengine的数据
  • R:通过配置R的JDBC数据源访问保存在TDengine的数据

系统管理

  • 文件目录结构:TDengine数据文件、配置文件等所在目录
  • 服务端配置:端口,缓存大小,文件块大小和其他系统配置
  • 客户端配置:字符集、链接IP地址、缺省用户名、密码等配置
  • 用户管理:添加、删除TDengine用户,修改用户密码
  • 数据导入:可按脚本文件导入,也可按数据文件导入
  • 数据导出:从shell按表导出,也可用taosdump工具做各种导出
  • 系统连接、任务查询管理:查询或停止现有的连接、查询和流式计算
  • 系统监控:检查系统现有的连接、查询、流式计算,日志和事件等

技术设计

  • 存储设计:为时序数据专门优化设计的列式存储格式
  • 查询处理:高效的查询计算时序数据的方法
  • 集群设计:吸取NoSQL的优点,支持高可靠,支持线性扩展
  • 技术博客:更多的技术分析和架构设计文章

性能对比

对比InfluxDB、OpenTSDB、Cassandra、MySQL、ClickHouse

最美分享 | Github上Star 1W+物联网而生的大数据平台:TDengine

性能测试报告

https://www.taosdata.com/downloads/TDengine_Testing_Report_cn.pdf

版本

社区版

TDengine社区版是一开源版本,采用的是AGPL许可证,是一个处理中小规模的物联网数据平台。它具备高效处理物联网数据所需要的所有功能,包括:

  • 类SQL查询语言来插入或查询数据
  • 支持C/C++, Java(JDBC), Python, Go, RESTful, and Node.JS 等开发接口
  • 通过TDengine Shell或Python/R/Matlab可做各种Ad Hoc查询分析
  • 通过连续查询,支持基于滑动窗口的流式计算
  • 引入超级表,让设备之间的数据聚合通过标签变得简单、灵活
  • 内嵌消息队列,应用可订阅最新的数据
  • 内嵌缓存机制,每台设备的最新状态或记录都可快速获得
  • 无历史数据与实时数据之分,对应用而言,透明且完全一样
  • 安装包仅1.5M,从下载到成功运行仅仅几秒的时间

企业版

TDengine企业版是一个运营商级别的分布式版本,它具备超高的可靠性,超强的水平扩展能力,以应对大数据的挑战。除社区版所有功能外,它还有如下功能:

  • 线性扩展能力,以保证任何规模的数据量都可以处理
  • 无单点故障,高可靠,以保证运营商级的服务
  • 内嵌数据实时同步,可跨机房将数据实时复制到不同节点
  • 支持多级存储,方便可靠的前提下,进一步降低存储成本
  • 提供可视化的管理工具,让运维更加简单
  • 支持更多的工业数据接口以及更多的第三方工具
  • 7*24的专业技术支持

云服务版

TDengine云服务版是将TDengine企业版运行在AWS和阿里云上,具备弹性伸缩、零管理的特点,通过专业的技术服务团队,提供运营商级的物联网大数据平台服务。

  • 鼠标简单一点,即可扩容,以应对数据量的高速增长
  • 零管理,再也没有系统安装、部署、维护的烦恼
  • 从管理后台,可以查看运行状态、使用情况,以及各种统计
  • 按月按使用量付费,中小企业的理想选择
  • 7*24小时专业技术服务

案例

从官网,笔者没看到有客户使用的真实案例,其中企业版和云服务版需要付费的,但是有一些TDengine性能压测对比以及基于TDengine开发的系统文章介绍。

最美分享 | Github上Star 1W+物联网而生的大数据平台:TDengine

常见问题

1. 遇到错误"failed to connect to server", 我怎么办?

客户端遇到链接故障,请按照下面的步骤进行检查:

  1. 在服务器,执行 systemctl status taosd 检查taosd运行状态。如果没有运行,启动taosd
  2. 确认客户端连接时指定了正确的服务器IP地址
  3. ping服务器IP,如果没有反应,请检查你的网络
  4. 检查防火墙设置,确认TCP/UDP 端口6030-6039 是打开的
  5. 对于Linux上的JDBC(ODBC, Python, Go等接口类似)连接, 确保libtaos.so在目录/usr/local/lib/taos里, 并且/usr/local/lib/taos在系统库函数搜索路径LD_LIBRARY_PATH里
  6. 对于windows上的JDBC, ODBC, Python, Go等连接,确保driver/c/taos.dll在你的系统搜索目录里 (建议taos.dll放在目录 C:WindowsSystem32)
  7. 如果仍不能排除连接故障,请使用命令行工具nc来分别判断指定端口的TCP和UDP连接是否通畅 检查UDP端口连接是否工作:nc -vuz {hostIP} {port} 检查服务器侧TCP端口连接是否工作:nc -l {port} 检查客户端侧TCP端口链接是否工作:nc {hostIP} {port}

2. 虽然语法正确,为什么我还是得到 "Invalid SQL" 错误

如果你确认语法正确,请检查SQL语句长度是否超过64K。如果超过,也会返回这个错误。

3. 为什么我删除超级表总是失败?

请确保超级表下已经没有其他表,否则系统不允许删除该超级表。

4. 是否支持validation queries?

TDengine还没有一组专用的validation queries。然而建议你使用系统监测的数据库”log"来做。

5. 我可以删除或更新一条记录吗?

不能。因为TDengine是为联网设备采集的数据设计的,不容许修改。但TDengine提供数据保留策略,只要数据记录超过保留时长,就会被自动删除。

6. 我怎么创建超过250列的表?

TDengine最大允许创建250列的表。但是如果确实超过,我们建议按照数据特性,逻辑地将这个宽表分解成几个小表。

7. 最有效的写入数据的方法是什么?

批量插入。每条写入语句可以一张表同时插入多条记录,也可以同时插入多张表的记录。

8. windows系统下插入的nchar类数据中的汉字被解析成了乱码如何解决?

windows下插入nchar类的数据中如果有中文,请先确认系统的地区设置成了中国(在Control Panel里可以设置),这时cmd中的taos客户端应该已经可以正常工作了;如果是在IDE里开发Java应用,比如Eclipse, Intellij,请确认IDE里的文件编码为GBK(这是Java默认的编码类型),然后在生成Connection时,初始化客户端的配置,具体语句如下:

Class.forName("com.taosdata.jdbc.TSDBDriver");
Properties properties = new Properties();
properties.setProperty(TSDBDriver.LOCALE_KEY, "UTF-8");
Connection = DriverManager.getConnection(url, properties);

总结

TDengine是国人开发的大数据平台框架,希望TDengine以后做的和Spark,Hadoop一样优秀,甚至更好。

转载请说明出处:五号时光网 ©