gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档tdengine

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  数据库
  • 分类归档: "tdengine"
Flink, tdengine 1月 3,2025

Flink读取TDEngine数据实例,解决com.taosdata.jdbc.rs.RestfulDatabaseMetaData@38af9828 is not serializable. The object probably contains or references non serializable fields错误

用flink读取TDEngine,运行报错:
com.taosdata.jdbc.rs.RestfulDatabaseMetaData@38af9828 is not serializable. The object probably contains or references non serializable fields

这意味着 com.taosdata.jdbc.rs.RestfulDatabaseMetaData 类的对象无法被序列化,而 Flink 的作业中涉及到的某些操作需要将对象传递到不同的任务中,这就要求对象是可序列化的(即实现了 Serializable 接口)。在 Flink 中,所有要在分布式环境中传输或持久化的对象都必须是可序列化的。

  • RestfulDatabaseMetaData 是 TDengine JDBC 驱动中的一个类,它可能没有实现 Serializable 接口,因此在需要将该类对象传输到其他机器时,Flink 无法进行序列化。

解决方法是

使用 transient 关键字避免对不可序列化对象进行传递。

通过标记 connection、preparedStatement 和 resultSet 为 transient,这些对象不会被 Flink 传递到 Task Manager。

完整可执行代码如下:


import org.apache.flink.streaming.api.functions.source.RichParallelSourceFunction;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TDengineSourceFunction extends RichParallelSourceFunction<RunData> {

    private transient Connection connection;        // 使用 transient 避免序列化
    private transient PreparedStatement preparedStatement;
    private transient ResultSet resultSet;
    private String query;
    private volatile boolean isRunning = true;

    private String jdbcUrl;
    private String user;

    private String password;


    public TDengineSourceFunction(String jdbcUrl, String user, String password, String query) {
        this.query = query;
        this.jdbcUrl = jdbcUrl;
        this.user = user;
        this.password = password;

        // JDBC连接参数在open()方法中初始化
    }

    @Override
    public void open(org.apache.flink.configuration.Configuration parameters) throws Exception {
        super.open(parameters);
        Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
        // 在这里初始化数据库连接
        this.connection = DriverManager.getConnection(jdbcUrl, user, password);
        // 准备SQL查询语句
        this.preparedStatement = connection.prepareStatement(query);
        this.resultSet = preparedStatement.executeQuery();
    }

    @Override
    public void run(SourceContext<RunData> sourceContext) throws Exception {
        while (isRunning && resultSet.next()) {
            // 从ResultSet中提取数据并转换为RunData对象
            RunData data = convertResultSetToData(resultSet);
            // 将数据发送到Flink的处理流中
            if (data != null) {
                sourceContext.collect(data);
            }
        }
    }

    @Override
    public void cancel() {
        isRunning = false;
        // 关闭资源
        try {
            if (resultSet != null) resultSet.close();
            if (preparedStatement != null) preparedStatement.close();
            if (connection != null) connection.close();
        } catch (SQLException e) {
            // 处理关闭资源时的异常
            e.printStackTrace();
        }
    }

    private RunData convertResultSetToData(ResultSet resultSet) throws SQLException {
        // 提取单行数据
      
        // 将数据转换为 RunData 对象


      //  return new RunData(......);
        return null;
    }
}
作者 east
tdengine 12月 12,2024

TDEngine 删除数据解决”The DELETE statement must have a definite time window range”

用DBeaver生成Delete语句

DELETE FROM iotdb.car
WHERE ts = ‘2024-08-31 07:21:14.000’ AND val = 200.0

执行后报错:The DELETE statement must have a definite time window range

以为是要加时间范围。修改成

DELETE FROM iotdb.car
WHERE ts > ‘2024-08-31 07:21:13.000’ AND
ts > ‘2024-08-31 07:21:14.000 AND val = 200.0

还是报同样的错误,以为是时间范围太大还是太小,进行各种修改时间范围还是报错依旧。

看了官方文档说明:

0x80002655The DELETE statement must have a definite time window rangeDELETE语句中存在非法WHERE条件检查并修正SQL语句

结果官方示例,修改为:

DELETE FROM iotdb.car
WHERE ts = ‘2024-08-31 07:21:14.000’

果然执行成功了。TDEngine还是有些和Mysql有些不同,现在用的
DBeaver 进行删除行也是报错,用DBeaver生成的sql有时是存在问题。还是要结合官方文档进行判断。

作者 east
tdengine 9月 12,2024

tdengine存放的数据是类似mysql那样吗

TDengine 存放的数据并不完全类似于 MySQL。虽然两者都是数据库管理系统,但它们的设计目标、数据组织方式和存储结构有着本质的不同。

数据组织方式:

  • TDengine:它专为处理时序数据设计,因此其数据组织方式也充分考虑到了这一点。TDengine 将每一个采集点的数据作为数据库中的一张独立的表来存储,这种设计使得对于特定采集点的数据,无论是内存还是硬盘上的数据点都可以被快速访问 1。此外,TDengine 还引入了超级表(Super Table)的概念,允许用户定义一组具有相同模式(schema)的表,从而简化数据管理和查询。
  • MySQL:作为一个通用的关系型数据库,MySQL 主要处理的是关系型数据,即数据之间的关系可以通过外键等机制建立起来。MySQL 中的数据组织通常是基于表的,表与表之间通过关联关系进行链接,形成复杂的数据模型。

数据存储结构:

  • TDengine:采用了列式存储的方式,这有助于提高压缩和查询效率。TDengine 还引入了虚拟数据节点(vnode)的概念,每个 vnode 负责为采集的时序数据提供写入、查询和计算的功能,同时便于负载均衡、数据恢复和支持异构环境 10。存储的数据包括时序数据以及库、表相关的元数据、标签数据等,这些数据具体分为时序数据,存放于 vnode 里,由 data、head 和 last 三个文件组成 4。
  • MySQL:则主要基于行存储,尽管 MySQL 的 InnoDB 引擎也支持行级锁定和某些形式的数据压缩,但它的设计初衷是为了支持事务处理和复杂的 SQL 查询,因此在数据存储上更注重事务的一致性和隔离性。

性能比较:

  • 写入性能:TDengine 相对于 MySQL 在写入性能方面表现出显著的优势,尤其在处理大规模数据集时,TDengine 可以通过简单调整虚拟节点数量的方式来获得更高的写入性能,并且针对大数据集写入场景展现出了更大的性能优势 2。在一些性能测试中,TDengine 的插入速度远远超过了 MySQL,尤其是在并发写入时表现更佳 7。
作者 east
tdengine 9月 12,2024

TDengine 和 MySQL 在数据查询方面有哪些区别?

TDengine 和 MySQL 在数据查询方面的区别主要体现在以下几个方面:

查询性能

  • TDengine:由于专为时序数据设计,TDengine 在处理时序数据查询时通常会有更好的性能。它采用了列式存储和数据压缩技术,这使得在查询大量时间序列数据时能够更快地从磁盘加载数据,并且减少了数据传输的带宽需求。此外,TDengine 的查询优化器可能会针对时序数据的特点进行专门的优化,例如对时间范围的快速定位和过滤。
  • MySQL:虽然 MySQL 也可以处理时序数据,但由于它是为通用关系型数据设计的,所以在处理大规模时间序列数据时可能不如 TDengine 高效。MySQL 的查询优化器通常需要处理更多的索引和复杂的 SQL 语句,这可能会导致在大规模数据集上的查询性能下降。

查询语言

  • TDengine:使用一种简单的 SQL-like 查询语言,但它针对时序数据做了特定的扩展,支持一些特殊的函数,如聚合函数,这些函数特别适合处理时间序列数据。例如,它可以很容易地实现时间窗口内的数据聚合、滑动窗口计算等功能。
  • MySQL:使用标准的 SQL 查询语言,支持丰富的查询功能,包括复杂的连接操作、子查询、事务处理等。MySQL 的查询语言更加通用,可以处理各种类型的数据和查询需求。

扩展性和并行处理

  • TDengine:设计了分布式架构,可以在多个节点上水平扩展,利用多核 CPU 并行处理查询请求。这意味着 TDengine 在大规模数据集上的查询可以利用集群中的多台机器来加速查询响应时间。
  • MySQL:虽然 MySQL 也有分布式和集群解决方案(如 MySQL Cluster),但在默认情况下,它并不是为大规模分布式查询设计的。MySQL 的扩展性更多依赖于主从复制、分片(Sharding)等技术。

数据模型

  • TDengine:支持超级表(Super Table)的概念,这是一种用来存储大量具有相同模式(schema)的表的方法,这使得对相似数据的查询变得非常高效。超级表可以帮助简化数据管理和查询,特别是在 IoT 场景下,很多设备产生的数据格式是一致的。
  • MySQL:支持传统的表和视图模型,数据查询通常需要明确指定表名和字段,对于具有相同模式的数据,MySQL 可能需要多个表来表示,这增加了查询的复杂性。

特定功能

  • TDengine:提供了针对时序数据的一些特定功能,如自动数据过期处理、数据压缩、实时数据分析等。这些功能使得 TDengine 在处理时间序列数据时更加得心应手。
  • MySQL:虽然也可以通过插件或者第三方工具来增强其处理时序数据的能力,但它并不是专门为这些功能设计的。

总的来说,TDengine 和 MySQL 在数据查询方面的设计目标和服务场景不同。TDengine 以其高效的时序数据处理能力,在物联网、监控系统等领域有较好的表现;而 MySQL 则因其通用性和广泛的适用性,在各种数据库应用中都有很好的表现。选择哪种数据库取决于具体的应用需求和数据特性。

作者 east

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.