分布式系统如何做到海量数据边云协同?看 TDengine 油气领域解决方案

本文主要是介绍分布式系统如何做到海量数据边云协同?看 TDengine 油气领域解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在某大型油田生产管理方案中,用户需要实现生产现场的自动化采集与控制、生产视频系统、工业物联网、生产数据服务、智能化生产管控应用以及各个环节的信息化采集标准建设等内容。在 TDengine 的帮助下,该大型项目成功完成了技术优化升级。本篇文章将就本次优化工作进行进一步的分析解读,给到大家参考。

TDengine 应用历程

这个项目此前的应用系统主要采用 Oracle 来存储和处理时序数据,但随着使用时间的增加,数据存储量越来越大,实时数据存储和处理的问题日益凸显,技术优化也遇到了瓶颈:

  1. 在处理复杂查询和聚合大数据集时写入和查询效率大幅衰减,系统出现明显的性能下降;
  2. 数据占用了越来越多的磁盘空间,给运维资源带来较大压力;
  3. 分布式的企业管理模式下基于应用本身的数据协同效率低下,无法满足企业应用的数据同步需求。

为了解决这些问题,用户进行了多方技术方案验证,并最终选择使用 TDengine 替换 Oracle 来存储时序数据。通过 TDengine 的边云协同技术,实现了边缘数据向云端的实时汇聚。

接下来,我们将对 TDengine 应用的主要场景进行深入分析。通过详细探讨 TDengine 在各个应用场景下的优势和应用效果,大家可以更好地了解其在实际项目中的价值和作用。

场景一:数据质量提升

一般来说,在实际应用中,生产现场采集的大量实时数据主要存储在工控系统中,对于支撑应用的数据质量难以保障。架构优化之后,现场实时数据将批量写入 TDengine(同批次数据包含不同井或设备的数据)。这一优化措施显著提高了数据的准确性和一致性,进一步优化系统性能,确保数据的可靠性和完整性。

此外,TDengine 也实现了对非实时数据的补录,补录中如果产生数据碎片,以及日常使用中产生的数据碎片,均可以通过 compact 功能在线重整数据文件解决。

场景二:数据服务性能优化

我们依托多个参数的历史曲线查询功能,通过数据分析和可视化能力,实现了对单井生产设备的实时监控与历史数据查询。该功能主要基于多参数的数据源,涵盖了涉及 TDengine 和关系型数据库的多个数据源取值,通过 TDengine 快速高效的查询,获取历史数据并生成曲线图。

通过自定义指标配置项,用户可以根据实际需求调整指标计算公式,生成个性化的结果数据,满足不同层级管理人员对数据展示的需求。

场景三:数据同步效率和存储优化

在这个重要环节,我们利用到了 TDengine 边云协同的重要特性——即对多个不同的 TDengine 服务的全量历史数据以及后续新增的数据,实时同步至云端 TDengine。

作为 TDengine 的一部分,taosX 工具仅需要在数据接收方一侧部署,仅需一行命令便可以完成实时同步、历史数据迁移,以及二者混合的三种数据处理方案。

例如:同步某台服务器的 db1 的历史数据以及实时数据到本地的 db2 数据库仅需执行如下一条命令即可。

taosx run -f 'taos://192.168.1.101:6030/db1?mode=all' -t 'taos://localhost:6030/db2' -v

另外,taosX 也提供了基于数据订阅方式(利用 TDengine 的 wal 日志)实时数据同步,以事件到达顺序处理数据,无论是实时数据还是历史数据的写入,都会实时同步到目标集群,不会丢失补录的历史数据。

通过该方案的实施,多个 TDengine 服务通过 taosX 跨省实时同步数据至云端总部集群。目前 TDengine 总部集群存储的数据量已经达到了 36 TB,总数据量 1034 亿+条,压缩率达到了 10% 以内。

写在最后

对于该项目来说,在将 Oracle 整体切换至 TDengine 之后优化效果明显,主要体现在如下几个方面:

  1. 数据插入性能变高,硬件资源减少;
  2. 集群支持在线水平扩展,轻松应对未来扩容需求;
  3. 灵活定义数据的生命周期,方便过期数据管理;
  4. 秒级 500 万测点的同步速率,满足了用户边云协同场景需求。

随着边云协同功能在各个复杂庞大的业务场景下成功落地,TDengine 也展现出了更强大的数据处理能力和更灵活的架构,能够更好地适应工业物联网环境下复杂多变的数据处理和存储需求,为工业物联网的发展提供有力支持和保障。

这篇关于分布式系统如何做到海量数据边云协同?看 TDengine 油气领域解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069808

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具