PostgreSQL 连接器:在 SeaTunnel 中的应用与优势

news2024/11/23 13:01:40

在现代企业中,数据已经成为核心资产,基于开源数据集成平台SeaTunnel,工程师如何高效地连接和管理这些数据源,直接关系到企业的竞争力和运营效率。

file

本文将给大家介绍如何通过 JDBC PostgreSQL 数据源连接器,在 SeaTunnel 平台中实现高效的数据处理与集成,并详细解析其关键功能和使用场景。


支持的引擎

在数据集成和处理的过程中,选择合适的引擎至关重要。JDBC PostgreSQL 数据源连接器支持以下引擎:

  • Spark: 适用于大规模数据处理和实时流处理。
  • Flink: 强大的流式数据处理引擎,适合需要低延迟和高吞吐量的场景。
  • SeaTunnel Zeta: 专为数据集成和处理设计的轻量级引擎,提供高效、灵活的解决方案。

使用依赖

使用 Spark 或 Flink 引擎时,需要确保将 JDBC 驱动程序 jar 包 放置在 ${SEATUNNEL_HOME}/plugins/ 目录中。

对于 SeaTunnel Zeta 引擎

使用 SeaTunnel Zeta 引擎时,请将 JDBC 驱动程序 jar 包 放置在 ${SEATUNNEL_HOME}/lib/ 目录中。

关键功能

JDBC PostgreSQL 数据源连接器在数据处理过程中,提供了一系列关键功能,帮助企业高效地管理和利用数据:

  • 批量处理 (Batch): 支持大规模数据的批量读取和处理。
  • 流处理 (Stream): 当前尚未支持流式数据处理。
  • 精确一次 (Exactly-Once): 确保数据处理的精确一致性,避免重复和数据丢失。
  • 列投影 (Column Projection): 允许用户选择和投影特定的列,以优化数据读取的性能。
  • 并行处理 (Parallelism): 支持数据的并行读取和处理,提高处理效率。
  • 用户定义的拆分 (User-Defined Split): 支持用户定义的拆分策略,灵活处理不同的数据分片需求。

数据源信息

连接器支持不同版本的 PostgreSQL 数据源,每个版本可能使用不同的驱动程序类。以下是支持的数据源信息:

数据源支持的版本驱动程序连接 URLMaven 下载链接
PostgreSQL各版本依赖使用不同的驱动程序类org.postgresql.Driverjdbc:postgresql://localhost:5432/test下载
PostgreSQL若需操作 GEOMETRY 类型数据org.postgresql.Driverjdbc:postgresql://localhost:5432/test下载

数据库依赖

请下载与您的数据源相对应的 Maven 支持列表,并将其复制到 $SEATUNNEL_HOME/plugins/jdbc/lib/ 目录中。例如,对于 PostgreSQL 数据源,请将 postgresql-xxx.jar 文件复制到上述目录。

数据类型映射

JDBC PostgreSQL 连接器提供了丰富的数据类型支持,将 PostgreSQL 数据类型映射到 SeaTunnel 的数据类型:

PostgreSQL 数据类型SeaTunnel 数据类型
BOOLBOOLEAN
_BOOLARRAY
BYTEABYTES
_BYTEAARRAY
INT2, SMALLSERIALSMALLINT
_INT2ARRAY
INT4, SERIALINT
_INT4ARRAY
INT8, BIGSERIALBIGINT
_INT8ARRAY
FLOAT4FLOAT
_FLOAT4ARRAY
FLOAT8DOUBLE
_FLOAT8ARRAY
NUMERIC (指定列大小 > 0)DECIMAL (指定列大小,获取指定列的小数点右边的数字个数)
NUMERIC (指定列大小 < 0)DECIMAL (38, 18)
BPCHAR, CHARACTER, VARCHAR, TEXTSTRING
_BPCHAR, _CHARACTER, _VARCHAR, _TEXTARRAY
TIMESTAMP(s), TIMESTAMPTZ(s)TIMESTAMP(s)
TIME(s), TIMETZ(s)TIME(s)
DATEDATE

选项

名称类型必填默认值描述
urlString-JDBC 连接的 URL。例如:jdbc:postgresql://localhost:5432/test
driverString-连接到远程数据源的 JDBC 类名,如果使用 PostgreSQL,值为 org.postgresql.Driver
userString-连接实例的用户名
passwordString-连接实例的密码
queryString-查询语句
connection_check_timeout_secInt30验证连接的数据库操作完成的等待时间(秒)
partition_columnString-并行处理的分区列名,只支持数值类型主键,且只能配置一个列
partition_lower_boundBigDecimal-分区列的最小值,如果未设置,SeaTunnel 将查询数据库获取最小值
partition_upper_boundBigDecimal-分区列的最大值,如果未设置,SeaTunnel 将查询数据库获取最大值
partition_numInt作业并行度分区数量,只支持正整数,默认值为作业并行度
fetch_sizeInt0对于返回大量对象的查询,可以配置行获取大小以提高性能,减少满足选择条件所需的数据库命中次数。0 表示使用 JDBC 默认值
propertiesMap-其他连接配置参数,当 properties 和 URL 存在相同参数时,优先级由驱动程序的具体实现决定,例如在 MySQL 中,properties 优先于 URL

并行读取

JDBC 源连接器支持从表中并行读取数据。SeaTunnel 将使用某些规则拆分表中的数据,然后交给读者读取。读者的数量由 parallelism 选项决定。

拆分键规则

  1. 如果 partition_column 不为空,将用于计算拆分。该列必须是 支持的拆分数据类型
  2. 如果 partition_column 为空,SeaTunnel 将从表中读取架构并获取主键和唯一索引。如果主键和唯一索引中有多个列,支持的拆分数据类型 中的第一列将用于拆分数据。例如,表有主键(nn guid, name varchar),因为 guid 不在 支持的拆分数据类型 中,因此将使用列 name 进行数据拆分。

支持的拆分数据类型

  • 字符串
  • 数字(int、bigint、decimal 等)
  • 日期

相关拆分选项

split.size

每个拆分包含多少行,当读取表时,捕获的表将拆分为多个拆分。

split.even-distribution.factor.lower-bound

不推荐使用

块键分布因子的下限。此因子用于确定表数据是否均匀分布。如果计算出的分布因子大于或等于此下限(即(MAX(id) - MIN(id) + 1)/ 行数),则表块将优化为均匀分布。否则,如果分布因子较小,表将被视为不均匀分布,并在估计的分片数超过 sample-sharding.threshold 值时使用基于采样的分片策略。默认值为 0.05。

split.even-distribution.factor.upper-bound

不推荐使用

块键分布因子的上限。此因子用于确定表数据是否均匀分布。如果计算出的分布因子小于或等于此上限(即```markdown

PostgreSQL 数据源连接器:在 SeaTunnel 中的应用与优势

在现代企业中,数据已经成为核心资产,如何高效地连接和管理这些数据源,直接关系到企业的竞争力和运营效率。本文将深入探讨如何通过 JDBC PostgreSQL 数据源连接器,在 SeaTunnel 平台中实现高效的数据处理与集成,并详细解析其关键功能和使用场景。


支持的引擎

在数据集成和处理的过程中,选择合适的引擎至关重要。JDBC PostgreSQL 数据源连接器支持以下引擎:

  • Spark: 适用于大规模数据处理和实时流处理。
  • Flink: 强大的流式数据处理引擎,适合需要低延迟和高吞吐量的场景。
  • SeaTunnel Zeta: 专为数据集成和处理设计的轻量级引擎,提供高效、灵活的解决方案。

使用依赖

使用 Spark 或 Flink 引擎时,需要确保将 JDBC 驱动程序 jar 包 放置在 ${SEATUNNEL_HOME}/plugins/ 目录中。

对于 SeaTunnel Zeta 引擎

使用 SeaTunnel Zeta 引擎时,请将 JDBC 驱动程序 jar 包 放置在 ${SEATUNNEL_HOME}/lib/ 目录中。

关键功能

JDBC PostgreSQL 数据源连接器在数据处理过程中,提供了一系列关键功能,帮助企业高效地管理和利用数据:

  • 批量处理 (Batch): 支持大规模数据的批量读取和处理。
  • 精确一次 (Exactly-Once): 确保数据处理的精确一致性,避免重复和数据丢失。
  • 列投影 (Column Projection): 允许用户选择和投影特定的列,以优化数据读取的性能。
  • 并行处理 (Parallelism): 支持数据的并行读取和处理,提高处理效率。
  • 用户定义的拆分 (User-Defined Split): 支持用户定义的拆分策略,灵活处理不同的数据分片需求。

数据源信息

连接器支持不同版本的 PostgreSQL 数据源,每个版本可能使用不同的驱动程序类。以下是支持的数据源信息:

数据源支持的版本驱动程序连接 URLMaven 下载链接
PostgreSQL各版本依赖使用不同的驱动程序类org.postgresql.Driverjdbc:postgresql://localhost:5432/test下载
PostgreSQL若需操作 GEOMETRY 类型数据org.postgresql.Driverjdbc:postgresql://localhost:5432/test下载

数据库依赖

请下载与您的数据源相对应的 Maven 支持列表,并将其复制到 $SEATUNNEL_HOME/plugins/jdbc/lib/ 目录中。例如,对于 PostgreSQL 数据源,请将 postgresql-xxx.jar 文件复制到上述目录。

数据类型映射

JDBC PostgreSQL 连接器提供了丰富的数据类型支持,将 PostgreSQL 数据类型映射到 SeaTunnel 的数据类型:

PostgreSQL 数据类型SeaTunnel 数据类型
BOOLBOOLEAN
_BOOLARRAY
BYTEABYTES
_BYTEAARRAY
INT2, SMALLSERIALSMALLINT
_INT2ARRAY
INT4, SERIALINT
_INT4ARRAY
INT8, BIGSERIALBIGINT
_INT8ARRAY
FLOAT4FLOAT
_FLOAT4ARRAY
FLOAT8DOUBLE
_FLOAT8ARRAY
NUMERIC (指定列大小 > 0)DECIMAL (指定列大小,获取指定列的小数点右边的数字个数)
NUMERIC (指定列大小 < 0)DECIMAL (38, 18)
BPCHAR, CHARACTER, VARCHAR, TEXTSTRING
_BPCHAR, _CHARACTER, _VARCHAR, _TEXTARRAY
TIMESTAMP(s), TIMESTAMPTZ(s)TIMESTAMP(s)
TIME(s), TIMETZ(s)TIME(s)
DATEDATE

选项

名称类型必填默认值描述
urlString-JDBC 连接的 URL。例如:jdbc:postgresql://localhost:5432/test
driverString-连接到远程数据源的 JDBC 类名,如果使用 PostgreSQL,值为 org.postgresql.Driver
userString-连接实例的用户名
passwordString-连接实例的密码
queryString-查询语句
connection_check_timeout_secInt30验证连接的数据库操作完成的等待时间(秒)
partition_columnString-并行处理的分区列名,只支持数值类型主键,且只能配置一个列
partition_lower_boundBigDecimal-分区列的最小值,如果未设置,SeaTunnel 将查询数据库获取最小值
partition_upper_boundBigDecimal-分区列的最大值,如果未设置,SeaTunnel 将查询数据库获取最大值
partition_numInt作业并行度分区数量,只支持正整数,默认值为作业并行度
fetch_sizeInt0对于返回大量对象的查询,可以配置行获取大小以提高性能,减少满足选择条件所需的数据库命中次数。0 表示使用 JDBC 默认值
propertiesMap-其他连接配置参数,当 properties 和 URL 存在相同参数时,优先级由驱动程序的具体实现决定,例如在 MySQL 中,properties 优先于 URL

并行读取

JDBC 源连接器支持从表中并行读取数据。SeaTunnel 将使用某些规则拆分表中的数据,然后交给读者读取。读者的数量由 parallelism 选项决定。

拆分键规则

  1. 如果 partition_column 不为空,将用于计算拆分。该列必须是 支持的拆分数据类型
  2. 如果 partition_column 为空,SeaTunnel 将从表中读取架构并获取主键和唯一索引。如果主键和唯一索引中有多个列,支持的拆分数据类型 中的第一列将用于拆分数据。例如,表有主键(nn guid, name varchar),因为 guid 不在 支持的拆分数据类型 中,因此将使用列 name 进行数据拆分。

支持的拆分数据类型

  • 字符串
  • 数字(int、bigint、decimal 等)
  • 日期

相关拆分选项

split.size

每个拆分包含多少行,当读取表时,捕获的表将拆分为多个拆分。

split.even-distribution.factor.lower-bound

不推荐使用

块键分布因子的下限。此因子用于确定表数据是否均匀分布。如果计算出的分布因子大于或等于此下限(即(MAX(id) - MIN(id) + 1)/ 行数),则表块将优化为均匀分布。否则,如果分布因子较小,表将被视为不均匀分布,并在估计的分片数超过 sample-sharding.threshold 值时使用基于采样的分片策略。默认值为 0.05。

split.even-distribution.factor.upper-bound

不推荐使用

块键分布因子的上限。此因子用于确定表数据是否均匀分布。如果计算出的分布因子小于或等于此上限(即(MAX(id) - MIN(id) + 1)/ 行数),则表块将优化为均匀分布。否则,如果分布因子更大,则如果预估的分片数超过 指定的值,则该表将被视为分布不均匀,并且将使用基于采样的分片策略sample-sharding.threshold。默认值为 100.0。

split.sample-sharding.threshold

此配置指定触发采样分片策略的估计分片数阈值。当分布因子超出 chunk-key.even-distribution.factor.upper-boundchunk-key.even-distribution.factor.lower-bound 指定的范围,并且估计的分片数(计算为近似行数/块大小)超过此阈值时,将使用采样分片策略。这有助于更高效地处理大数据集。默认值为 1000 分片。

split.inverse-sampling.rate

采样分片策略中使用的采样率的倒数。例如,如果此值设置为 1000,则表示在采样过程中应用 1/1000 的采样率。此选项提供了控制采样粒度的灵活性,从而影响最终的分片数量。对于非常大的数据集,较低的采样率是首选。默认值为 1000。

partition_column [string]

用于拆分数据的列名。

partition_upper_bound [BigDecimal]

扫描的 partition_column 最大值,如果未设置,SeaTunnel 将查询数据库获取最大值。

partition_lower_bound [BigDecimal]

扫描的 partition_column 最小值,如果未设置,SeaTunnel 将查询数据库获取最小值。

partition_num [int]

不推荐使用,正确的方法是通过 split.size 控制拆分数量

需要拆分成多少个分片,仅支持正整数。默认值为作业并行度。

提示

如果表不能拆分(例如,表没有主键或唯一索引,并且未设置 partition_column),它将以单一并发运行。

使用 table_path 替换 query 进行单表读取。如果需要读取多个表,请使用 table_list

任务示例

简单示例:

此示例在测试 "数据库" 中查询 type_bin 'table' 16 数据,并以单并行方式查询其所有字段。您还可以指定要查询的字段并最终输出到控制台。

# 定义运行环境
env {
  parallelism = 4
  job.mode = "BATCH"
}

source{
    Jdbc {
        url = "jdbc:postgresql://localhost:5432/test"
        driver = "org.postgresql.Driver"
        user = "root"
        password = "test"
        query = "select * from source limit 16"
    }
}

transform {
    # 请访问 https://seatunnel.apache.org/docs/transform-v2/sql
}

sink {
    Console {}
}

通过 partition_column 并行

使用您配置的分片字段并行读取查询表中的数据。如果您想读取整个表,可以这样做。

  env {
  parallelism = 4
  job.mode = "BATCH"
}
source{
    jdbc{
        url = "jdbc:postgresql://localhost:5432/test"
        driver = "org.postgresql.Driver"
        user = "root"
        password = "test"
        query = "select * from source"
        partition_column= "id"
        partition_num = 5
    }
}
sink {
  Console {}
}

通过主键或唯一索引并行

配置 table_path 将开启自动拆分,您可以配置 split.* 以调整拆分策略。

  env {
  parallelism = 4
  job.mode = "BATCH"
}
source {
    Jdbc {
        url = "jdbc:postgresql://localhost:5432/test"
        driver = "org.postgresql.Driver"
        connection_check_timeout_sec = 100
        user = "root"
        password = "123456"
        table_path = "test.public.AllDataType_1"
        query = "select * from public.AllDataType_1"
        split.size = 10000
    }
}

sink {
  Console {}
}

并行边界

指定查询上限和下限的数据会更高效。根据您配置的上限和下限读取数据源会更高效。

source{
    jdbc{
        url = "jdbc:postgresql://localhost:5432/test"
        driver = "org.postgresql.Driver"
        user = "root"
        password = "test"
        query = "select * from source"
        partition_column= "id"

        # 返回的表名称
        result_table_name = "jdbc"
        partition_lower_bound = 1
        partition_upper_bound = 50
        partition_num = 5
    }
}

多表读取

配置 table_list 将开启自动拆分,您可以配置 split.* 以调整拆分策略

  env {
  job.mode = "BATCH"
  parallelism = 4
}
source {
  Jdbc {
    url="jdbc:postgresql://datasource01:5432/demo"
    user="iDm82k6Q0Tq+wUprWnPsLQ=="
    driver="org.postgresql.Driver"
    password="iDm82k6Q0Tq+wUprWnPsLQ=="
    "table_list"=[
        {
            "table_path"="demo.public.AllDataType_1"
        },
        {
            "table_path"="demo.public.alldatatype"
        }
    ]
    #where_condition= "where id > 100"
    split.size = 10000
    #split.even-distribution.factor.upper-bound = 100
    #split.even-distribution.factor.lower-bound = 0.05
    #split.sample-sharding.threshold = 1000
    #split.inverse-sampling.rate = 1000
  }
}

sink {
  Console {}
}

通过正确配置 PostgreSQL JDBC 源连接器,企业可以在复杂的数据环境中高效地管理和处理数据。

使用 SeaTunnel 的灵活性和强大的功能,用户可以轻松实现数据的并行处理和高效查询,从而在数据驱动的业务决策中获得更大的优势。

本文由 白鲸开源科技 提供发布支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1869970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

240627_图像24位深度(RGB图)转为8位深度(单通道图)

240627_图像24位深度&#xff08;RGB图&#xff09;转为8位深度&#xff08;单通道图&#xff09; 在使用网络上下载下来的一部分图像分割数据集时&#xff0c;有些标签图你看着是一个黑白图&#xff0c;但是他还是有可能是一张RGB三通道图&#xff0c;具体怎么区分呢。右击图…

ARM芯片架构(RTOS)

前言&#xff1a;笔记韦东山老师的rtos教程&#xff0c;连接放在最后 #ARM介绍 arm芯片属于精简指令集risc&#xff0c;所用的指令比较简单&#xff0c;ARM架构是一种精简指令集&#xff08;RISC&#xff09;架构&#xff0c;广泛应用于移动设备、嵌入式系统、物联网等领域。AR…

英国国王座驾车标的逆向工程

多功能设计和制造解决方案为独特的挑战提供了引人注目的优势。Impossible Creations是一家来自英国的定制扫描、设计和建模公司&#xff0c;专门帮助客户完成无限制得创作任务。在他们最近接到的一个项目中&#xff0c;为了修复象征英国国王座驾的大英帝国吉祥物&#xff0c;Im…

【博士每天一篇文献-综述】Biological underpinnings for lifelong learning machines

阅读时间&#xff1a;2023-12-17 1 介绍 年份&#xff1a;2015 作者&#xff1a;Dhireesha Kudithipudi&#xff0c;Mario Aguilar-Simon&#xff0c;其中通讯作者Josh Bongard教授也是另一篇论文的通讯作者《Neural modularity helps organisms evolve to learn new skills …

widows下 vscode 的 terminal / powershell,ctrl+v失灵,输出^v

问题 原因 最近装了PSReadLine Import-Module PSReadLineSet-PSReadLineOption -PredictionSource History Set-PSReadLineOption -PredictionViewStyle InlineView Set-PSReadLineOption -EditMode Emacsvscode不兼容 解决方法 注释掉最后面的 Import-Module PSReadLineS…

Linux通过expect实现免交互

免交互 Here Document 用于将多行字符串直接传递给命令的方式&#xff0c;不需要人为交互命令界面&#xff0c;实现免交互 当使用Here Document操作文件时&#xff0c;需要借助一个文件结束符 EOF&#xff1a;文件结束符 示例 在脚本文件中写入以下内容 <<&#x…

RabbitMQ安装部署

简介 RabbitMQ一款知名的开源消息队列系统&#xff0c;为企业提供消息的发布、订阅、点对点传输等消息服务。 RabbitMQ在企业开发中十分常见&#xff0c;课程为大家演示快速搭建RabbitMQ环境。 安装 rabbitmq在yum仓库中的版本比较老&#xff0c;所以我们需要手动构建yum仓库…

优刻得首个「国产千卡智算集群」落地,支持智源千亿大模型训练

在人工智能引领的时代浪潮中&#xff0c;算力已成为技术进步与创新的核心驱动力。面对当下AI算力需求的飙升、高端AI芯片供应受限的挑战&#xff0c;加之OpenAI带来的技术封锁&#xff0c;唯有坚定不移的发展自主可控的国产技术方案&#xff0c;持续壮大国产智算集群规模&#…

等保测评中的问题与建议

随着信息技术的广泛使用和飞速发展&#xff0c;网络安全已逐渐演变为威胁经济社会发展的关键议题。信息安全的范围涵盖了政治、商务、军事、教育等多个方面。其中&#xff0c;信息的存储、分享以及管理&#xff0c;主要取决于政府的宏观规划和决策、商业运作的信息、银行的财务…

字节跳动发布的Coze,可以免费使用GPT-4o模型了

Coze是字节跳动推出的一个AI聊天机器人和应用程序编辑开发平台&#xff0c;可以理解为字节跳动版的GPTs。无论用户是否有编程经验&#xff0c;都可以通过该平台快速创建各种类型的聊天机器人、智能体、AI应用&#xff0c;并将其部署在社交平台和即时聊天应用程序中&#xff0c;…

丝杆支撑座:滚珠丝杆稳定运行的守护者!

丝杆支撑座是丝杆和电机之间连接的重要组成部分&#xff0c;发挥着非常重要的功能。提到丝杆支撑座和滚珠丝杆&#xff0c;很多人都会想到支撑关系&#xff0c;但丝杆支撑座作为滚珠丝杆系统中至关重要的角色&#xff0c;其作用远不止于简单的支撑。 丝杆支撑座安装过程非常简单…

解锁横向招聘:创新您的人才搜索

技能差距仍然是面试官面临的问题之一。在这些空缺职位中&#xff0c;很难找到合适的技能候选人&#xff0c;特别是高级职位或以上职位。另一方面&#xff0c;申请人也发现很难找到一份适合自己的工作&#xff0c;因为他们抱怨工作要求太窄或太具体。在具有挑战性的职位招聘环境…

目标检测之YoloV1

一、预测阶段&#xff08;前向推断&#xff09; 在预测阶段Yolo就相当于一个黑箱子&#xff0c;输入的是448*448*3的图像&#xff0c;输出是7*7*30的张量&#xff0c;包含了所有预测框的坐标、置信度和类别 为什么是7*7*30呢&#xff1f; --将输入图像划分成s*s个grid cell&a…

深海电波,智能驾驭:海上发电系统中的先进网关技术

随着技术的不断演进&#xff0c;海上风电场逐渐走向深海&#xff0c;随之而来的高速通信保障成为一大难题。同时&#xff0c;海上风电特殊的环境与部署技术&#xff0c;也给运维带来了作业难、成本高、响应慢等困难。通过在沿海岸边建立高站&#xff0c;结合超远覆盖、载波聚合…

Packer-Fuzzer一款好用的前端高效安全扫描工具

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、Packer Fuzzer介绍 Packer Fuzzer是一款针对Webpack…

SAP 免费退货销售订单类型配置简介

作为一名 SD顾问&#xff0c;必须具备熟悉系统和系统配置&#xff0c;但是之前都是做的PP顾问&#xff0c;现在用户需要新增了一个销售订单类型&#xff0c;所以自己研究销售订单类型的配置&#xff0c;才有了以下的文章&#xff0c;希望对各位学习的同学有所帮助 1、创建销售…

如何有效降低云消息使用成本?涂鸦Pulsar云消息史诗级大更新来了!超级干货攻略快收藏

月末了&#xff0c;相信大家都会有信用卡额度超支的担忧&#xff0c;生怕一不留神就会超出预算&#xff0c;并且事后还需要仔细核对消费情况。类似的焦虑&#xff0c;也会出现在使用涂鸦 Pulsar 云消息服务时。虽然涂鸦 Pulsar 云消息能满足开发者对设备各类事件实时性和持久化…

STM32单片机实现串口IAP升级

一.概述 1.要实现串口IAP升级&#xff0c;首先要编写一个bootloader程序&#xff0c;然后再写支持IAP的app程序&#xff1b; 2.keil下bootloader的程序rom和ram设置 3.app程序要用bin文件 注&#xff1a;本文以STM32H743举例&#xff0c;其他stm32单片机IAP升级原理类似。 …

AI时代的风口,中小企业也不能错过

文&#xff5c;白 鸽 编&#xff5c;周效敬 这些场景&#xff0c;对你来说或许并不陌生&#xff1a; 在医院的大屏上&#xff0c;一个医生模样的数字人在做医疗知识科普&#xff1b;在抖音的直播间里&#xff0c;一个真人模样的数字人在线上直播带货&#xff0c;24小时无休无…

音频剪辑技巧:音频降噪在线怎么降噪?分享7种录音去除杂音方法

相信很多小伙伴们都有这种苦恼&#xff1a;在编辑音频时&#xff0c;你可能发现即使你使用了价格昂贵的隔音麦克风&#xff0c;在录音中仍然存在呼吸声和咳嗽声。因此&#xff0c;如果要传达清晰干净的声音以表达你的信息&#xff0c;你该如何从录音去除杂音呢&#xff1f;别心…