InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?

简介: 在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。

在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。

TDengine 的读缓存机制

在物联网(IoT)和工业互联网(IIoT)的应用中,实时数据的获取与处理至关重要。相比于历史数据,当前值通常具有更高的优先级和应用价值。因为这些系统大多数依赖实时监控来驱动决策和行动。例如,在智能制造领域,设备的实时状态数据直接影响生产效率和产品质量,任何延迟的决策都可能导致设备故障、生产停滞甚至安全事故。而在智能交通或车联网中,实时数据决定了交通管理和驾驶行为的调整,直接关系到交通流畅性和安全性。因此,获取和分析当前值比仅仅依赖历史数据更具战略意义,它能够更准确地反映出系统的即时需求与状态,帮助实现快速响应和决策优化。

一些架构师尝试通过在时序数据库之外部署 Redis 来实现数据的实时获取,但这种做法往往显著增加了系统的复杂性,同时对工业企业有限的 IT 资源带来额外负担。毕竟,大多数企业并没有专门的团队来支持这些复杂组件的部署与维护。因此,对于这些企业来说,数据平台必须具备内建的实时分析能力,而不是依赖外部工具来弥补这一需求。TDengine 就很好地解决了这一问题,它不仅具备高效的时序数据存储能力,还原生支持实时数据分析,帮助企业简化架构,降低运维成本,并确保数据能够及时转化为可操作的洞察。

TDengine 通过时间驱动的缓存管理策略,将最新的数据优先保存在缓存中。这意味着,最新数据在查询时能更快地被读取,而不必频繁访问硬盘。当缓存容量达到预设阈值后,系统会将最早的数据批量写入硬盘,以此实现高效的缓存管理。这种设计不仅满足了实时数据的高效查询需求,还降低了写入操作对硬盘的压力,延长了硬件寿命。

而在读取数据时,TDengine 的用户通过设置cachemodel参数,可以选择不同的缓存模式。通过该机制,用户可以选择缓存最新一行数据、每列最近非 NULL 值,或同时缓存行和列的数据,这一设计使得 TDengine 能够根据业务需求为用户提供精准的优化。这在物联网场景中尤为关键,让快速访问设备当前状态成为可能。

InfluxDB 的缓存机制

在数据读取方面,InfluxDB 并没有设计专门的读缓存。这意味着每次查询都需要从存储引擎中读取数据,不像 TDengine 可以直接从读缓存中获取最新数据。在实时性要求高的场景中,InfluxDB 由于缺乏读缓存机制,可能会出现查询延迟。为弥补这一缺陷,InfluxDB 的用户往往需要借助外部缓存系统(如 Redis)来提升查询性能,但这同时增加了系统的复杂性和维护成本。

实时数据查询的缓存实践

为了更直观地验证 TDengine 缓存功能对实时数据查询性能的提升,我们以下面的智能电表应用为例,展示 LAST 缓存的实际效果。

首先,使用taosBenchmark工具生成测试所需的时序数据。运行以下命令,该工具会在 TDengine 中创建一个名为power的电表数据库,生成 10 亿条时序数据。数据的时间戳从 2020 年 9 月 13 日 20:26:40(+08:00)开始,超级表为meters,包含 10000 个设备(子表),每个设备记录 10000 条数据,采集频率为每 10 秒一条:

taosBenchmark -d power -Q --start-timestamp=1600000000000 --tables=10000 --records=10000 --time-step=10000 -y

生成数据后,查询任意一个电表的最新电流值和时间戳数据,可以执行以下 SQL 语句:

jtaos> select last(ts,current) from meters;

查询结果如下:

j        last(ts)         |    last(current)     |
=================================================2020-09-15 00:13:10.000 |            1.1294620 |
Query OK, 1 row(s) in set (0.353815s)

使用last_row函数进行类似查询,也可以得到以下结果:

jtaos> select last_row(ts,current) from meters;

结果为:

j      last_row(ts)       |  last_row(current)   |
=================================================2020-09-15 00:13:10.000 |            1.1294620 |
Query OK, 1 row(s) in set (0.344070s)

为了进一步利用缓存提升查询性能,执行以下命令启用读缓存并指定缓存模式为both,即缓存行和列的最新数据:

taos> alter database power cachemodel 'both';

接下来,通过show create database power\G确认数据库配置,包括缓存设置:

*************************** 1.row ***************************
       Database: power
Create Database: CREATE DATABASE `power` BUFFER 256 CACHESIZE 1 CACHEMODEL 'both' COMP 2 DURATION 14400m WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 5256000m,5256000m,5256000m PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 10 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0
Query OK, 1 row(s) in set (0.000282s)

在启用缓存后,再次查询电表的最新实时数据,第一次查询会做缓存计算,后续查询时延显著降低:

taos> select last(ts,current) from meters;

结果:

        last(ts)         |    last(current)     |
=================================================2020-09-15 00:13:10.000 |            1.1294620 |
Query OK, 1 row(s) in set (0.044021s)

再运行last_row查询,结果同样在较短时延内返回:

taos> select last_row(ts,current) from meters;

查询结果:

      last_row(ts)       |  last_row(current)   |
=================================================2020-09-15 00:13:10.000 |            1.1294620 |
Query OK, 1 row(s) in set (0.046682s)

从测试结果可以看出,在启用缓存后,查询时延从最初的 353/344 毫秒大幅缩短至 44 毫秒,性能提升约 8 倍。这一例子充分展示了 TDengine 缓存机制对实时数据查询效率的显著改善。

结语

通过上文,我们可以对 TDengine 与 InfluxDB 这两大数据库进行一个对比分析的总结,帮助大家更直观地了解它们各自的优势和适用场景:

  • 实时数据查询性能:TDengine 通过读缓存机制,能够快速获取最新数据,显著提升查询性能。而 InfluxDB 缺乏专门的读缓存,每次查询都需要从存储引擎读取数据,可能导致查询延迟。
  • 系统复杂性和运营成本:TDengine 的读缓存机制内置于数据库中,无需额外部署缓存系统,降低了系统复杂性和运营成本。相比之下,使用 InfluxDB 的用户可能需要引入外部缓存系统(如 Redis)来提升查询性能,增加了系统的复杂性和维护成本。
  • 缓存策略灵活性:TDengine 允许用户根据业务需求,灵活配置缓存策略,如选择缓存最新一行数据或每列最近的非 NULL 值。而 InfluxDB 在这方面的配置选项相对有限。

在工业互联网和物联网大数据应用场景中,TDengine 通过精心设计的缓存机制,实现了数据的实时高效写入和快速查询,降低了系统复杂性和运营成本。相比之下,InfluxDB 缺乏专门的读缓存机制,可能在查询最新数据时表现出一定的延迟。因此,对于需要高实时性数据查询的应用场景,TDengine 的缓存策略更具优势。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
2月前
|
存储 缓存 数据库
解决缓存与数据库的数据一致性问题的终极指南
解决缓存与数据库的数据一致性问题的终极指南
177 63
|
3月前
|
消息中间件 canal 缓存
项目实战:一步步实现高效缓存与数据库的数据一致性方案
Hello,大家好!我是热爱分享技术的小米。今天探讨在个人项目中如何保证数据一致性,尤其是在缓存与数据库同步时面临的挑战。文中介绍了常见的CacheAside模式,以及结合消息队列和请求串行化的方法,确保数据一致性。通过不同方案的分析,希望能给大家带来启发。如果你对这些技术感兴趣,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
175 6
项目实战:一步步实现高效缓存与数据库的数据一致性方案
|
3月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
3月前
|
存储 Go API
使用GoFrame连接和操作TDengine时序数据库
通过使用GoFrame框架和TDengine Go驱动,我们可以方便地连接和操作TDengine时序数据库。无论是插入、查询还是分析时序数据,都可以通过简单的API调用来实现。GoFrame提供了强大的Web开发功能,结合TDengine的高性能时序数据存储和查询能力,可以构建高效、可扩展的时序数据应用。
|
1月前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
1月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
142 4
|
2月前
|
缓存 弹性计算 NoSQL
新一期陪跑班开课啦!阿里云专家手把手带你体验高并发下利用云数据库缓存实现极速响应
新一期陪跑班开课啦!阿里云专家手把手带你体验高并发下利用云数据库缓存实现极速响应
|
2月前
|
存储 JSON Ubuntu
时序数据库 TDengine 支持集成开源的物联网平台 ThingsBoard
本文介绍了如何结合 Thingsboard 和 TDengine 实现设备管理和数据存储。Thingsboard 中的“设备配置”与 TDengine 中的超级表相对应,每个设备对应一个子表。通过创建设备配置和设备,实现数据的自动存储和管理。具体操作包括创建设备配置、添加设备、写入数据,并展示了车辆实时定位追踪和车队维护预警两个应用场景。
73 3
|
1月前
|
存储 运维 大数据
TDengine 荣膺双奖:引领储能与数据库创新
近日,TDengine 再创佳绩,在两大权威评选中荣获重磅奖项:在由国际能源网与国能能源研究院联合发起的“2024 储能榜”中,TDengine 凭借卓越的技术与解决方案,荣获“年度储能配套设备优秀品牌”称号。同时,在数据猿与上海大数据联盟联合发布的“2024 企业盘点”中,TDengine 被评为“数据库领域最具商业合作价值企业”。这两项奖项的取得,不仅是对 TDengine 技术实力的认可,也进一步体现了其在推动行业创新、提高企业效能方面的重要作用。
26 0
|
3月前
|
消息中间件 缓存 NoSQL
15)如何保证缓存和数据库之间的数据一致性
15)如何保证缓存和数据库之间的数据一致性
64 1