33、实时数据流处理:水印、触发器与数据存储选择

实时数据流处理:水印、触发器与数据存储选择

1. 水印和触发器

在实时数据处理中,Beam 编程模型能隐式处理滑动窗口内的乱序记录,并默认处理延迟到达的记录。这里引入了“水印”的概念,它代表管道中未处理的最旧记录,是实时数据处理系统的固有属性,体现了管道中的延迟情况,Cloud Dataflow 会随时间跟踪并学习这种延迟。

1.1 水印的类型

  • 基于 Cloud Pub/Sub 插入时间的水印 :若以记录插入 Cloud Pub/Sub 的时间作为事件时间,水印能严格保证管道不会观察到事件时间更早的数据。
  • 用户指定事件时间的水印 :当用户通过指定时间戳标签来指定事件时间时,无法阻止发布程序向 Cloud Pub/Sub 插入旧记录,此时水印是基于观察到的历史延迟得出的经验值。水印的概念不仅适用于 Cloud Pub/Sub,对于间歇性的流数据源(如低功耗物联网设备),水印也有助于处理延迟问题。

1.2 触发器的作用

聚合统计的计算由“触发器”驱动,触发器触发时,管道会进行计算。管道中可以有多个触发器,通常每个触发器都与水印相关。默认触发器为 Repeatedly.forever(AfterWatermark.pastEndOfWindow()) ,意味着当水印超过窗口结束时间,且有延迟数据到达时,触发器就会触发,即每个延迟到达的记录都会单独处理,这种方式优先保证计算的正确性,但可能会牺牲一定的性能。

1.3 抖动对水印的影响

在模拟中添加均匀分布的抖动时,由于均匀延迟范围在 90 到 120 秒之间,最早和最晚到达记录的延迟差为 30 秒,因此 Cloud Dataflow 需要将窗口多保持 30 秒。通过 Cloud Platform Console 上的 Cloud Dataflow 作业监控网页可以查看学习到的水印值,点击任何转换步骤即可查看该值。

而对于指数分布的抖动,小延迟比大延迟更常见。在 Cloud Pub/Sub 管道的模拟数据中添加指数分布的抖动后,学习到的水印值为 21 秒。

1.4 调整触发器的权衡

默认触发器优先考虑正确性,逐个处理延迟记录并更新聚合结果。不过,我们可以轻松改变这种权衡。例如:

.triggering(Repeatedly.forever(
    AfterWatermark.pastEndOfWindow()
   .withLateFirings(
        AfterPane.elementCountAtLeast(10))
   .orFinally(AfterProcessingTime.pastFirstElementInPane()
       .plusDelayOf(Duration.standardMinutes(30)))))

在这个新的触发器设置中,计算仍在水印处触发。延迟记录每 10 条一批进行处理,但前提是它们在窗口开始后的 30 分钟内到达,超过这个时间的延迟记录将被丢弃。

1.5 水印和触发器的关系流程图

graph LR
    A[水印推进] --> B{是否超过窗口结束时间}
    B -- 是 --> C{是否有延迟数据到达}
    C -- 是 --> D[默认触发器触发]
    C -- 否 --> E[等待延迟数据]
    B -- 否 --> E
    F[新触发器设置] --> G[水印触发计算]
    G --> H{延迟记录是否在30分钟内到达}
    H -- 是 --> I[每10条一批处理延迟记录]
    H -- 否 --> J[丢弃延迟记录]

2. 事务、吞吐量和延迟

将输出的航班记录流式传输到 BigQuery 适用于航班延迟场景,但对于其他数据管道可能并非最佳选择。选择输出接收器时,应考虑四个因素:访问模式、事务、吞吐量和延迟。

2.1 选择输出接收器的因素

  • 访问模式 :若主要是长期存储和延迟访问数据,可将数据流式传输到 Cloud Storage 上的分片文件,这些文件可作为后续导入 Cloud SQL 或 BigQuery 进行数据分析的临时存储。在这里,假设需要近实时查询数据。
  • 事务性 :对于每个航班,会收到多个事件(如起飞、离地等)。需要考虑是否为每个航班创建一行以反映其最新状态,还是仅进行追加存储;读者是否可以接受稍微过时的记录,还是系统必须有单一的真实源和一致的行为。这些问题的答案决定了航班更新是否需要事务处理,还是可以在仅提供最终一致性保证的环境中进行。
  • 吞吐量 :需要了解每秒有多少航班事件,以及这个速率是否恒定,是否有高峰活动期。这些因素决定了系统需要处理的吞吐量。
  • 延迟 :如果提供最终一致性,需要确定可接受的延迟时间,即航班数据添加到数据库后,所有读者应在多长时间内看到新数据。目前,流式传输到 BigQuery 支持每秒最多 100,000 个事件,延迟约为几秒。对于吞吐量需求更高或延迟要求更低的情况,需要考虑其他解决方案。

2.2 可能的流式输出接收器

输出接收器 适用场景 特点
BigQuery 每秒处理数万条记录,延迟为几秒的场景,适用于许多仪表盘应用 完全托管的数据仓库,支持 SQL 查询
Cloud Storage 上的文本文件 主要用于数据保存,或可接受每小时批量更新到 BigQuery 的场景 可按小时分片,成本低于直接流式传输到 BigQuery
Cloud Bigtable 处理涉及数百 PB 数据、每秒数百万读写操作、延迟为毫秒级的工作负载 可大规模扩展的 NoSQL 数据库服务,吞吐量与节点数量线性相关,能自动重新平衡数据
Cloud SQL 频繁更新、低吞吐量、中等规模的数据,需要从多种工具和编程语言近实时访问的场景 由 MySQL 或 PostgreSQL 支持,关系型技术普遍,工具生态系统强大
Cloud Datastore 需要处理大规模数据集(数 TB 数据),避免层次对象与扁平关系表转换问题的场景 NoSQL 对象存储,设计为最终一致性,在某些查询中可实现强一致性
Cloud Spanner 需要强一致性、事务处理、SQL 查询能力,且数据可全球访问、能扩展到极大规模的场景 提供毫秒级延迟、极高的可用性,完全托管,无需手动复制或维护

在航班延迟场景中,不需要事务处理,每秒输入流少于 1000 个事件,插入数据库到应用程序获取航班延迟信息的延迟为几秒是可以接受的。BigQuery 完全托管,有许多数据可视化和报表创建工具支持,且成本相对较低,因此是合适的选择。

3. Cloud Bigtable 介绍

假设每秒有数十万条航班事件,且延迟要求为毫秒级(如飞机在飞行中提供最新坐标信息用于空中交通管制),Cloud Bigtable 是更好的选择。

3.1 Cloud Bigtable 的存储结构

Cloud Bigtable 将计算和存储分离,表被分片为连续行的块,称为“表片”。Cloud Bigtable 实例不直接存储表片,而是存储指向一组表片的指针,表片本身持久存储在 Cloud Storage 中。这样,即使节点出现故障,数据仍存储在 Cloud Storage 中,工作可以重新分配到其他节点,只需复制元数据。

3.2 Cloud Bigtable 的数据特点

  • 数据结构 :数据是排序的键值对映射,每行有一个唯一键。与 BigQuery 不同,Cloud Bigtable 按行存储,行按键值排序。
  • 列族 :相关的列被分组到“列族”中,不同的列族通常由不同的应用程序管理。在列族内,列有唯一的名称。
  • 时间序列记录 :特定行的特定列值可以在不同时间戳包含多个单元格,表是追加式的,所有值都存储在表中,这样可以维护单元格值随时间的时间序列记录。对于大多数情况,Cloud Bigtable 不关心数据类型,所有数据都被视为原始字节字符串。

3.3 Cloud Bigtable 的性能优化

Cloud Bigtable 表的性能与表片中的行排列有关,行按键排序。为了优化写入性能,希望多个写入操作并行进行,让每个 Cloud Bigtable 实例写入自己的表片集合,这要求行键不遵循可预测的顺序。而读取性能方面,若能同时读取多行则更高效。因此,在设计 Cloud Bigtable 模式时,关键是要在写入分布和读取集中之间找到平衡。

3.4 Cloud Bigtable 的表设计

3.4.1 短宽表设计

短宽表利用了 Cloud Bigtable 的稀疏性,通过列的存在或缺失来表示是否有对应的数据。例如,在汽车工厂场景中,若要查询特定汽车的零部件属性(如零件 ID、供应商、制造地点等),可以使用汽车序列号作为行键,每个独特的零件(如火花塞)对应一个列。由于无值的单元格不占用空间,不用担心随着新车型的引入列的数量会无限增加。为了提高写入效率,汽车序列号应从生产线编号开始,这样写入操作可以并行在不同表片上进行。同时,诊断应用程序在查询特定生产线特定日期生产的所有车辆时,能高效地读取连续行;服务中心查询特定车辆的所有零件时,只需读取一行,读取性能也很高。

3.4.2 高窄表设计

高窄表通常每行只存储一个事件。每个航班事件可以流式传输到 Cloud Bigtable 的新行中,这样可以记录每个航班的多个状态(如起飞、离地等)及其历史记录。每个航班约有 20 个字段,都可以属于同一个列族,使得流式更新简单直观。

3.5 行键设计

为了使高窄表的读写都高效,行键设计很关键。常见的查询可能涉及特定航空公司在特定机场之间的近期航班(如今天 AS 航空公司在 SEA 和 SJC 之间的航班状态)。为了实现高效查询,行键应包含出发地、目的地机场和航空公司信息,即 ORIGIN#DEST#CARRIER 。这样的设计有助于优化写入性能,虽然繁忙机场(如亚特兰大)对应的表片可能会出现热点问题,但大量以字母 A 开头的小机场可以平衡负载。

同时,为了提高扫描性能,应将最新数据存储在表的“顶部”。Timestamp 不能直接按常规方式使用,应将其转换为自 1970 年以来的毫秒数,然后用最大可能的长整型值减去该毫秒数,即 LONG_MAX - millisecondsSinceEpoch 。时间戳应放在行键的末尾,避免写入集中在一个表片上。最终行键格式为 ORIGIN#DEST#CARRIER#ReverseTimeStamp ,这里使用航班的预定出发时间作为时间戳,以避免因出发延迟导致键不同的问题。

3.6 流式传输到 Cloud Bigtable

以下是将航班事件流式传输到 Cloud Bigtable 的具体步骤:

3.6.1 创建 Cloud Bigtable 实例

使用 gcloud 命令创建实例:

gcloud beta bigtable \
    instances create flights \
    --cluster=datascienceongcp --cluster-zone=us-central1-b \
    --description="Chapter 10" --instance-type=DEVELOPMENT

这里创建了名为 flights 的实例,集群名为 datascienceongcp ,选择开发实例类型可以降低成本,因为集群不进行复制或全球可用。

3.6.2 在代码中引用实例和表

在 Cloud Dataflow 代码中,需要在项目 ID 的上下文中引用实例和表:

private static String INSTANCE_ID = "flights";
private String getInstanceName(MyOptions options) {
    return String.format("projects/%s/instances/%s", options.getProject(), INSTANCE_ID);
}

private static String TABLE_ID = "predictions";
private String getTableName(MyOptions options) {
    return String.format("%s/tables/%s", getInstanceName(options), TABLE_ID);
}

private static final String CF_FAMILY = "FL";
3.6.3 创建空表
Table.Builder tableBuilder = Table.newBuilder();
ColumnFamily cf = ColumnFamily.newBuilder().build();
tableBuilder.putColumnFamilies(CF_FAMILY, cf);
BigtableSession session = new BigtableSession(optionsBuilder
    .setCredentialOptions( CredentialOptions.credential(
        options.as( GcpOptions.class
            ).getGcpCredential())).build()));
BigtableTableAdminClient tableAdminClient = session.getTableAdminClient();

CreateTableRequest.Builder createTableRequestBuilder =
    CreateTableRequest.newBuilder()
       .setParent(getInstanceName(options))
       .setTableId(TABLE_ID).setTable(tableBuilder.build());
tableAdminClient.createTable(createTableRequestBuilder.build());
3.6.4 将航班预测转换为突变
PCollection<FlightPred> preds = ...;
BigtableOptions.Builder optionsBuilder =
    new BigtableOptions.Builder()
       .setProjectId(options.getProject())
       .setInstanceId(INSTANCE_ID)
       .setUserAgent("datascience-on-gcp");

createEmptyTable(options, optionsBuilder);
PCollection<KV<ByteString, Iterable<Mutation>>> mutations = toMutations(preds);
mutations.apply("write:cbt",
    BigtableIO.write()
       .withBigtableOptions(optionsBuilder.build())
       .withTableId(TABLE_ID));
3.6.5 创建行键和突变
FlightPred pred = c.element();
String key = pred.flight.getField(INPUTCOLS.ORIGIN)
    + "#" + pred.flight.getField(INPUTCOLS.DEST)
    + "#" + pred.flight.getField(INPUTCOLS.CARRIER)
    + "#" + (Long.MAX_VALUE - pred.flight.getFieldAsDateTime(
        INPUTCOLS.CRS_DEP_TIME).getMillis());

List<Mutation> mutations = new ArrayList<>();
long ts = pred.flight.getEventTimestamp().getMillis();
for (INPUTCOLS col : INPUTCOLS.values()) {
    addCell(mutations, col.name(), pred.flight.getField(col), ts);
}
if (pred.ontime >= 0) {
    addCell(mutations, "ontime",
        new DecimalFormat("0.00").format(pred.ontime), ts);
}
c.output(KV.of(ByteString.copyFromUtf8(key), mutations));
3.6.6 转换 Java 类型为字节
void addCell(List<Mutation> mutations, String cellName,
    String cellValue, long ts) {
    if (cellValue.length() > 0) {
        ByteString value = ByteString.copyFromUtf8(cellValue);
        ByteString colname = ByteString.copyFromUtf8(cellName);
        Mutation m =
            Mutation.newBuilder().setSetCell(
                Mutation.SetCell.newBuilder()
                   .setValue(value)
                   .setFamilyName(CF_FAMILY)
                   .setColumnQualifier(colname)
                   .setTimestampMicros(ts)
            ).build();
        mutations.add(m);
    }
}

通过以上步骤,可以将管道中的航班预测流式传输到 Cloud Bigtable。

综上所述,在实时数据处理中,合理运用水印和触发器可以优化数据处理的正确性和性能,同时根据不同的业务需求选择合适的输出接收器和数据库,能够确保数据处理的高效性和可靠性。对于需要高吞吐量和低延迟的场景,Cloud Bigtable 是一个强大的选择,但需要精心设计表结构和行键以达到最佳性能。

4. 不同数据存储方案对比总结

4.1 存储方案对比表格

存储方案 事务支持 吞吐量 延迟 适用场景
BigQuery 弱(流式写入无严格事务) 每秒最多 100,000 个事件 几秒 航班延迟等对事务要求不高、吞吐量适中、可接受几秒延迟的场景
Cloud Storage 文本文件 无 取决于后续处理 高(按小时批量处理) 数据保存、后续批量导入分析的场景
Cloud Bigtable 弱(部分操作支持原子性) 可线性扩展,支持数百万读写/秒 毫秒级 高吞吐量、低延迟要求的场景,如空中交通管制
Cloud SQL 强 低 - 中等 中等 频繁更新、低吞吐量、需要多种工具访问的场景
Cloud Datastore 部分支持(实体组内) 高 中等 大规模数据集、需要一定事务支持的场景
Cloud Spanner 强 高 毫秒级 强一致性、高可用性、全球可扩展的场景

4.2 选择存储方案的决策流程图

graph LR
    A[数据处理需求] --> B{是否需要事务处理}
    B -- 是 --> C{吞吐量要求}
    C -- 低 - 中等 --> D[Cloud SQL]
    C -- 高 --> E{是否需要全球扩展}
    E -- 是 --> F[Cloud Spanner]
    E -- 否 --> G[Cloud Datastore]
    B -- 否 --> H{吞吐量要求}
    H -- 低 - 中等 --> I{延迟要求}
    I -- 几秒 --> J[BigQuery]
    I -- 高(按小时) --> K[Cloud Storage 文本文件]
    H -- 高 --> L{延迟要求}
    L -- 毫秒级 --> M[Cloud Bigtable]
    L -- 几秒 --> J

5. 实时数据处理的最佳实践建议

5.1 水印和触发器的使用建议

  • 理解业务需求 :根据业务对数据正确性和处理性能的要求,选择合适的触发器。如果对数据准确性要求极高,可使用默认触发器;如果能接受一定的数据丢失以换取性能提升,可采用自定义的触发器设置。
  • 监控水印 :通过 Cloud Dataflow 作业监控网页实时查看水印值,了解管道的延迟情况,及时调整系统参数。
  • 测试抖动影响 :在模拟环境中添加不同类型的抖动(均匀分布、指数分布等),观察水印和触发器的行为,评估系统的稳定性和性能。

5.2 输出接收器选择建议

  • 明确业务场景 :仔细分析业务的访问模式、事务需求、吞吐量和延迟要求,根据这些因素选择最合适的输出接收器。
  • 考虑成本 :不同的存储方案成本不同,如 BigQuery 相对较为经济,而 Cloud Spanner 成本较高。在满足业务需求的前提下,选择成本效益最高的方案。
  • 进行性能测试 :在实际部署前,对不同的存储方案进行性能测试,比较它们在吞吐量、延迟等方面的表现,确保系统能够满足业务的实时性要求。

5.3 Cloud Bigtable 使用建议

  • 精心设计表结构 :根据业务查询模式,选择短宽表或高窄表设计,合理划分列族,提高数据存储和查询的效率。
  • 优化行键设计 :行键的设计直接影响读写性能,要确保行键包含关键查询信息,并采用合适的时间戳处理方式,避免热点问题。
  • 监控和调整 :定期监控 Cloud Bigtable 的性能指标,如读写吞吐量、延迟等,根据监控结果调整实例的配置和表结构。

6. 总结与展望

6.1 总结

实时数据处理在现代业务中扮演着越来越重要的角色,水印和触发器是处理乱序和延迟数据的关键机制,合理运用它们可以平衡数据处理的正确性和性能。在选择输出接收器时,需要综合考虑访问模式、事务、吞吐量和延迟等因素,不同的存储方案适用于不同的业务场景。Cloud Bigtable 作为一种高性能的存储解决方案,在高吞吐量、低延迟要求的场景中具有显著优势,但需要精心设计表结构和行键。

6.2 展望

随着数据量的不断增长和业务需求的日益复杂,实时数据处理技术将不断发展。未来,可能会出现更智能的水印和触发器算法,能够自动适应不同的业务场景和数据特征。同时,存储方案也将不断优化,提供更高的吞吐量、更低的延迟和更强的事务支持。此外,实时数据处理与人工智能、机器学习等技术的结合将更加紧密,为业务决策提供更及时、准确的支持。

在实际应用中,开发者需要不断学习和掌握新的技术和方法,根据业务需求灵活选择和组合各种工具和技术,以构建高效、可靠的实时数据处理系统。

相关推荐

【信息科学与工程学】【数据科学】第五十一篇 数据仓库00 基础设计01

数据仓库设计的系统性解决方案,涵盖架构模式、分层设计、百万级访问支撑、海量数据配置及与数据库/数据湖的对接策略: ​​ODS(操作数据层)​​:原始数据镜像,保留历史快照 ​​DWD(明细数据层)​​:清洗、标准化、维度退化 ​​DWS(汇总数据层)​​:主题宽表、轻度聚合 ​​ADS(应用数据层)​​:高度聚合,面向报表/API ​​二、百万用户访问架构设计​​ ​​1. 核心架构组件​​ ​​2. 关键配置参数(以Snowflake为例)​​ ​​3. 性能优化措

weixin_49199313的博客 1202

【信息科学与工程学】【安全领域】第三十五篇 网络安全算法表02

​分级处理​:实时增量 + 离线全量 + 自动校验三线并行​最终一致优先​:强同步仅用于支付等核心场景​双向容错​:Redis侧:读CK兜底(CK侧:自动屏蔽校验失败分区​业务适配​:graph LR高实时场景 --> Redis写+双重读分析场景 --> 放宽CK同步延迟报表场景 --> T+1校准保障该方案已在京东、美团等千亿级数据平台验证,支撑双11级流量下Redis与ClickHouse的数据协同。

weixin_49199313的博客 1341

【信息科学与工程学】计算机科学与自动化——第三百零五篇 数据中心 Scale-Up、Scale-Out、Scale-Across 01

临界带宽B_critical满足:V_orig/B_critical = V_orig/(r·B_critical) + V_orig/R_compress + r·V_orig/R_decompress ⇒ 1/B_critical = 1/(r·B_critical) + 1/R_compress + r/R_decompress ⇒ B_critical = (1 - 1/r) / (1/R_compress + r/R_decompress)。T_original中所有数据均经内存总线传输。

weixin_49199313的博客 475

【信息科学与工程学】【安全领域】第三十五篇 网络安全算法表

编号算法名称算法的逐步骤思考推理的数学方程式和分解的数学方程式参数/变量列表复杂度(时间/空间)1​AES (高级加密标准)​1. 密钥扩展:从初始密钥生成轮密钥。 2. 初始轮: 3. 主轮循环(Nr-1轮):  - SubBytes:(非线性字节替换)  - ShiftRows:对状态矩阵的行进行循环移位。  - MixColumns:(在GF(2⁸)上的矩阵乘法)  - AddRoundKey: 4. 最终轮:执行SubBytes、ShiftRows、AddR

weixin_49199313的博客 1376

嵌入式笔试面试题库 250 题|13 章从 C 语言到 FreeRTOS,每题带追问

面试里有两类问题。第一类问「static 有几个作用」,第二类问「串口丢数据你怎么查」。第一类决定你能不能进二面,第二类决定二面之后还有没有下文。 这份合并版 250 题、13 章,把上篇与下篇收在一本: · 上篇 130 题(一至六章):单片机与体系结构、C 语言关键字、指针与内存、位运算与寄存器、中断与并发、编译链接与内存布局; · 下篇 120 题(七至十三章):GPIO 与时钟、定时器与 ADC、串口 I2C SPI、DMA 与中断、FreeRTOS、通信协议与总线、项目与工程实践。 每题结构一致:一段分点参考答案(①②③ 给要点骨架),紧跟一条追问,写明面试官往下会挖哪一层。答案尽量落到三层——现象、根因、验证方法。比如「PWM 出不来波形」,不只列六项检查顺序,还说清为什么 TIM1 容易漏掉 MOE 这一位、怎么用示波器确认。 三个附录:A 是 40 天复习路线(每天 40 分钟,标每天题量与当章重点);B 是十三章自测评分表(现象 / 根因 / 验证三列打分);C 是按现象查题的排障索引,遇到具体问题直接定位到题号。 交付:Word 可编辑版 + PDF 打印版(A4 / 70 页)+ 使用说明。题号连续 Q001–Q250,目录与附录各一套,跨篇追问能顺着查。 说明:寄存器位定义与分频关系按 STM32F103 系列整理,换 F4/F7/G0 需按对应手册核对;FreeRTOS 部分按 10.x 之后接口描述。题库不替代动手调试。

政府科技管理者如何提升科技成果评估的准确性与透明度?.docx

政府科技管理者如何提升科技成果评估的准确性与透明度?

物联网模块充电电路设计 -.zip

树莓派物联网项目开发实战

鼎捷查询SQL,里面是2年的开发和查询bug程序

鼎捷查询SQL,里面是2年的开发和查询bug程序

HP ILO6 固件适用于Gen11-1.78

HP ILO6 固件适用于Gen11-1.78

agent-browser 实战资源包:给 AI Agent 装上浏览器(open/snapshot/click 最小复现 + smoke 脚本 + 中文README)

agent-browser(Vercel Labs 开源、Apache-2.0)实战配套包。本包全部脚本与示例页为作者自写(MIT),不含浏览器二进制、不含任何账号密码。 内容包含: - 中文 README:环境要求、安装、open→snapshot→click 循环讲解、安全注意、许可声明 - scripts/smoke.sh:对本地 samples/ 示例页离线跑通「打开→快照→点击→核对→关闭」,附 out/smoke-output.txt 实测留档 - scripts/demo-csdn.sh:真实站点(优快云 首页)最小演示,ref 动态解析 - package.json + package-lock.json:锁定 agent-browser 0.41.2,便于复现(Node >= 24) 实测环境:agent-browser 0.41.2 / Chrome for Testing 157 / Linux x86_64 / Node 24。 Chrome 需使用者自行 agent-browser install 下载(约 190MB,本包不代分发)。 关联博客:https://blog.youkuaiyun.com/mtl1994/article/details/170340810

科技中介服务机构在开展技术需求挖掘时,如何提升服务效率与精准度?.docx

科技中介服务机构在开展技术需求挖掘时,如何提升服务效率与精准度?

双闭环PWM整流器VOC控制 +SVPWM调制仿真(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink平台构建的双闭环PWM整流器VOC(虚拟磁链定向控制)与SVPWM(空间矢量脉宽调制)相结合的仿真模型,系统阐述了三相电压型PWM整流器在电压定向控制策略下的建模方法与控制实现。通过设计外环直流电压控制与内环电流控制的双闭环结构,实现了对整流器的高功率因数运行、能量双向流动及动态性能优化的精确调控。结合SVPWM调制技术,有效提升了直流侧电压利用率并显著降低输出电流谐波含量,增强了系统的整体效率与稳定性。该仿真模型适用于新能源发电、电动汽车充电系统、微电网等高性能电能变换应用场景,文档还配套提供了丰富的学习资源与技术支持渠道,便于深入研究与工程实践。; 适合人群:面向电气工程、自动化、电力电子及相关专业的高校学生、科研人员以及从事新能源、智能电网、电力传动等领域研发工作的工程师;尤其适合已具备自动控制理论、电力电子变换技术和MATLAB/Simulink仿真基础的专业人士进一步深化学习与应用。; 使用场景及目标:①深入理解PWM整流器的工作机理及其双闭环控制系统的架构设计;②掌握VOC控制与SVPWM调制的协同工作机制,提升系统动静态响应性能;③支撑科研课题、课程设计、毕业设计或实际工程项目中的整流器控制系统开发与验证;④作为高级电能变换技术的学习范例,促进对现代电力电子系统控制策略的综合理解与创新能力培养。; 阅读建议:建议结合文中提供的百度网盘链接与公众号资源,下载完整的Simulink仿真模型进行实操演练,在MATLAB环境中调整控制器参数并观察仿真结果,深入剖析控制逻辑与系统响应特性;同时可参考同系列资源如PI双闭环控制、电网不平衡工况下的控制策略等案例,开展对比分析与拓展研究,全面提升系统建模与控制设计的综合能力。

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文围绕两路半桥LLC谐振变换器的软开关技术展开,基于Simulink平台构建了详细的仿真模型,重点研究了不同谐振参数(如谐振电感、谐振电容)以及分裂电容结构对系统性能的影响。通过开环与闭环控制策略的对比分析,探讨了变换器在启动过程中的动态响应特性与稳定性,并实现了软启动设计,有效降低了启动冲击。仿真内容涵盖谐振腔的工作模态、ZVS(零电压开关)与ZCS(零电流开关)的实现条件,以及分裂电容对电压均衡和效率的优化作用,全面展示了LLC变换器在高频高效电源中的应用潜力。; 适合人群:电力电子、电气工程及相关专业的高校研究生、科研人员及从事开关电源设计的工程技术人员。; 使用场景及目标:①用于深入理解LLC谐振变换器的工作原理与软开关实现机制;②为高频高效率DC-DC变换器的研发提供仿真验证平台;③支撑科研项目中的拓扑优化与控制算法设计,尤其适用于需要分裂电容结构提升性能的场合。; 阅读建议:建议结合电力电子基础理论,先掌握LLC谐振变换器的基本工作模态,再逐步深入仿真模型细节,重点关注参数扫描与闭环动态响应的仿真结果,以实现理论与实践的有效结合。

双Buck电路并联VDCM下垂控制(Simulink仿真实现)

内容概要:本文提供了一个基于Plecs软件的全桥LLC谐振变换器高精度仿真模型,旨在通过系统化建模与仿真手段深入剖析LLC谐振变换器的工作原理、动态响应特性及关键参数设计方法。该模型完整涵盖主电路拓扑结构、软开关实现机制、谐振参数配置与闭环控制策略等核心内容,支持对变换器的效率优化、电压调节能力、谐波抑制性能及瞬态响应等关键指标进行全面评估,适用于电力电子领域的科研分析、工程设计与教学实践。; 适合人群:具备电力电子技术基础及相关仿真经验的高校研究生、科研机构研究人员以及从事高频开关电源、DC-DC变换器开发的工程技术人员。; 使用场景及目标:①深入理解全桥LLC谐振变换器的软开关实现机理与谐振腔参数(如Lr、Cr、Lm)的设计方法;②验证并优化电压/频率闭环控制策略,提升系统动态性能与稳定性;③作为高校课程或培训项目的教学案例,帮助学生掌握高频谐振变换器的建模、仿真与分析流程。; 其他说明:该仿真模型可与MATLAB/Simulink等工具联合使用,便于进行控制系统算法开发与系统级协同仿真;建议使用者结合理论计算、仿真调试与实验验证,形成“设计-仿真-验证”的完整闭环,以全面提升对LLC变换器系统级理解与工程应用能力。

【大模型智能体】高频面试题解析:核心技术与多场景应用系统设计

内容概要:本文档是一份大模型与智能体领域的高频面试题集,系统梳理了从Python基础、数据结构与算法、机器学习、深度学习、NLP到大模型核心技术(如Transformer、LayerNorm、LoRA、RAG、Agent)的完整知识体系。文档通过23个实战项目(如智能客服、商品图谱、RAG问答系统等)串联理论,涵盖项目周期、技术架构、实现流程、核心模块与技术细节,深入探讨了分布式训练、模型微调、函数调用、记忆管理等前沿技术,旨在帮助开发者掌握大模型应用开发与面试应对的综合能力。; 适合人群:具备一定编程基础,工作1-3年的研发人员。; 使用场景及目标:①系统掌握大模型与智能体的核心技术栈,为求职面试做准备;②学习如何将理论知识应用于实际项目,如构建智能客服、RAG系统和多智能体协作平台。; 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。

产业园区运营负责人如何解决入驻企业技术需求与本地优质科研资源对接不畅的问题?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

【Linux系统】Linux rm命令详解

内容概要:本文详细介绍了Linux系统中的rm命令,包括其基本语法、常用选项及其功能,强调了该命令在删除文件或目录时的高效性与高风险性。文章指出rm命令会永久删除数据且难以恢复,特别警示使用-rf等参数时的危险性,并列举了rm -rf /可能带来的灾难性后果。同时,提供了多个使用示例,涵盖普通文件删除、交互式确认、递归删除目录及处理特殊命名文件等情况。此外,文章还介绍了误删后的数据恢复方法,如通过lsof查找未释放的文件句柄或使用extundelete、TestDisk等工具尝试恢复,并对比了rm与unlink命令的区别。最后,提出了多项安全使用建议,如设置别名、使用trash-cli替代rm、定期备份等,旨在帮助用户安全、规范地使用rm命令。; 适合人群:Linux系统管理员、运维工程师及具备基础Linux操作能力的开发者;尤其适用于需要频繁进行文件管理与清理工作的技术人员; 使用场景及目标:①掌握rm命令的核心用法与常见选项组合;②理解其潜在风险并学习如何避免误操作导致的数据丢失;③在实际工作中应用安全策略,提升系统操作的安全性与可靠性; 阅读建议:此资源不仅讲解命令本身,更侧重于安全意识培养与最佳实践指导,建议结合实验环境动手练习,重点理解-i、-r、-f等关键选项的影响,并配置alias和trash-cli等防护措施,强化操作前的确认流程。

【互联网技术】常用术语解析:TPS/QPS/PV/UV等核心指标在ToB/ToC业务中的应用与实例说明

【互联网技术】常用术语解析:TPS/QPS/PV/UV等核心指标在ToB/ToC业务中的应用与实例说明

DFT实训教程笔记2(bibili版本)- Scan synthesis practice

文章目录Scan synthesis practice 本博文是博主记录DFT实训教程的笔记版本,此笔记并没有对所有的知识进行记录,仅仅以自身的认知水平,来记录了一些部分笔记并加上了自己的理解。 Scan synthesis practice How to design scan clock structure? 假设一块chip里面有好几十个clock domain,如果每一个clock domain都用一个scan clock虽然会非常清晰,但是IO数目肯定不够用。 clock group: 1、no

ciscomonkey的博客 9082

国产系统迁移实战:在银河麒麟V10上搞定Wine32位支持,让老Windows软件跑起来

本文详细介绍了在银河麒麟V10操作系统上构建Wine32位支持的全过程,帮助用户解决Windows应用迁移难题。从系统架构差异分析到Wine环境配置,再到实战应用部署与优化,提供了一套完整的解决方案,确保老Windows软件在国产系统上稳定运行。

weixin_32288959的博客 648

从建模到调参:基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程解析

本文详细解析了基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程,涵盖运动学建模、仿真环境搭建、PID控制器设计与实现等关键环节。通过Simulink仿真和可视化调试技巧,帮助开发者掌握移动机器人运动控制的核心技术,提升轨迹跟踪精度与性能优化能力。

weixin_28717683的博客 241

基于YOLOv8和PaddlepaddleOCR的微信截图聊天记录提取

本文提出了一种基于YOLOv8和PaddleOCR的微信聊天记录提取方法。首先使用YOLOv8n模型分割出聊天气泡(针对深浅色模式分别训练),通过合成数据集增强模型鲁棒性,召回率达0.995。随后采用PP-OCRv5进行文本识别,利用坐标匹配将气泡内文本送入识别队列,短长文本平均置信度分别>0.98和>0.95。文中特别强调了PaddleOCR不同版本的输出格式差异及适配方案,建议使用3.0+版本。该方法有效解决了直接OCR识别易受干扰的问题,通过气泡分割+文本定位的两阶段策略显著提升了识别准确

2401_87383958的博客 2354

26版SPSS操作教程(高级教程第十章)

#大道之行,在于坚持 #本期内容:二分类Logistic回归模型 #由于导师最近布置了学习SPSS这款软件的任务,因此想来平台和大家一起交流下学习经验,这期推送内容接上一次高级教程第九章的学习笔记,希望能得到一些指正和帮助~

你好! 1599

052、联发科Imagiq HyperEngine架构适配:天玑9000/9200的ISP多核并行调度与Tuning Toolkit调优案例

摘要: 项目组在适配联发科天玑9200的Imagiq 890 ISP架构时,遇到多摄预览功耗过高、帧率不稳等问题。通过分析多核调度机制,调整辅核QoS通道、优化AI-ISP协同模式(采用FREERUN+运动补偿),并利用Tuning Toolkit的Pipeline Viewer动态分配负载,最终降低功耗30mA、提升画质。关键经验包括:避免多核带宽冲突、合理配置动态时钟策略,以及统一校准参数版本管理。天玑9000/9200的HyperEngine架构需优先理解多核协同逻辑,再针对性调优,否则易引发场景兼容

zzfmlxs的博客 36

YOLOv8 道路病害检测全栈工程|22 类路面裂缝坑洞 VOC&YOLO 数据集、PyQt 精美 GUI、ONNX 量化、全套训练评估曲线落地

城市道路、国省道、高速公路路面长期受车辆碾压、雨水侵蚀,衍生纵向 / 横向裂纹、坑洼、车辙、接缝剥落等二十余种路面病害。传统人工道路巡检存在致命行业痛点:人工徒步 / 乘车目视巡检效率极低,单日有效巡查里程不足 20 公里;毫米级细微线性裂纹肉眼极易漏检,雨水冲刷后微小病害快速扩张为大坑槽,养护成本翻倍;强光暴晒、阴雨积水、路面油污场景人工分辨难度大;海量巡检图片人工分类统计病害台账耗时数天,养护决策缺乏量化数据支撑。传统阈值、边缘检测图像处理仅能识别大面积坑洞,无法区分二十余种细分裂纹类型,泛化能力极差。

getusushu的博客 120

论文翻译:arxiv-2023 Do-Not-Answer: A Dataset for Evaluating Safeguards in LLMs

随着大型语言模型(LLMs)的快速发展,出现了新的、难以预测的有害能力。这要求开发者能够通过评估“危险能力”来识别风险,以便负责任地部署LLMs。在这项工作中,我们收集了第一个开源数据集,用于评估LLMs中的安全保障,并以低成本部署更安全的开源LLMs。我们的数据集经过策划和筛选,只包含负责任的语言模型不应遵循的指令。我们注释并评估了六个流行的LLMs对这些指令的响应。基于我们的注释,我们继续训练了几个类似BERT的分类器,并发现这些小型分类器在自动安全评估上能够取得与GPT-4相当的成果。

CSPhD-winston的博客 1131

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 2、现代系统可观测性与OpenTelemetry的变革力量
下一篇: 3、OpenTelemetry:开启可观测性新纪元
cuda7parallel
博客等级 码龄1天 0粉丝 1273原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值