小 T 导读:在 58 同城的驾考业务上,需要存储分析驾校教练车传感器产生的数据,这是典型的时序数据场景,开发人员对原有的 TiDB 性能并不是很满意,因此 DBA 团队开始调研更具针对性的时序数据库。基于自身的业务需求,他们在 6 款时序数据库中选择了 TDengine Database,在经过深入的调研测试之后,开始部署实践,最终业务痛点问题得到了解决。

企业简介

作为中国领先的生活服务平台,58 同城业务覆盖招聘、房产、汽车、二手、本地生活服务及金融等各个领域。在用户服务层面,58 同城不仅是一个信息交互的平台,更是一站式的生活服务平台,同时也逐步为商家建立起全方位的市场营销解决方案。目前,58 同城已经成为中国全面服务本地商户与用户的线上商业服务平台。

项目介绍

58 同城业务覆盖了众多不同的领域,比如 58 同城主站、安居客、赶集网、数科公司、中华英才网、驾校一点通等,基于此,DBA 团队也引入了不同类型的数据库来支持上层业务,其中包括 MySQL、Redis、MongoDB、ELK、TiDB、StarRocks、NebulaGraph,在服务规模上能达到每日请求几万亿次。在以上数据库服务矩阵中,可以发现缺少了处理时序数据相关的数据库。

在我们的驾考业务上,需要存储分析驾校教练车传感器产生的数据,是典型的时序数据。该场景会涉及高并发插入,数据处理特点为写多读少,有特定时间段的聚合分析。我们此前使用的是 TiDB 存储,但开发人员对 TiDB 的性能不是很满意,业务具体需求是:日增千万数据,毫秒级插入,并在1秒钟以内返回3万条符合时间分析条件的数据。

但这也不能怪 TiDB,目前在数据库选型上其实就是不匹配的,这个业务场景是典型的车联网设备传感器数据,而 TiDB 和时序类型数据库(Time-Series Database)是两种完全不同的数据库服务,在功能侧重上也有较大区别。事实上,当前没有一种数据库可以满足所有需求场景,“All In xxDB” 这种脱离了场景谈数据库选型都是没意义的。为了给上层业务提供更贴合的数据库服务,我们的 DBA 团队开始调研时序数据库。

一、从需求看数据库选型

根据上述需求,DBA 团队调研了如下六款时序数据库,调研结果如下:

  • InfluxDB:最流行的时序数据库,单机开源,高可用集群收费
  • OpenTSDB:集群方案成熟,依赖 HBase,运维复杂,聚合分析能力弱
  • Prometheus:维护简单,集成监控和报警功能,但没有集群解决方案,聚合分析能力较弱
  • DolphinDB:运行快,开发快,部署快。闭源,免费版本限制 CPU 和内存大小
  • ES:集群化,易于使用,维护成本低,但内存耗用高,历史数据计算时性能下降明显
  • TDengine:性能强悍,国产自主研发,集群版免费,也有附加功能的收费版,还在持续迭代开发

基于以上所考虑的问题点,在经过初步分析后,我们最终选定了对 TDengine Database 进行深入调研测试。

1. 测试环境

集群架构:3 副本 + 负载均衡

容错:先写数据库日志文件,成功后再写数据文件

测试工具:官方 taosdemo

2. 机器配置

3. 写入并发 50:

字段数 绑定参数 设备数 数据量 写入 平均响应时间
3 10000 1亿 12120036.84 records/second 2.49ms
3 10000 1亿 5932514.09 records/second 6.86ms
20 10000 1亿 5883183.51 records/second 5.09ms
20 10000 1亿 2078181.61 records/second 19.20ms
20 100000 10亿 2673966.95 records/second 174.34ms
20 100000 10亿 2621617.26 records/second 57.08ms
50 100000 10亿 1216557.03 records/second 57.19ms

4. 服务器最大负载:

CPU LOAD 内存 磁盘IO 网络
ALL <10 <7G <10% <280M

从以上测试结果可以看出,TDengine Database 在响应时间、插入性能、服务器负载及运维便宜成都上都可以满足上述业务需求。部署和运维细节这里就不展开了。

二、生产环境部署架构与效果展示

在实际生产环境部署上,我们没有采用官方推荐的单机单实例部署,而是单机多实例部署,为三节点+三副本架构,监控上使用的是 TDinsight + Grafana

在实际应用上,基于业务情况我们调低了步长和子表数,希望可以达成更高的并发能力。针对之前应用 TiDB 时的痛点问题,业务方反馈在代码未调整的情况下TDengine可以在1秒内返回所需数据,业务代码调整过后在300毫秒内即可返回所需数据。此外借助 TDengine 的已有函数,很轻松就打通了向量分析的逻辑,避免再去编写业务代码,省时省力。

当然,在应用过程中,我们也遇到了一些问题,在此也汇总一下,作为给 TDengine 研发团队的一些改进建议:

  • 我们使用的单机多实例部署方式,在目前已发布版本中还没有很好的命令支持,日志输出的位置也需要显式指定。业务的发展会有不确定的变化,从资源成本角度来看,应该初期可预估、后期可调整,希望未来 TDengine 也能有更灵活多变的部署方式。
  • TDinsight 可以很直观地监控 TDengine 的性能,但一个视图模式下只对一套集群,如果有几十套、几百套集群,集成的 TDinsight 组件目前还无法添加,只能手动一个个修改 Grafana 视图变量,这个比较麻烦,建议官方优化集成的 TDinsight 组件。
  • 在进行 taosdump 导入时,更换库名后无法利用原库名的备份文件进行导入,建议官方修改支持。

三、写在最后

基于 58 集团众多的业务场景,TDengine Database 已经成为 DBA 团队为上层业务提供数据库服务矩阵的可选方案之一,让时序数据也有了专业的处理方案,后续监控服务的数据也会陆续转移到 TDengine 进行存储。未来我们将会与 TDengine 一起探索更多维度的生态合作,为集团提供更好的底层数据服务支持。

作者简介

张广元,58 集团 DBA,十年数据库运维管理老兵一枚。


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

毫秒级返回数据,58同城 DBA 团队选择 TDengine 解决传感器数据处理难题相关推荐

  1. 毫秒级返回数据,TDengine 在大疆车载智能驾驶云端平台上的应用

    小 T 导读:为了满足智能驾驶业务的数据处理需求,大疆车载试图从多家数据库中进行选型调研,帮助智能驾驶业务提升写入查询性能.降低运维成本.本文将分享大疆车载在数据库选型.系统搭建和业务迁移等方面的经验 ...

  2. 找工作 /*赶集网,58同城弱爆了 如何解决就业失业难题,赚取最多的钱*/ ------- 奶牛FJ!!!

    [问题描述] 奶牛们没钱了,正在找工作.FJ知道后,希望奶牛们四处转转,碰碰运气.而且他还加了一条要求:一头奶牛在一个城市最多只能赚D(0 < D <= 1000)美圆,然后他必须到另一个 ...

  3. 百亿数据,毫秒级返回,如何构建?

    前言 大家好,我是坤哥,今天我想和大家聊一聊实时索引的构建之道,来自我司 PB 级索引数据的实战经验,相信对大家肯定有帮助. 近年来公司业务迅猛发展,数据量爆炸式增长,随之而来的的是海量数据查询等带来 ...

  4. uniapp返回上一页_一例万级写入并发,百亿级数据,毫秒级返回架构分享

    肉眼品世界导读: 在互联网环境里,很多时候常常会有海量级别的订单,高并发,低延迟,不同的业务场景有不同的做法.更多优质内容请关注微信公众号"肉眼品世界"(ID:find_world ...

  5. 百亿数据,毫秒级返回查询优化

    近年来公司业务迅猛发展,数据量爆炸式增长,随之而来的的是海量数据查询等带来的挑战,我们需要数据量在十亿,甚至百亿级别的规模时依然能以秒级甚至毫秒级的速度返回,这样的话显然离不开搜索引擎的帮助,在搜索引 ...

  6. 经典面试题:ES如何做到亿级数据查询毫秒级返回?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:8rr.co/5Csc 面试题 es 在数据量很大的情况下( ...

  7. Elasticsearch如何做到亿级数据查询毫秒级返回?

    https://zhuanlan.zhihu.com/p/60458049 如果面试的时候碰到这样一个面试题:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有 ...

  8. ES如何做到亿级数据查询毫秒级返回

    一.面试题 ES在数据量很大的情况下(数十亿级别)如何提高查询效率? 二.面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过ES,因为啥?其实ES性能并没有你想象中那么好的.很多时候 ...

  9. JAVA 经典面试题:ES如何做到亿级数据查询毫秒级返回?

    面试题 #elasticsearch#lasticsearch在数十亿级别以上的大量数据下如何提高查询效率,做到毫秒级数据查询呢? 面试官心理分析 在 JAVA 高级面试中这个问题肯定是要被问及的,为 ...

最新文章

  1. pandas 删除列名字符串中的空格
  2. linux进程间通信之Posix共享内存用法详解及代码举例
  3. 自言自语(三)--部分中文字体
  4. C语言初始化错误怎么办,结构体变量的初始化错误
  5. vs 设置起始页不见了_发朋友圈屏蔽爸妈,结果不小心设置成了仅家人可见...场面一发不可收拾哈哈哈哈!...
  6. 2012递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)
  7. c语言手机教程,【图片】【教程】手机c语言入门与手机c编程【mrp吧】_百度贴吧...
  8. 另一个SqlParameterCollection 中已包含 SqlParameter[解决方案]
  9. indesign教程,了解图层
  10. scrapy数据存储在mysql数据库的两种方式
  11. 微信小程序获取公众号文章列表及显示文章
  12. 二级c语言编程题库100题,计算机二级C语言编程题库100题(70页)-原创力文档
  13. 艾迈斯半导体推出新款高性能读取IC,推动医疗和工业数字化X射线设备制造商降本增效
  14. SAR图像滤波去噪效果评价研究
  15. 东北大学 计算机网络,东北大学计算机网络B卷(附答案).pdf
  16. html 整个页面只能看,如何截图整个完整的网页页面(包含滚动条下面看不到的网页)...
  17. MPU6050 DMP 代码完全解析 —— dmp_init
  18. 糖友低碳水、高蛋白饮食可行吗
  19. vscode html 换行设置
  20. Voyager下的Dashboard Widgets

热门文章

  1. 静脉输液安全PPT模板
  2. ubuntu 20.04 kylin gpg: 从公钥服务器接收失败:Server indicated a failure 解决方法
  3. 安搭Share:因泰农用猴子摘椰子,美多家大企业封杀泰国椰子制品
  4. python正则匹配字母后面四位数字_怎么写一条正则去匹配15位、18位、还有最后一个字符为字母的身份证号...
  5. Thinkpad win11截图快捷键win + sihft +s无反应
  6. Error merging Visual C++ 10.0 CRT (IA64) with module ID C:\Program Files (x86)\Common Files\Merge Mo
  7. 《时代》关于李宇春的评论(转载)
  8. 电视盒子怎么K歌?当贝家庭KTV音响套装助力客厅K歌
  9. PCI-E高速PCB布局布线设计指南
  10. 利用 Red5 , RTMP协议建立远程视频监控系统一