当前位置: 首页 > news >正文

深入了解 StarRocks 表类型:解锁高效数据分析的密码

在当今数字化浪潮下,大数据分析成为企业决策、优化业务流程的关键利器。StarRocks 作为一款备受瞩目的高性能分析型数据库,其多样化的表类型为复杂的数据处理需求提供了精准解决方案。今天,就让我们一同深入探索 StarRocks 中的主键表、明细表、聚合表和更新表,从工作原理、读写流程、适用场景、标准建表语句等多个维度全面剖析,助您开启高效的大数据分析之旅。

表类型

StarRocks 支持四种表类型,分别是明细表 (Duplicate key table)、聚合表 (Aggregate table)、更新表 (Unique Key table) 和主键表 ( Primary Key table)。这四种表类型能够支持多种数据分析场景,例如日志分析、数据汇总分析、实时分析等。

排序键

数据导入至使用某个类型的表,会按照建表时指定的一列或多列排序后存储,这部分用于排序的列就称为排序键。排序键通常为查询时过滤条件频繁使用的一个或者多个列,用以加速查询。 明细表中,数据按照排序键 DUPLICATE KEY 排序,并且排序键不需要满足唯一性约束。 聚合表中,数据按照排序键 AGGREGATE KEY 聚合后排序,并且排序键需要满足唯一性约束。 更新表中,数据按照排序键 UNIQUE KEY REPLACE 后排序,并且排序键需要满足唯一性约束。 主键表支持分别定义主键和排序键,主键 PRIMARY KEY 需要满足唯一性和非空约束,主键相同的数据进行 REPLACE。排序键是用于排序,由 ORDER BY 指定 。

TIPS:

  • 建表后,表类型不支持修改(比如不能将已有的明细表修改为主键表)。如果需要修改表类型,请重新建表。

  • 在建表语句中,排序键必须定义在其他列之前。

  • 在创建表时,您可以将一个或多个列定义为排序键。排序键在建表语句中的出现次序,为数据存储时多重排序的次序。

  • 不支持排序键的数据类型为 BITMAP、HLL。

  • 前缀索引的长度限制为 36 字节。如果排序键中全部列的值的长度加起来超过 36 字节,则前缀索引仅会保存限制范围内排序键的若干前缀列。

  • 如果导入的数据存在重复的主键,则数据导入至不同类型的表时,存储在 StarRocks 时,则会按照如下方式进行处理:

    1. 明细表:表中会存在主键重复的数据行,并且与导入的数据是完全对应的。您可以召回所导入的全部历史数据。
    2. 聚合表:表中不存在主键重复的数据行,主键满足唯一性约束。导入的数据中主键重复的数据行聚合为一行,即具有相同主键的指标列,会通过聚合函数进行聚合。您只能召回导入的全部历史数据的聚合结果,但是无法召回历史明细数据。
    3. 主键表和更新表:表中不存在主键重复的数据行,主键满足唯一性约束。最新导入的数据行,替换掉其他主键重复的数据行。这两种类型的表可以视为聚合表的特殊情况,相当于在聚合表中,为表的指标列指定聚合函数为 REPLACE,REPLACE 函数返回主键相同的一组数据中的最新数据。

主键表

主键表使用 StarRocks 全新设计开发的存储引擎。其主要优势在于支撑实时数据更新的同时,也能保证高效的复杂即席查询性能。在实时分析业务中采用主键表,用最新的数据实时分析出结果来指导决策,使得数据分析不再受限于 T+1 数据延迟。

主键表中的主键具有唯一非空约束,用于唯一标识数据行。如果新数据的主键值与表中原数据的主键值相同,则存在唯一约束冲突,此时新数据会替代原数据。

原理

更新表和聚合表整体上采用了 Merge-On-Read 的策略。虽然写入时处理简单高效,但是读取时需要在线 Merge 多个版本的数据文件。并且由于 Merge 算子的存在,谓词和索引无法下推至底层数据,会严重影响查询性能。

然而为了兼顾实时更新和查询性能,主键表的元数据组织、读取、写入方式完全不同。主键表采用了 Delete+Insert 策略,借助主键索引配合 DelVector 的方式实现,保证在查询时只需要读取具有相同主键值的数据中的最新数据。如此可以避免 Merge 多个版本的数据文件,并且谓词和索引可以下推到底层数据,所以可以极大提升查询性能。

主键表中写入和读取数据的整体流程如下:

  • 数据写入是通过 StarRocks 内部的 Loadjob 实现,包含一批数据变更操作(包括 Insert、Update、Delete)。StarRocks 会加载导入数据对应 Tablet 的主键索引至内存中。对于 Delete 操作,StarRocks 先通过主键索引找到数据行原来所在的数据文件以及行号,在 DelVector(用于存储和管理数据导入时生成数据行对应的删除标记)中把该条数据标记为删除。对于 Update 操作,StarRocks 除了在 DelVector 中将原先数据行标记为删除,还会把最新数据写入新的数据文件,相当于把 Update 改写为 Delete+Insert(如下图所示)。并且会更新主键索引中变更的数据行现在所在的数据文件和行号。
  • 读取数据时,由于写入数据时各个数据文件中历史重复数据已经标记为删除,同一个主键值下仅需要读取最新的一条数据,无需在线 Merge 多个版本的数据文件来去重以找到最新的数据。扫描底层数据文件时借助过滤算子和各类索引,可以减少扫描开销(如下图所示),所以查询性能的提升空间更大。并且相对于 Merge-On-Read 策略的更新表,主键表的查询性能能够提升 3~10 倍。

使用说明

使用CREATE TABLE 语句通过 PRIMARY KEY 定义主键,即可创建一个主键表。

-- 定义一个主键表--订单
CREATE TABLE orders2 (order_id bigint NOT NULL,dt date NOT NULL,merchant_id int NOT NULL,user_id int NOT NULL,good_id int NOT NULL,good_name string NOT NULL,price int NOT NULL,cnt int NOT NULL,revenue int NOT NULL,state tinyint NOT NULL
)
PRIMARY KEY (order_id,dt,merchant_id) -- 主键/组合主键,每个订单的组合必须是唯一的
PARTITION BY RANGE(dt) (START ('1970-01-01') END ('2099-12-31') EVERY (INTERVAL 1 DAY)
) -- 根据订单日期的天进行分区,以便于管理和查询。
DISTRIBUTED BY HASH (merchant_id)  -- 由于主键表仅支持分桶策略为哈希分桶,因此您还必须通过 DISTRIBUTED BY HASH () 定义哈希分桶键。提高查询性能和负载均衡。
ORDER BY (dt,merchant_id) -- 经常根据订单日期和商户组合维度查询,可指定排序键/组合键,助于优化查询性能
PROPERTIES ("enable_persistent_index" = "true"
); -- 启用持久化索引 默认:true

主键用于唯一标识表中的每一行数据,组成主键的一个或多个列在 PRIMARY KEY 中定义,具有非空唯一性约束。其注意事项如下:

  • 在建表语句中,主键列必须定义在其他列之前。
  • 主键必须包含分区列和分桶列。
  • 主键列支持以下数据类型:数值(包括整型和布尔)、日期和字符串。
  • 默认设置下,单条主键值编码后的最大长度为 128 字节。
  • 建表后不支持修改主键。
  • 主键列的值不能更新,避免破坏数据一致性。
  • 如果指定了排序键,就根据排序键构建前缀索引;如果没指定排序键,就根据主键构建前缀索引。
  • 建表后支持通过 ALTER TABLE ... ORDER BY ... 修改排序键。不支持删除排序键,不支持修改排序列的数据类型。

适用场景

键表能够在支撑实时数据更新的同时,也能保证高效的查询性能。可适用于如下场景:

  • 实时对接事务型数据至 StarRocks。事务型数据库中,除了插入数据外,一般还会涉及较多更新和删除数据的操作,因此事务型数据库的数据同步至 StarRocks 时,建议使用主键表。通过 Flink-CDC 等工具直接对接 TP 的 Binlog,实时同步增删改的数据至主键表,可以简化数据同步流程,并且相对于 Merge-On-Read 策略的更新表,查询性能能够提升 3~10 倍。
  • 利用部分列更新轻松实现多流 JOIN。在用户画像等分析场景中,一般会采用大宽表方式来提升多维分析的性能,同时简化数据分析师的使用模型。而这种场景中的上游数据,往往可能来自于多个不同业务(比如来自购物消费业务、快递业务、银行业务等)或系统(比如计算用户不同标签属性的机器学习系统),主键表的部分列更新功能就很好地满足这种需求,不同业务直接各自按需更新与业务相关的列即可,并且继续享受主键表的实时同步增删改数据及高效的查询性能。

明细表

明细表是默认创建的表类型。如果在建表时未指定任何 key,默认创建的是明细表。

创建表时,支持定义排序键。如果查询的过滤条件包含排序键,则 StarRocks 能够快速地过滤数据,提高查询效率。明细表适用于日志数据分析等场景,支持追加新数据,不支持修改历史数据。

使用说明

需要分析某时间范围的某一类事件的数据,则可以将事件时间(event_time)和事件类型(event_type)作为排序键

-- 建表语句如下:
CREATE TABLE IF NOT EXISTS detail (event_time DATETIME NOT NULL COMMENT "datetime of event",event_type INT NOT NULL COMMENT "type of event",user_id INT COMMENT "id of user",device_code INT COMMENT "device code",channel INT COMMENT ""
)
DUPLICATE KEY(event_time, event_type) -- 重复键(Duplicate Key),这意味着这些列的组合可以重复,但数据会被存储在不同的副本中以提高查询性能
DISTRIBUTED BY HASH(user_id) BUCKETS 16 -- 必须使用 DISTRIBUTED BY HASH 子句指定分桶键,否则建表失败,自 2.5.7 版本起,StarRocks 支持在建表和新增分区时自动设置分桶数量 (BUCKETS),您无需手动设置分桶数量
PROPERTIES (
"replication_num" = "3"
); -- 数据副本的数量为 3,这有助于提高数据的可靠性和可用性.

排序键的相关说明:

  • 在建表语句中,排序键必须定义在其他列之前。

  • 排序键可以通过 DUPLICATE KEY 显式定义。本示例中排序键为 event_time 和 event_type,如果未指定,则默认选择表的前三列作为排序键。

  • 建表时,支持为指标列创建 BITMAP、Bloom Filter 等索引。
  • -- Bitmap 索引适用于等值查询、IN 查询、范围查询等,特别适合于基数较低的列
    CREATE TABLE IF NOT EXISTS detail (event_time DATETIME NOT NULL COMMENT "datetime of event",event_type INT NOT NULL COMMENT "type of event",user_id INT COMMENT "id of user",device_code INT COMMENT "device code",channel INT COMMENT "channel",INDEX event_type_index (event_type) USING BITMAP COMMENT "Bitmap index on event_type" -- 创建 Bitmap 索引
    )
    DUPLICATE KEY(event_time, event_type)
    DISTRIBUTED BY HASH(user_id) BUCKETS 16
    PROPERTIES ("replication_num" = "3"
    );-- Bloom Filter 索引适用于基数较高的列,例如 ID 列,但存在一定的误判率
    CREATE TABLE IF NOT EXISTS detail (event_time DATETIME NOT NULL COMMENT "datetime of event",event_type INT NOT NULL COMMENT "type of event",user_id INT COMMENT "id of user",device_code INT COMMENT "device code",channel INT COMMENT "channel",INDEX user_id_index (user_id) USING BLOOMFILTER COMMENT "Bloom Filter index on user_id" -- 创建 Bloom Filter 索引
    )
    DUPLICATE KEY(event_time, event_type)
    DISTRIBUTED BY HASH(user_id) BUCKETS 16
    PROPERTIES ("replication_num" = "3"
    );

    适用场景​

  • 分析原始数据,例如原始日志、原始操作记录等。
  • 查询方式灵活,不需要局限于预聚合的分析方式。
  • 导入日志数据或者时序数据,主要特点是旧数据不会更新,只会追加新的数据。

聚合表

建表时,支持定义排序键和指标列,并为指标列指定聚合函数。当多条数据具有相同的排序键时,指标列会进行聚合。在分析统计和汇总数据时,聚合表能够减少查询时所需要处理的数据,提升查询效率。

原理

从数据导入至数据查询阶段,聚合表内部同一排序键的数据会多次聚合,聚合的具体时机和机制如下:

  1. 数据导入阶段:数据按批次导入至聚合表时,每一个批次的数据形成一个版本。在一个版本中,同一排序键的数据会进行一次聚合。

  2. 后台文件合并阶段 (Compaction) :数据分批次多次导入至聚合表中,会生成多个版本的文件,多个版本的文件定期合并成一个大版本文件时,同一排序键的数据会进行一次聚合。

  3. 查询阶段:所有版本中同一排序键的数据进行聚合,然后返回查询结果。

因此,聚合表中数据多次聚合,能够减少查询时所需要的处理的数据量,进而提升查询的效率。

使用说明

需要分析某一段时间内,来自不同城市的用户,访问不同网页的总次数。

-- 将网页地址 site_id、日期 date 和城市代码 city_code 作为排序键,将访问次数 pv 作为指标列,并为指标列 pv 指定聚合函数为 SUM。
CREATE TABLE IF NOT EXISTS example_db.aggregate_tbl (site_id LARGEINT NOT NULL COMMENT "id of site",date DATE NOT NULL COMMENT "time of event",city_code VARCHAR(20) COMMENT "city_code of user",pv BIGINT SUM DEFAULT "0" COMMENT "total page views" -- 指标列,列名后指定聚合函数:SUM
)
AGGREGATE KEY(site_id, date, city_code) -- 定义site_id、date city_code 作为排序键,亦是聚合维度
DISTRIBUTED BY HASH(site_id) -- 必须使用 DISTRIBUTED BY HASH 子句指定分桶键
PROPERTIES (
"replication_num" = "3"
); -- 三副本

排序键的相关说明:

  • 在建表语句中,排序键必须定义在其他列之前

  • 排序键可以通过 AGGREGATE KEY 显式定义。如果 AGGREGATE KEY 未包含全部维度列(除指标列之外的列),则建表会失败,如果不通过 AGGREGATE KEY 显示定义排序键,则默认除指标列之外的列均为排序键

  • 排序键/组合键必须满足唯一性约束,必须包含全部维度列,并且列的值不会更新。

  • 指标列:通过在列名后指定聚合函数,定义该列为指标列。一般为需要汇总统计的数据。

  • 聚合函数:指标列使用的聚合函数。聚合表支持的聚合函数,请参见 CREATE TABLE。

  • 查询时,排序键在多版聚合之前就能进行过滤,而指标列的过滤在多版本聚合之后。因此建议将频繁使用的过滤字段作为排序键,在聚合前就能过滤数据,从而提升查询性能。

  • 建表时,不支持为指标列创建 BITMAP、Bloom Filter 等索引。

适用场景

适用于分析统计和汇总数据。比如:

  • 通过分析网站或 APP 的访问流量,统计用户的访问总时长、访问总次数。

  • 广告厂商为广告主提供的广告点击总量、展示总量、消费统计等。

  • 通过分析电商的全年交易数据,获得指定季度或者月份中,各类消费人群的爆款商品。

在这些场景中,数据查询和导入,具有以下特点:

  • 多为汇总类查询,比如 SUM、MAX、MIN等类型的查询。

  • 不需要查询原始的明细数据。

  • 旧数据更新不频繁,只会追加新的数据。

更新表

建表时,支持定义主键和指标列,查询时返回主键相同的一组数据中的最新数据。相对于明细表,更新表简化了数据导入流程,能够更好地支撑实时和频繁更新的场景。

原理

更新表可以视为聚合表的特殊情况,指标列指定的聚合函数为 REPLACE,返回具有相同主键的一组数据中的最新数据。

数据分批次多次导入至更新表,每一批次数据分配一个版本号,因此同一主键的数据可能有多个版本,查询时返回版本最新(即版本号最大)的数据。相对于明细表,更新表通过简化导入流程,能够更好地支持实时和频繁更新。

如下数据在更新表中的表现:

IDvalue_version
11001
11012
21003
21014
21025

最终查询结果如下:

IDvalue
1101
2102

使用说明

在电商订单分析场景中,经常按照日期对订单状态进行统计分析,则可以将经常使用的过滤字段订单创建时间 create_time、订单编号 order_id 作为主键,其余列订单状态 order_state 和订单总价 total_price 作为指标列。这样既能够满足实时更新订单状态的需求,又能够在查询中进行快速过滤。

-- 该业务场景下,建表语句如下
CREATE TABLE IF NOT EXISTS orders (create_time DATE NOT NULL COMMENT "create time of an order",order_id BIGINT NOT NULL COMMENT "id of an order",order_state INT COMMENT "state of an order",total_price BIGINT COMMENT "price of an order"
)
UNIQUE KEY(create_time, order_id) -- 主键
DISTRIBUTED BY HASH(order_id) buckets 16 -- 必须使用 DISTRIBUTED BY HASH 子句指定分桶键,2.5.7 版本起,StarRocks 支持在建表和新增分区时自动设置分桶数量 (BUCKETS)
PROPERTIES (
"replication_num" = "3"
); 

主键的相关说明:

  • 在建表语句中,主键必须定义在其他列之前。
  • 主键通过 UNIQUE KEY 定义。
  • 主键必须满足唯一性约束,且列的值不会修改。
  • 设置合理的主键。查询时,主键在聚合之前就能进行过滤,而指标列的过滤通常在多版本聚合之后,因此建议将频繁使用的过滤字段作为主键,在聚合前就能过滤数据,从而提升查询性能。聚合过程中会比较所有主键,因此需要避免设置过多的主键,以免降低查询性能。如果某个列只是偶尔会作为查询中的过滤条件,则不建议放在主键中。
  • 建表时,不支持为指标列创建 BITMAP、Bloom Filter 等索引。

适用场景

实时和频繁更新的业务场景,例如分析电商订单。在电商场景中,订单的状态经常会发生变化,每天的订单更新量可突破上亿。

优劣对比

对比项主键表 (Primary Key table)明细表 (Duplicate Key table)聚合表 (Aggregate table)更新表 (Unique Key table)
Key 列和唯一约束主键(Primary Key)具有唯一约束和非空约束。Duplicate Key 不具有唯一约束。聚合键(Aggregate Key)具有唯一约束。唯一键(Unique Key)具有唯一约束。
Key 列和数据变更的关系(逻辑关系)如果新数据的主键值与表中原数据的主键值相同,则存在唯一约束冲突,此时新数据会替代原数据。
与更新表相比,主键表增强了其底层存储引擎,已经可以取代更新表。
Duplicate Key 不具有唯一约束,因此如果新数据的 Duplicate Key 与表中原数据相同,则新旧数据都会存在表中。如果新数据与表中原数据存在唯一约束冲突,则会根据聚合键和 Value 列的聚合函数聚合新旧数据。如果新数据与表中原数据存在唯一约束冲突,则新数据会替代原数据。
更新表实际可以视为聚合函数为 replace 的聚合表。
Key 列和排序键的关系自 3.0 起,两者解耦。两者耦合。
Key 列和排序键支持的数据类型数值(包括整型、布尔)、字符串、时间日期。数值(包括整型、布尔、Decimal)、字符串、时间日期。
Key 和分区/分桶列的关系分区列、分桶列必须在主键中。分区列、分桶列必须在聚合键中。分区列、分桶列必须在唯一键中。

补充

StarRocks 采用分区+分桶的两级数据分布策略,将数据均匀分布各个 BE 节点。查询时能够有效裁剪数据扫描量,最大限度地利用集群的并发性能,从而提升查询性能。​

第一层级为分区。表中数据可以根据分区列(通常是时间和日期)分成一个个更小的数据管理单元。查询时,通过分区裁剪,可以减少扫描的数据量,显著优化查询性能。StarRocks 提供简单易用的分区方式,即表达式分区。此外还提供较灵活的分区方式,即 Range 分区和 List 分区。

第二层级为分桶。同一个分区中的数据通过分桶,划分成更小的数据管理单元。并且分桶以多副本形式(默认为3)均匀分布在 BE 节点上,保证数据的高可用。

StarRocks 提供两种分桶方式:

  • 哈希分桶:根据数据的分桶键值,将数据划分至分桶。选择查询时经常使用的条件列组成分桶键,能有效提高查询效率。
  • 随机分桶:随机划分数据至分桶。这种分桶方式更加简单易用。

为保证确保数据的完整性、一致性和准确性。主键表的 Primary Key 列具有唯一非空约束,聚合表的 Aggregate Key 列和更新表的 Unique Key 列具有唯一约束。

结束语

  • 明细表简单易用,表中数据不具有任何约束,相同的数据行可以重复存在。该表适用于存储不需要约束和预聚合的原始数据,例如日志等。
  • 主键表能力强大,具有唯一性非空约束。该表能够在支撑实时更新、部分列更新等场景的同时,保证查询性能,适用于实时查询。
  • 聚合表适用于存储预聚合后的数据,可以降低聚合查询时所需扫描和计算的数据量,极大提高聚合查询的效率。
  • 更新表适用于实时更新的业务场景,目前已逐渐被主键表取代。

相关文章:

深入了解 StarRocks 表类型:解锁高效数据分析的密码

在当今数字化浪潮下,大数据分析成为企业决策、优化业务流程的关键利器。StarRocks 作为一款备受瞩目的高性能分析型数据库,其多样化的表类型为复杂的数据处理需求提供了精准解决方案。今天,就让我们一同深入探索 StarRocks 中的主键表、明细表…...

spring mvc源码学习笔记之四

pom.xml 内容如下 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…...

Spring Boot + Redis + Sa-Token

参考文献 Sa-Token实现分布式登录鉴权&#xff08;Redis集成 前后端分离&#xff09;-腾讯云开发者社区-腾讯云 介绍 StpInterface 是 Sa-Token 框架中的一个接口&#xff0c;属于 Sa-Token 身份认证与授权框架的一部分。该接口提供了一些方法来实现自定义的身份认证和授权管…...

【顶刊TPAMI 2025】多头编码(MHE)之Part 6:极限分类无需预处理

目录 1 标签分解方法的消融研究2 标签分解对泛化的影响3 讨论4 结论 论文&#xff1a;Multi-Head Encoding for Extreme Label Classification 作者&#xff1a;Daojun Liang, Haixia Zhang, Dongfeng Yuan and Minggao Zhang 单位&#xff1a;山东大学 代码&#xff1a;https:…...

Spring Certified Professional 2024 (2V0-72.22)

关于认证 Spring Certified Professional (2V0-72.22) 认证可证明您在 Spring Framework 方面的专业知识&#xff0c;Spring Framework 是构建企业级 Java 应用程序的领先平台。此认证在全球范围内得到认可&#xff0c;并证明您在 Spring 的各个方面都具有熟练程度&#xff0c;…...

asp.net core框架搭建4-部署IIS/Nginx/Docker

文章目录 系列文章一、Linux上部署Nginx1.1 Centos 安装配置环境1.2 使用Systemctl 控制Nginx 二、部署IIS三、部署Docker3.1 创建 Dockerfile 文件3.2 构建 Docker 镜像3.3 运行 Docker 容器3.4 检查容器运行情况 结束语 作者&#xff1a;xcLeigh 文章地址&#xff1a;https:/…...

改善 Kibana 中的 ES|QL 编辑器体验

作者&#xff1a;来自 Elastic Marco Liberati 随着新的 ES|QL 语言正式发布&#xff0c;Kibana 中开发了一种新的编辑器体验&#xff0c;以帮助用户编写更快、更好的查询。实时验证、改进的自动完成和快速修复等功能将简化 ES|QL 体验。 我们将介绍改进 Kibana 中 ES|QL 编辑器…...

webpack5基础(上篇)

一、基本配置 在开始使用 webpack 之前&#xff0c;我们需要对 webpack 的配置有一定的认识 1、5大核心概念 1&#xff09;entry &#xff08;入口&#xff09; 指示 webpack 从哪个文件开始打包 2&#xff09;output&#xff08;输出&#xff09; 制视 webpack 打包完的…...

C#设计模式(行为型模式):观察者模式

C#设计模式&#xff1a;观察者模式&#xff0c;让对象间通信更优雅 在软件开发中&#xff0c;我们经常会遇到一个对象的状态发生改变&#xff0c;其他对象需要自动更新或做出相应反应的场景。例如&#xff1a; GUI事件处理&#xff1a; 当用户点击按钮时&#xff0c;按钮需要…...

pg_wal 目录下 wal 日志文件异常累积过大

文章目录 背景当前配置分析解决过程1. 活动事务未完成2. 备份滞后或归档未完成3. 保留了过多的 WAL 文件4. 逻辑复制槽未释放5. 文件系统问题6. 强制触发 WAL 清理结果lsof D 是啥意思检查进程从名字来看, 该 wal 文件是最小的文件(一般也是最老的 wal 文件)pg_archivecleanup …...

【人工智能】用Python实现深度卷积生成对抗网络(DCGAN):原理、实现与优化

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 深度卷积生成对抗网络(DCGAN)是一种结合了卷积神经网络(CNN)和生成对抗网络(GAN)的深度学习模型,广泛应用于图像生成、图像增强、以…...

领域驱动设计(4)—绑定模型与实现

&#xff08;4&#xff09;—绑定模型与实现 模式&#xff1a;MODEL-DRIVEN DESIGN为什么模型对用户至关重要?模式&#xff1a;HANDS-ON MODELER 很多项目设计之初只考虑到模型如何设计&#xff0c;没有将模型如何实现、数据关系如何存储这些实现考虑在内&#xff0c;往往设计…...

logback日志框架源码分析

目录 (一)入口:slf4j选择日志框架 (二)日志框架初始化 (1)logback的3种配置方式 a、BasicConfigurator默认配置 b、SPI方式配置的Configurator实现类 c、通过配置文件初始化 (2)xml配置文件初始化 (三)Logger的创建 (四)打印日志 本文源码基于:logback版…...

Airflow:HttpSensor实现API驱动数据流程

数据管道工作流通常依赖于api来访问、获取和处理来自外部系统的数据。为了处理这些场景&#xff0c;Apache Airflow提供了HttpSensor&#xff0c;这是一个内置的Sensor&#xff0c;用于监视HTTP请求的状态&#xff0c;并在满足指定条件时触发后续任务。在这篇博文中&#xff0c…...

在Mac电脑上搭建Gradle

1. 检查是否已安装Homebrew 打开终端&#xff0c;输入以下命令检查Homebrew是否已安装&#xff1a; brew -v如果显示版本号&#xff0c;则表示已安装。如果未安装&#xff0c;请运行以下命令安装Homebrew&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubus…...

登录的几种方式

使用Session完成登录 1. 手机号发送验证码 逻辑步骤&#xff1a; 校验手机号格式是否正确。生成验证码&#xff08;例如使用Hutool工具类&#xff09;。将手机号和验证码存入Session。返回验证码发送成功的响应。 2. 用户登录逻辑 逻辑步骤&#xff1a; 从Session中获取存…...

Python学习(5):数据结构

1 列表 1.1 列表方法 列表数据类型支持很多方法&#xff0c;列表对象的所有方法所示如下&#xff1a; list.append(x)&#xff1a;在列表末尾添加一项。 类似于 a[len(a):] [x]。list.extend(iterable)&#xff1a;通过添加来自 iterable 的所有项来扩展列表。 类似于 a[len…...

第五届电网系统与绿色能源国际学术会议(PGSGE 2025)

2025年第五届电网系统与绿色能源国际学术会议(PGSGE 2025) 定于2025年01月10-12日在吉隆坡召开。 第五届电网系统与绿色能源国际学术会议&#xff08;PGSGE 2025&#xff09; 基本信息 会议官网&#xff1a;www.pgsge.org【点击投稿/了解会议详情】 会议时间&#xff1a;202…...

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 1:背景动机

目录 1 简单概括2 几个重要发现3 主要贡献4 背景知识5 方法简介 论文&#xff1a;Multi-Head Encoding for Extreme Label Classification 作者&#xff1a;Daojun Liang, Haixia Zhang, Dongfeng Yuan and Minggao Zhang 单位&#xff1a;山东大学 代码&#xff1a;https://gi…...

ruckus R510升级到Unleashe后不能访问

ruckus R510 是IPQ4019&#xff0c;升级到Unleashe&#xff0c;它弹窗提示 但是这个IP没办法用&#xff0c;访问不了AP。 必应了一下&#xff0c;官方提示用advance ip scanner扫描。 扫描持续好久&#xff0c;发现IP竟然是从主路由获得。 9090的端口不用填&#xff0c;甚至不…...

初学stm32 --- FSMC驱动LCD屏

目录 FSMC简介 FSMC框图介绍 FSMC通信引脚介绍 FSMC_NWE 的作用 FSMC_NWE 的时序关系 FSMC_NOE 的含义 FSMC_NOE 的典型用途 FSMC_NOE 的时序关系 使用FSMC驱动LCD FSMC时序介绍 时序特性中的 OE ILI9341重点时序&#xff1a; FSMC地址映射 HADDR与FSMC_A关系 LCD的…...

【2025最新计算机毕业设计】基于Spring Boot+Vue影院购票系统(高质量源码,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

Java 内存溢出(OOM)问题的排查与解决

在 Java 开发中&#xff0c;内存溢出&#xff08;OutOfMemoryError&#xff0c;简称 OOM&#xff09;是一个常见且棘手的问题。相比于数组越界、空指针等业务异常&#xff0c;OOM 问题通常更难定位和解决。本文将通过一次线上内存溢出问题的排查过程&#xff0c;分享从问题表现…...

Android14 CTS-R6和GTS-12-R2不能同时测试的解决方法

背景 Android14 CTS r6和GTS 12-r1之后&#xff0c;tf-console默认会带起OLC Server&#xff0c;看起来olc server可能是想适配ATS(android-test-station)&#xff0c;一种网页版可视化、可配置的跑XTS的方式。这种网页版ATS对测试人员是比较友好的&#xff0c;网页上简单配置下…...

周末总结(2024/01/04)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利…...

《Rust权威指南》学习笔记(二)

枚举enum 1.枚举的定义和使用如下图所示&#xff1a; 定义时还可以给枚举的成员指定数据类型&#xff0c;例如&#xff1a;enum IpAddr{V4(u8, u8, u8, u8),V6(String),}。枚举的变体都位于标识符的命名空间下&#xff0c;使用::进行分隔。 2.一个特殊的枚举Option&#xff0…...

Docker 远程访问完整配置教程以及核心参数理解

Docker 远程访问完整配置教程 以下是配置 Docker 支持远程访问的完整教程&#xff0c;包括参数说明、配置修改、云服务器安全组设置、主机防火墙配置&#xff0c;以及验证远程访问的详细步骤。 1. 理解 -H fd:// 参数的作用&#xff08;理解了以后容易理解后面的操作&#xff…...

在ros2 jazzy和gazebo harmonic下的建图导航(cartographer和navigation)实现(基本)

我的github分支&#xff01;&#xff01;&#xff01; 你可以在这里找到相对应的源码。 DWDROME的MOGI分支 来源于&#xff01;&#xff01; MOGI-ROS/Week-3-4-Gazebo-basics 学习分支整理日志 分支概述 这是一个用于个人学习的新分支&#xff0c;目的是扩展基本模型并添加…...

常见的显示器分辨率及其对应的像素数量

显示器的像素数量通常由其分辨率决定&#xff0c;分辨率表示为水平像素数乘以垂直像素数。 720P&#xff08;1280720&#xff09;&#xff1a; 像素数量&#xff1a;约92.16万特点&#xff1a;这是高清标准的一个分辨率&#xff0c;通常用于手机、平板电脑或小型显示器。900P&…...

浅谈分布式共识算法

分布式共识算法 基础概念1、容错2、共识3、拜占庭将军问题4、多数派5、共识算法分类6、ACID&BASE&CAP Paxos1、相关概念2、三种角色3、运行阶段4、Multi Paxos5、总结6、演化 ZAB1、相关概念2、三种角色3、成员状态4、运行阶段5、ZooKeeper流程6、总结 Raft1、相关概念…...

[Linux]redis5.0.x升级至7.x完整操作流程

1. 从官网下载最新版redis&#xff1a; 官网地址&#xff1a;https://redis.io/download 注&#xff1a;下载需要的登录&#xff0c;如果选择使用github账号登录&#xff0c;那么需要提前在github账号中取消勾选“Keep my email addresses private”&#xff08;隐藏我的邮箱…...

Vue项目中生成node_modules文件夹的两种常用方法及npm优势

在Vue项目中生成node_modules文件夹的过程非常简单,主要步骤如下: 1、使用 npm 安装依赖包; 2、使用 yarn 安装依赖包。其中,推荐使用npm安装依赖包,原因如下: 兼容性更广:npm是Node.js的默认包管理工具,具有更高的兼容性。社区支持:npm拥有更大的用户基础和社区支持,…...

(四)基于STM32通过Event Recoder实现时间测量功能

目录 1. 了解Event Recorder 2. 硬件和软件准备 硬件需求 软件需求 3. 配置STM32工程 使用STM32CubeMX初始化项目 配置Event Recorder 4. 实现时间记录功能 初始化Event Recorder 时间间隔计算 配置Debug选项 测量结果查看 5总结 在嵌入式系统开发中&#xff0c;精…...

【Linux】定时运行shell脚本

1、at命令 at命令允许指定Linux系统何时运行脚本&#xff0c;它会将作业提交到队列中&#xff0c;指定shell在什么时候运行该作业。 at 的守护进程 atd 在后台运行&#xff0c;在作业队列中检查待运行的作业。 at 守护进程会检查系统的一个特殊目录&#xff08;一般位于/var/…...

ARM 汇编基础总结

GNU 汇编语法 编写汇编的过程中&#xff0c;其指令、寄存器名等可以全部使用大写&#xff0c;也可以全部使用小写&#xff0c;但是不能大小写混用。 1. 汇编语句的格式 label: instruction comment label即标号&#xff0c;表示地址位置&#xff0c;有些指令前面可能会有标…...

L27.【LeetCode笔记】2 的幂(五种解法)

目录 1.题目 2.自解 方法1:调用log函数 代码 提交结果 方法2:循环 提交结果 3.优解 方法3:位运算n & (n-1) 0 代码 提交结果 方法4:位运算lowbit 代码 提交结果 4.投机取巧的方法 代码 提交结果 1.题目 https://leetcode.cn/problems/power-of-two/?env…...

【MyBatis-Plus】让 MyBatis 更简单高效

如果你曾经使用过 MyBatis&#xff0c;你一定知道它的强大和灵活。然而&#xff0c;随着项目规模的增长&#xff0c;手写 SQL 成为了一件既繁琐又容易出错的事。这时&#xff0c;MyBatis-Plus&#xff08;简称 MP&#xff09;应运而生&#xff0c;它为 MyBatis 增强了许多功能&…...

如何使用OpenCV进行抓图-多线程

前言 需求&#xff1a; 1、如何使用OpenCV捕抓Windows电脑上USB摄像头的流、 2、采用多线程 3、获知当前摄像头的帧率。 这个需求&#xff0c;之前就有做了&#xff0c;但是由于出现了一个问题&#xff0c;人家摄像头的帧率目前都可以达到60帧/s 了&#xff0c;而我的程序…...

解决安装pynini和WeTextProcessing报错问题

点击这里&#xff0c;访问博客 0. 背景 最近在给别人有偿部署ASR-LLM-TTS项目时遇到安装pynini和WeTextProcessing依赖报错的问题&#xff0c;报错信息如下&#xff1a; IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files…...

数据中台与数据治理服务方案[50页PPT]

本文概述了数据中台与数据治理服务方案的核心要点。数据中台作为政务服务数据化的核心&#xff0c;通过整合各部门业务系统数据&#xff0c;进行建模与加工&#xff0c;以新数据驱动政府管理效率提升与政务服务能力增强。数据治理则聚焦于解决整体架构问题&#xff0c;确保数据…...

springCloud 脚手架项目功能模块:Java分布式锁

文章目录 引言分布式锁产生的原因:集群常用的分布式锁分布式锁的三种实现方式I ZooKeeper 简介zookeeper本质上是一个分布式的小文件存储系zookeeper特性:全局数据一致性II 基于ZooKeeper 实现一个排他锁创建锁获取锁释放锁Apache ZooKeeper客户端III 分布式锁方案非公平锁方…...

一文讲清楚HTTP常见的请求头和应用

文章目录 一文讲清楚HTTP常见的请求头和应用1. 啥是个HTTP请求头2. 常见的请求头&#xff0c;作用和示例3.协商缓存4.会话状态 一文讲清楚HTTP常见的请求头和应用 1. 啥是个HTTP请求头 一句话&#xff0c;说白了就是限定HTTP传输的一些规则参数&#xff0c;比如Accept&#xf…...

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found

这个问题之前遇到过&#xff0c;没有记录&#xff0c;导致今天又花了2小时 原因是没有GLIBC——2.32 使用以下命令查一下有哪些版本&#xff1a; strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_ 我已经安装好了&#xff0c;所有有2.32版本 原因是当前的ubuntu版本…...

如何安装适配pytorch版本的torchvision

一、对照版本 版本对照pytorch/vision: Datasets, Transforms and Models specific to Computer Vision 二、下载对应版本的torchvision 下载连接1download.pytorch.org/whl/torch_stable.html 下载连接2download.pytorch.org/whl/cu110/torch_stable.html 笔者认为1会比2更…...

UE4_用户控件_3_用户控件输入数据的方法

祝愿大美兰陵越来越好&#xff01; 一、效果展示&#xff1a; 二、先制作一个角色 1、新建个父类为pawn的蓝图类。更名为BP_Image_Character。 2、这个角色只是用于观察场景&#xff0c;并与场景中的物体相碰撞用的&#xff0c;所以不需要骨骼网格体&#xff0c; 3、但是我们…...

以往博客的复习补充——part1

之前没更新是因为期末考试要复习&#xff0c;没空写博客。1月3号才考完&#xff0c;现在有空&#xff0c;打算从头看一遍&#xff0c;既是复习以前知识点&#xff0c;又是对原来的博客进行补充。刚好寒假&#xff0c;有大把时间。 一&#xff0c;希尔排序&#xff08;Shell So…...

数据挖掘——决策树分类

数据挖掘——决策树分类 决策树分类Hunt算法信息增益增益比率基尼指数连续数据总结 决策树分类 树状结构&#xff0c;可以很好的对数据进行分类&#xff1b; 决策树的根节点到叶节点的每一条路径构建一条规则&#xff1b;具有互斥且完备的特点&#xff0c;即每一个样本均被且…...

Kafka 快速实战及基本原理详解解析-01

一、Kafka 介绍 1. MQ 的作用 消息队列&#xff08;Message Queue&#xff0c;简称 MQ&#xff09;是一种用于跨进程通信的技术&#xff0c;核心功能是通过异步消息的方式实现系统之间的解耦。它在现代分布式系统中有着广泛的应用&#xff0c;主要作用体现在以下三个方面&…...

大模型在自动驾驶领域的应用和存在的问题

大模型在自动驾驶领域的应用与挑战 大模型&#xff08;如 GPT-4、BERT等&#xff09;已经在多个领域取得了突破&#xff0c;自动驾驶是其中一个受益颇多的行业。随着人工智能和深度学习的快速发展&#xff0c;自动驾驶技术正在向更加智能化、自动化和安全的方向发展。大模型在…...

【0x0014】HCI_Read_Local_Name命令详解

目录 一、命令概述 二、命令格式 三、返回事件及参数说明 3.1. HCI_Command_Complete 事件 3.2. Status 3.3. Local_Name 四、命令执行流程 4.1. 命令发送 4.2. 控制器接收并处理命令 4.3. 控制器返回结果 4.4. 主机接收并解析事件包 4.5. 示例代码 五、应用场景 …...