热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

双重调研测试后,OPPOIoT类产品开始接入TDengine

双重调研测试后,OPPOIoT类产品开始接入TDengine-在OPPO的穿戴产品的手环手表类业务中,产生的数据类型为时序数据,具有写入量巨大且存在离线历史数据补录(更新)的处理需


在 OPPO 的穿戴产品的手环/手表类业务中,产生的数据类型为时序数据,具有写入量巨大且存在离线/历史数据补录(更新)的处理需求。此前使用的 MongoDB/MySQL 集群方案,后端存储压力较大,需要经常扩盘,针对此痛点,OPPO 云计算中心智慧物联云团队尝试调研对比了几款时序数据库(Time-Series Database)产品,试图寻找一个降本增效的解决方案。

除了存储压力外,我们进行数据库替换还有一个比较重要的原因,就是 MySQL 和 MongoDB 的各个集群都比较独立,维护和需求开发成本相对较高。

以上是三款 Database 的初步调研结果,TSHouse 是 OPPO 云监控时序数据库,其底层为 Prometheus 的 TSDB 存储引擎,目前不支持历史数据和乱序写入;InfluxDB 对历史数据写入会进行二次压缩,影响性能,这两款数据库都不满足当下的数据处理需求。初步研究 TDengine 后,我们发现其作为国产时序数据库开源产品,不仅可以满足历史数据高效写入,还拥有较高的压缩能力。随后,我们选择对 TDengine 进行了比较详细的产品调研和性能测试。

TDengine 产品与能力调研

产品调研

某个数据表的结构如下:

我们写入 60 万行数据,到 MySQL(目前部分业务部署在 MySQL 集群)和 TDengine 的 4C 12G 容器上,对 CPU/内存/磁盘进行观察。测试发现 CPU 和内存消耗基本持平的情况下,TDengine 的落盘数据是 MySQL 环境的1/4左右。

同时,我们在不同规格容器及物理机场景下进行 TDengine 写入测试,部分记录如下:

需要说明的是,对于不同业务场景需要进行实际测试,才能确定适合该业务的部署参数。在整个测试过程中,TDengine 工程师们也为我们进行了及时答疑和帮助。

能力调研

随后我们根据 TDengine 丰富的产品手册,对一些关键能力进行了验证,包括数据管理、数据写入、聚合计算、集群扩容、故障可靠性保证等场景。

在数据管理上,TDengine 的元数据与业务数据是分离开来的。如下图所示,Mnode 负责管理元数据信息;单个 Vnode 可以存放多个表数据,相当于相当于水平分片,单个表的数据,又可以继续按照日期分片。

在数据写入逻辑上,整体和 LSM 类似:WAL,内存块,磁盘 FILE。

在 TDengine 中,数据在文件中是按块连续存储的。每个数据块只包含一张表的数据,且数据是按照时间主键递增排列的。数据在数据块中按列存储,这样使得同类型的数据能够存放在一起,大大提高了压缩比,节省了存储空间。

TDengine 是 10 天一组 data file,data file 里的 .data 文件只进行追加,且后续不会进行压缩。这种好处是:对历史数据和乱序极其友好,非常适用于 IoT 场景;没有压缩也就减少了写入之后的资源消耗,保证了较好的读写性能。

TDengine落地实践

在经历了比较充分调研后,我们根据业务写入模型,对生产环境中某一套 MySQL 集群环境,进行 TDengine 集群部署,搭建了如下所示的集群:

集群为 3 台 AWS-EC2 容器(8C 32GB 3.5TB NVME 盘)组成,配置为 3 节点、2 副本,写入端使用 RESTful 请求到 VIP 节点,转发到数据库服务。图中的 V0-V2 为副本数为 2 的 3 组数据分片,M0-M2 为副本数为 3 的 1 组管理节点。

配置的 Grafana 面板展示如下:

后台表结构展示如下:

目前数据已经开始接入 TDengine 的数据库,历史数据也在同步导入中。

  • 实际效果展示

1.使用 last_row() 函数一次性输出 38 万个设备查询最新状态,结果如下所示。

2.使用 interval() 查询某个设备每 1 小时的总步数,结果如下所示。


在存储方面,由于目前数据还没有完全导入,针对生产环境的一个 6.6TB 集群,我们粗略估计了一下前后的压缩比,大概在 6.6/0.4。

在我们原来的集群中是没有副本的,单纯就部署了 MySQL 的 5 个分库,使用了 4C 8GB 2TB 的 5 台机器,在应用 TDengine 之后,现在是 8C 32GB 2TB 的 3 台机器。通过 TDengine 我们构建了多副本和统一的能力,以及后续上混合云的能力,这是整个平台级的一个优化与提升。

写在最后

在前期调研和集群搭建过程中,TDengine Database 的工程师伙伴们给我们提供了充分且及时的协助,为我们构建时序数据后端能力提供了很大帮助。目前接入TDengine的数据是海外某集群,后续我们会根据业务进展陆续进行其他集群数据的接入。


想了解更多 TDengine Database的具体细节,欢迎大家在GitHub上查看相关源代码。


推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 我这几年踩过的十个坑,每一条都是血泪教训
    “阅读本文大概需要3分钟。”一、不记录程序部署在哪里“我:他妈的,这个程序明明一直在正确产生日志,可它到底运行在哪里?怎么我 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • step1.为mongodb添加admin管理员root@12.154.29.163:~#mongoMongoDBshellversionv3.4.2connectingto:mo ... [详细]
  • Intellij IDEA中详细图解连接MySQL腾讯云数据库以及基础操作
    虽然小编记录的是在IDEA中连接mysql腾讯云数据库。当然,如果读者使用的是本地数据库,也是一样的操作,只是数据库的url书写有所不同。 ... [详细]
  • 今天我们学习,数据库mongodb的使用,最下面有mongodb的下载链接。pipinstallpymongo首先安装pymongo,然后在需要用到的地方importpymongo ... [详细]
  • MongoDB学习:(二)MongoDB简单使用
    MongoDB学习:(二)MongoDB简单使用MongoDB使用:执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面>mongo提示 ... [详细]
  • mongoDB高可用集群环境搭建
    2019独角兽企业重金招聘Python工程师标准在生产环境下,部署一台mongodb服务的话,会存在以下问题:单点问题生产环境是一个 ... [详细]
  • go实现重新给metric打标签上传到prometheus_案例分析|云原生监控Prometheus对样本rate计算,出现标签重复?...
    0-本案例所涉及的知识点云原生、微服务,带你了解大规模容器下的监控方式,通过各个案例分析,熟悉prometheus的内部原理。涉及知识点& ... [详细]
  • Prometheus Grafana实现对Linux Kubernetes Nginx  的监控系统
    2019独角兽企业重金招聘Python工程师标准用Prometheus配合Grafana实现多用途的服务监控系统。一.Prometheus简介Prometheus是一个开源监 ... [详细]
author-avatar
谢海武181_160
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有