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

StarRocks 3.4 发布--AI 场景新支点,Lakehouse 能力再升级

自 StarRocks 3.0 起,社区明确了以 Lakehouse 为核心的发展方向。Lakehouse 的价值在于融合数据湖与数据仓库的优势,能有效应对大数据量增长带来的存储成本压力,做到 single source of truth 的同时继续拥有极速的查询性能,同时也为 AI 时代的多样化数据需求提供可扩展的高效访问能力。

构建 Lakehouse 后,你将拥有开放统一的数据存储与基于一份数据,支持多样化的 workload,服务企业 AI、BI 的数据应用,进而实现“One Data, All Analytics” 的业务价值。

在之前的版本中,StarRocks 已对 Lakehouse 的性能与易用性进行了一年多的打磨;在 3.4 版本中,我们聚焦 AI 场景的扩展,推出了 Vector Index、Python UDF 支持,并实现了 Arrow Flight 协议,为数据分析和 AI 检索场景提供更强大的功能和性能支持,帮助用户更高效地实现业务目标。

Lakehouse 的优化也在此次版本中得到了进一步的提升:从数据文件管理、数据读取、统计辅助、查询优化到数据缓存等多个环节进行了深度优化,显著提升了系统性能。同时,湖生态对接能力也得到了持续完善,建表、数据导入和系统稳定性等方面的改进进一步增强了 StarRocks 的易用性和可靠性。

本文将深入解析 StarRocks 3.4 的新特性,带你全方位了解这款强大的湖仓分析引擎如何助力用户挖掘数据潜力,释放更多潜在价值!

更强的 AI 场景支持

Vector Index

向量数据库能够支持快速的高维向量相似性搜索,通过近似最近邻(ANN)算法,高效地找到与给定向量最相似的其他向量,这在推荐系统、自然语言处理、图像和文本检索等领域至关重要。

在 StarRocks 3.4 版本中,我们引入了 Vector Index,支持两种重要且常用的索引类型:IVFPQ(Inverted File Index with Product Quantization,倒排乘积量化)和HNSW(Hierarchical Navigable Small World,分层小世界图)。从而能够在大规模、高维向量数据中进行高效的近似最近邻搜索(ANNS),这一技术在机器学习中尤为重要。

使用方式也很简单,和普通的建表、导入、数据检索没有太大的区别。

-- Create an vector index based on an ARRAY field by using IVFQP (similar to HNSW)
CREATE TABLE test_ivfpq (id BIGINT(20),vector ARRAY<FLOAT>,INDEX ivfpq_vector (vector) USING VECTOR ("index_type" = "ivfpq", ...  -- some specific parameters)
);-- Insert some data.
INSERT INTO test_ivfpq VALUES (1, [1,2,3,4,5]), (2, [4,5,6,7,8]);-- Do vector index search with normal SQL filter: to find some nearest vectors
SELECT *
FROM (SELECT id, approx_l2_distance([1,1,1,1,1], vector) scoreFROM test_ivfpq) a 
WHERE id in (1, 2, 3) AND score < 40
ORDER BY score
LIMIT 3;

Python UDF [Experimental]

StarRocks 目前提供了数百个常用函数,同时支持 Java UDF,帮助用户实现更多业务需求中的特殊函数。然而,考虑到 AI 领域的用户更为熟悉 Python,StarRocks 3.4 版本新增了对 Python UDF 的支持。这一功能让用户可以灵活高效地定义自己的函数,便于对训练数据进行预处理、嵌入式模型推理或使用机器学习相关的 Python 库等。

使用起来也非常方便,只需通过 Python 代码就能轻松扩展功能,满足复杂的业务需求。

-- Create a python function with inline mode to clean a text
CREATE FUNCTION python_clear_text(STRING) RETURNS STRINGtype = 'Python'symbol = 'clear_text'file = 'inline'input = 'scalar'  -- you can use arrow to improve the computation performance
AS
$$
import stringdef clear_text(input_text):translator = str.maketrans('', '', string.punctuation)cleaned_text = input_text.translate(translator)return cleaned_text.lower()
$$;-- Do cleaning text like a normal function
SELECT id, python_clear_text(str_field)
FROM tbl;  -- columns of tbl: id, str_field

目前只支持用户自定义标量函数(Scalar UDF)。

为了提升 Python UDF 的处理性能,也可以使用 vectorized input,使用上基本一样。

创建复杂的处理函数时,也可以使用打成 zip 包的 python 文件。file 指定 zip 包地址。

Arrow Flight [Experimental]

如果经常需要将数据库中的大量数据导出后做机器学习相关工作,V3.4 中提供的 Arrow Flight 就能比较好的满足这个需要。相对于 MySQL 协议,Arrow Flight 协议能够更快速、更高效地获取大批量的查询结果,更好地支持涉及多种数据源和系统的 AI 应用中跨系统间的数据协作。同时,也能减少对 StarRocks FE 的查询压力。

全面进化的 Lakehouse 能力

自 v3.0 起,StarRocks 正式开启了 Lakehouse 新范式。在此过程中,我们通过对存算一体功能和性能的持续对齐,提供了更高性价比的存算分离架构,并不断加强对 Iceberg、Hudi、Delta Lake 等生态的支持,推动高性能湖数据分析的实现。同时,物化视图的持续优化和建表、导入能力的简化,进一步推动了 Lakehouse 新范式的深度落地和快速发展。到 v3.4,StarRocks 在功能、性能、易用性和稳定性等方面进一步提升,全面强化了 Lakehouse 能力。

Data Lake Analytics

Iceberg v2 equality delete 读取优化

V3.3 中,StarRocks 已经通过优化 page index 处理、使用 SIMD 优化计算、优化 ORC 小文件读取等,优化了读取 data file 时查询性能。同时,V3.3 中增加了对 Iceberg V2 表的 equality delete 的支持,从而使得用户能够高效分析使用 Flink 写入的 Iceberg upsert 数据。然而,当 upsert 操作频繁时,查询大量 Iceberg 数据时可能会重复读取相同的 delete file(一个delete file 可能对应多个data file),导致性能下降并占用大量内存。

为了优化这一问题,3.4 版本通过单独生成一个 Iceberg eq-delete scan node 的方式改写 Query plan,采用 shuffle 或 broadcast delete file 数据,从而避免重复读取。在 delete file 较多的场景中,查询性能可提升数倍。

异步投递查询片段(Async scan framework)

在涉及大量文件的数据湖查询中,FE 获取所有查询文件的列表往往需要消耗较长时间。StarRocks 3.4 版本实现了异步投递查询片段的功能,使得 FE 获取文件列表与 BE 执行查询可以并行进行,从而能够减少 FE 获取文件列表对整个查询延迟的影响。对于尚未缓存文件列表的冷查询,整个查询的时延得到显著缩短,同时在保证查询性能的前提下,用户也可以适当减少文件列表缓存的大小,从而缓解内存消耗。

Data cache 优化和统一

除了不断进行对于数据文件的读取优化,Data cache 也是 StarRocks 能提供优异查询性能的重要一环。此前版本已支持缓存预热、异步填充、优先级控制、动态参数调节等等功能,在 StarRocks 3.4 版本中,针对偶发大查询污染场景和易用性做了进一步改进,以提升缓存性能并应对偶发大查询对整体查询的影响。

通过引入全新的 Segmented LRU (SLRU) 缓存淘汰策略,将缓存空间分为淘汰段和保护段,分别采用 LRU 策略进行管理,从而有效减少偶发大查询引起的缓存污染问题,提升缓存命中率并减少查询性能波动。在模拟测试中,查询性能提升幅度可达 70% 至数倍。

此外,我们还优化了 Data cache 的自适应 I/O 策略,使得系统能够根据缓存盘的负载和性能,自适应地将部分查询请求路由到远端存储。这一优化在高负载场景下显著提升了系统的访问吞吐能力,查询性能可提升 1 倍至数倍。

为了提升易用性,我们统一了存算分离和数据湖查询中 Data Cache 的内部实例、配置参数和观测指标。这不仅简化了配置过程,还优化了资源的使用率,因为不再需要为每个实例单独预留资源。

深入裁剪和谓词下推

在持续优化湖数据分析相关查询性能的同时,StarRocks 也没有忽视查询引擎本身的性能提升。本版本进一步深入分析了常见的查询模式(query patterns),实现利用主外键进行表裁剪、主外键裁剪聚合列、聚合下推位置改进、多列 OR 谓词下推等优化。在 TPC-DS 1TB Iceberg 数据 benchmark 测试中,StarRocks 实现了 20% 的查询性能提升。

利用数据统计和历史查询优化查询计划

除了优化硬查询能力,StarRocks 也在持续探索如何更好地利用统计数据和历史查询计划来进一步提升查询性能。在本版本中,我们支持了查询自动触发 ANALYZE 任务以采集外表统计信息的功能。相比传统的 metadata file,这种方式还能收集更精确的 NDV 信息,从而优化 Query Plan,提升查询性能。而且,这一功能无需用户手动干预或额外学习,真正实现了开箱即用。

同时,V3.4 还提供了 Query Feedback 功能,这是利用历史查询计划优化未来查询性能的一项重要进展。通过该功能,系统会持续收集慢查询,根据执行详情自动分析一条 SQL 的Query Plan 是否存在潜在的优化空间,并可能生成专属的调优建议。当后续遇到相同的查询时,系统能够对此 Query Plan 进行局部调整,以生成更高效的 Query Plan,从而进一步提升查询性能。

Data Lake 生态支持

在持续提升查询性能的同时,StarRocks 也在不断完善 Data Lake 生态的支持。本版本中,我们支持了 Iceberg Time Travel 功能,允许用户创建或删除 BRANCH 和 TAG,并通过指定 TIMESTAMP 或 VERSION 来查询特定分支或标签的数据。这使得用户能够轻松访问不同版本的数据,对于恢复意外删除的数据尤为重要。同时,也支持在不同分支上进行数据写入,以便进行并行开发测试、变更隔离等。

-- Create a BRANCH
ALTER TABLE iceberg.sales.order CREATE BRANCH `test-branch`
AS OF VERSION 12345  -- Create a BRANCH on the specified snapshot id
RETAIN 7 DAYS
WITH SNAPSHOT RETENTION 2 SNAPSHOTS;-- Write data into the BRANCH
INSERT INTO iceberg.sales.order [FOR] VERSION AS OF `test-branch`
SELECT k1, v1 FROM tbl;-- Query data on the BRANCH
SELECT * FROM iceberg.sales.order VERSION AS OF `test-branch`;-- You can fast forward your main branch to the test-branch after you've finished a test
ALTER TABLE iceberg.sales.order
EXECUTE fast_forward('main', 'test-branch');

此外,本版本还新增了对 Delta Column Mapping 功能的支持,用户现在可以查询经过 Delta schema evolution 处理的 Delta Lake 数据。

更易用的建表和导入

在专注极速查询性能的同时,StarRocks 也持续关注易用性的提升。在本版本中,我们继续优化了建表和数据导入功能,增加了多个新功能,显著提升了易用性。

建表

在建表方面,StarRocks 提供了 4 种表类型,其中聚合表也是用于提升查询性能的常见选择,特别是在能够通过聚合原始数据来加速查询的场景。过去,聚合表仅支持 SUM、MIN、MAX、BITMAP_UNION 等少数几个基础聚合函数,无法满足更复杂的聚合需求。在此次版本中,StarRocks 引入了通用的聚合函数状态存储框架,使得聚合表能够支持几乎所有 StarRocks 支持的聚合函数,极大地丰富了用户的聚合选择。此功能不仅适用于聚合表,还能在同步和异步物化视图中使用,并支持查询透明改写,进一步满足了用户在各种场景下进行预聚合加速查询的需求。

  • 用法上,基本和原有方式一样定义聚合表,只是聚合列指定具体的通用聚合函数即可。然后在使用时,根据不同场合,需要使用到几个不同的函数来处理和实现聚合。

-- Create a AGGR table with some aggregate columns
CREATE TABLE test_create_agg_table (dt VARCHAR(10),v BIGINT sum,  -- normal aggregate columnsavg_agg avg(bigint),  -- new general aggregate functionsarray_agg_agg array_agg(int),min_by_agg min_by(varchar, bigint)
)
AGGREGATE KEY(dt)
PARTITION BY (dt)
DISTRIBUTED BY HASH(dt) BUCKETS 4;

  在创建表后,根据不同使用场景需要,选择聚合函数对应的不同的 combinator 函数:

  1. 对于导入数据,需要使用 xxx_state(original_value) 函数来转化数据为中间态数据并存储到 StarRocks 中。以聚合函数 avg 为例,中间态数据是对输入数据 value 分别求 sum 和 count 后的两个值(实际为一个 binary 类型字段),并存储,而不是一个原值 value。

INSERT INTO test_create_agg_table
SELECT dt, v,  -- directly use v when the aggregate func is SUMavg_state(id),  -- use xxx_state() to get the intermediate valuearray_agg_state(id),min_by_state(province, id)
FROM t1;
  1. 对于中间态数据做聚合并继续存储为中间态数据时,需使用 xxx_union(mid_value)部分聚合中间态数据。对于 avg 来说,相当于把中间态的 sum/count 做局部聚合,并继续存储为 sum/count 两个值。

SELECT dt, sum(v),avg_union(avg_agg),array_agg_union(array_agg_agg),min_by_union(min_by_agg)
FROM test_create_agg_table
GROUP BY dt;
  1. 根据中间态数据计算最终聚合结果时,需要使用 xxx_merge(mid_value)。 对于 avg,相当于计算 sum/count 来最终得到 average(id)

SELECT dt, sum(v),avg_merge(avg_agg),array_agg_merge(array_agg_agg),min_by_merge(min_by_agg)
FROM test_create_agg_table
GROUP BY dt;
  • 对于物化视图,则可以直接使用 xxx_union(xxx_state(origin_value)) 来定义聚合列:

CREATE MATERIALIZED VIEW test_mv1 AS
SELECT dt, min(id) as min_id, sum(id) as sum_id,  -- old aggr funcsavg_union(avg_state(id)) as avg_id,array_agg_union(array_agg_state(id)) as array_agg_id,min_by_union(min_by_state(province, id)) as min_by_province_id
FROM t1
GROUP BY dt;

  使用时则很简单,直接在 base 表上调用聚合函数即可,系统会自动进行透明改写。

SELECT dt, min(id), sum(id)avg(id),array_agg(id),min_by(province, id)
FROM t1
GROUP BY dt;

在分区方面,StarRocks 支持 Range 分区、表达式分区和 List 分区三种方式,虽然提供了灵活的选择,但也增加了学习和理解的难度。尤其是,表达式分区过去仅支持简单的表达式,且函数支持也有限,如仅有 date_trunc 等少数几个函数。此次版本中,StarRocks 对分区方式进行了统一,采用了表达式分区,并支持多级分区的灵活配置,每一级都可以使用任意表达式。语法更加简洁、强大。

CREATE TABLE multi_column_part_tbl (dt DATETIME,tenant_id INT,region_id INT,event STRING
)
PARTITION BY tenant_id, date_trunc('month', dt), FLOOR(FLOOR(region_id/10000) * 10000)
DISTRIBUTED BY RANDOM;
  • 这里由 tenant ID、month、以及 region 区间组合成分区列,其中 region 区间是一个函数表达式。从而将数据按照 tenant ID 划分的同时,也按照 month 粒度进一步来划分分区,以适用于一般只查较新数据的场景,并且还按照 region 的大区间进行划分,以适合具有区域查询特点的场景。

导入

INSERT & FILES

从 V3.1 开始,StarRocks 就引入了 FILES 表函数,用户可以通过 INSERT from FILES 简单实现数据导入。此次版本,我们对该功能进行了全面优化,使得 INSERT from FILES 基本可以替代 Broker Load,成为批量数据导入的首选方式,并且使用起来更加简便、直观。具体优化包括:

  • 支持 LIST 远程存储中的目录和文件,用户可以在导入前轻松查看和核对数据文件及目录结构;

  • 引入了 BY NAME 映射方式,能将数据文件中的列映射到目标表中列,特别适用于列数较多且列名相同的情况;

  • 支持下推 target table schema 及合并不同 schema 的文件,更好地自动推断和处理导入数据的 schema,让导入变得更简单智能;

  • 新增了 PROPERTIES 子句,支持 strict_mode、max_filter_ratio 和 timeout 等参数,从而 INSERT 中也可以根据导入数据的质量控制导入行为。

从而,一个复杂的导入都可以按如下方式轻松的实现:

-- 1. List the data files, check it whether they are indeed what you want to load
SELECT * FROM FILES('path' = 's3://bucket/path/to/file','list_files_only' = 'true',  -- list file, not the data content'list_recursively' = 'true',
);-- 2. View the data schema by DESC or direct SELECT
DESC FILES(...);
SELECT * FROM FILES(...) LIMIT 5;-- 3. Use a simple CTAS to create a table and load some data
CREATE TABLE ctas_tbl AS
SELECT * FROM FILES (...) LIMIT 10;-- 4. Now, it's time to create the final target table, and load the data.
-- 4.a Create a table, refer to the schema of `DESC` command or SELECT statement.
CREATE TABLE fine_tbl(id INT,v2 VARCHAR(16),v3 DECIMAL(18, 10)
);-- 4.b Load the data, no matter the data have done some schema change/evolution or not
INSERT INTO fine_tbl BY NAME
PROPERTIES ('strict_mode' = 'true','max_filter_ratio' = '0.001',  -- only 0.1% error rows at most are allowed'timeout' = '3600'
)
SELECT * FROM FILES('path' = 's3://bucket/path/to/dir/*/*',  -- columns from files are: v2, id, v3'format' = 'parquet','fill_mismatch_column_with' = 'NULL'  -- fill NULL if some columns are missed in some files
);
  • /path/to/dir/ 目录下一些文件有 3 列,一些文件可能只有 2 列甚至 1 列,FILES 支持合并不同 schema 的文件,并提供 fill_mismatch_column_with 参数以控制有缺失列时的行为:补NULL或报错。

  • 数据文件中的 id 列可以直接按照 INT 读取数据,并可能过滤溢出的数据。(通过 FE 配置项 files_enable_insert_push_down_schema 设置)

  • 最终数据文件中的列可以直接按照名字映射导入到目标表中,而不需要一列列对应设置,对于导入几百上千列时的大宽表特别方便。

结合 FILES 表函数,还可以在 SELECT 语句中实现更复杂的数据转换、JOIN 等操作,满足更多的应用场景。因此,当需要从云存储导入数据时,INSERT from FILES 将是最优的选择。

INSERT OVERWRITE

除了用于数据导入,INSERT 还广泛应用于 ETL 过程。用户常通过 INSERT INTO SELECT 实现数据的批量处理,将数据导入到另一个表中,甚至形成一个 pipeline 处理。同时,遇到需要修复数据场景时,可以使用 INSERT OVERWRITE 来修复错误数据。

在本版本中,INSERT OVERWRITE 新增支持 Dynamic Overwrite 语义。系统能够自动根据导入的数据创建分区,并只覆盖包含新数据的分区,未涉及的老分区将不被删除。这对于那些在修复数据时仅需覆盖部分分区、但无法明确指定分区或不易指定分区的场景尤为方便。由于新导入的数据可能涉及不存在的分区,而修复数据可能涉及多个分区,且由于使用表达式分区或多列 List 分区,用户可能无法清楚了解所有分区的名称,因此让系统自动确定并替换分区的方式显得尤为实用。

使用方法很简单,设置 session 变量 dynamic_overwrite = true即可。

SET dynamic_overwrite = true;-- Use INSERT OVERWRITE just as normal
INSERT OVERWRITE part_tbl
SELECT * FROM nonpart_tbl;

当然,也可以设置 dynamic_overwrite = false 以让系统替换所有分区。

Merge commit

除了上述的易用性改进,本版本的 StarRocks 还新增了 merge commit 功能,以优化高并发实时数据导入的场景。merge commit 功能能够将同一时间区间内针对同一表的多个并发 Stream Load 合并为一个导入事务进行提交,从而提升实时数据导入的吞吐能力,尤其适用于高并发、小批量(从 KB 到几十 MB)的实时导入场景

此外,merge commit 还能够有效减少因版本过多引发的版本数量限制问题,降低后续需要进行数据版本 Compaction 合并时的资源消耗,减少小文件过多所导致的数据查询时 IOPS 增加和 I/O 延迟,从而提升查询性能。

  • FE 会按照作业配置的允许合并时间划分为一个个时间区间,将一个时间区间内的很多小批量导入作业合并提交为一个新的导入作业,再类似于 Broker Load 一样进行数据导入。

使用方式和原来的 Stream Load 方式基本一样,加入几个 merge commit 控制参数即可:

curl --location-trusted -u <username>:<password> \-H "Expect:100-continue" \-H "column_separator:," \-H "columns: id, name, score" \-H "enable_merge_commit:true" \-H "merge_commit_interval_ms:1000" \-H "merge_commit_parallel:2" \-T example1.csv \-XPUT http://<fe_host>:<fe_http_port>/api/mydb/tbl/_stream_load

Stability & Security

系统的高可用性是作为基于数据多副本的 StarRocks 系统天生注重的一个能力。V3.4 中,StarRocks 提供了 Graceful Exit 功能,确保在 BE/CN 节点退出时查询能够在短时间内继续执行完毕,从而尽量减少节点升降级过程对业务的影响,进一步提升系统的高可用性。

此外,通过实现 Follower FE 支持 Checkpoint,减少了对 Leader FE 的内存压力,进一步增强了系统的稳定性。在细节方面,诸如日志打印优化等小改进,都有效提升了系统的稳定性和整体表现。

在数据保护与容灾方面,StarRocks 在 V3.2 中引入的 Cluster Sync 功能提供了高可用的容灾能力,但备份/恢复依然是最基础且高性价比的容灾手段。因此,StarRocks 3.4 版本进一步完善了备份功能,支持备份 Logical View、External Catalog 等更多对象,同时也支持备份采用表达式分区和 List 分区的表;并且,也优化了备份性能,能达到了每节点 1GB/s 的备份速度,基本能够满足大部分场景的基础需求。

Release note:https://docs.mirrorship.cn/zh/releasenotes/release-3.4/

下载:https://www.mirrorship.cn/zh-CN/download/starrocks

直播回放:https://www.bilibili.com/video/BV1JKwVePEp4/?vd_source=1cb452610138142d1300dd37a6162a88

更多交流,联系我们:StarRocks

相关文章:

StarRocks 3.4 发布--AI 场景新支点,Lakehouse 能力再升级

自 StarRocks 3.0 起&#xff0c;社区明确了以 Lakehouse 为核心的发展方向。Lakehouse 的价值在于融合数据湖与数据仓库的优势&#xff0c;能有效应对大数据量增长带来的存储成本压力&#xff0c;做到 single source of truth 的同时继续拥有极速的查询性能&#xff0c;同时也…...

强化学习入门--基本概念

强化学习基本概念 grid-world example 这个指的是一个小机器人&#xff08;agent&#xff09;在一个网格区域&#xff08;存在边界&#xff09;&#xff0c;网格中存在需要躲避的格子和目标格子&#xff0c;我们的目的就是找到到达目标格子的最短路径 state 表示智能体相对…...

Oracle 创建并使用外部表

目录 一. 什么是外部表二. 创建外部表所在的文件夹对象三. 授予访问外部表文件夹的权限3.1 DBA用户授予普通用户访问外部表文件夹的权限3.2 授予Win10上的Oracle用户访问桌面文件夹的权限 四. 普通用户创建外部表五. 查询六. 删除 一. 什么是外部表 在 Oracle 数据库中&#x…...

深度学习python基础(第三节) 函数、列表

本节主要介绍函数、列表的基本语法格式。 函数 与c语言的函数差不多&#xff0c;就是语法基本格式不同。 name "loveyou" length len(name) print("字符串的长度为&#xff1a;%d" % length) # 自定义函数 def countstr(data):count 0for i in da…...

基于Python的多元医疗知识图谱构建与应用研究(上)

一、引言 1.1 研究背景与意义 在当今数智化时代,医疗数据呈爆发式增长,如何高效管理和利用这些数据,成为提升医疗服务质量的关键。传统医疗数据管理方式存在数据孤岛、信息整合困难等问题,难以满足现代医疗对精准诊断和个性化治疗的需求。知识图谱作为一种知识表示和管理…...

Spring Boot 快速创建项目

目录 一. 创建项目 ​编辑 二. 项目目录 三. 运行项目 (1) 启动项目 (2) 输出HelloWorld 一. 创建项目 我们以idea专业版为例创建Spring项目: 步骤: (1) File --> New --> Project (2) 配置项目基本信息 (3) 依赖: 需要什么就勾选什么. 我们这里就只勾选一个Spri…...

MySQL预编译语句过多告警排查

业务背景 在使用Spring Cloud Alibaba搭建的微服务架构中&#xff0c;项目采用ShardingSphere进行分库分表&#xff0c;MyBatis-Plus作为持久层。线上环境突发大量预编译语句过多的数据库告警&#xff0c;导致系统性能下降。 排查过程 1. 初步排查&#xff1a;联系云数据库厂…...

在centos上编译安装opensips【初级-默认安装】

环境&#xff1a;centos9 last opensips3.2 dnf update -y dnf install -y gcc make git automake libtool pcre-devel libxml2-devel \libcurl-devel postgresql-devel \bzip2-devel zlib-devel ncurses-devel libuuid-devel \libpcap-devel # 有报错的直接删除cd /usr/lo…...

偏序关系.

一、偏序&#xff08;半序&#xff09;关系 偏序关系 自反反对称传递性 二、全序&#xff08;线序、链&#xff09;关系 三、偏序集中的重要元素 1. 极大元与极小元 极大元找所在集合的一个或几个最高点&#xff1b; 极小元找所在集合的一个或几个最低点。 2. 最大元与最小…...

Node.js接收文件分片数据并进行合并处理

前言&#xff1a;上一篇文章讲了如何进行文件的分片&#xff1a;Vue3使用多线程处理文件分片任务&#xff0c;那么本篇文章主要看一下后端怎么接收前端上传来的分片并进行合并处理。 目录&#xff1a; 一、文件结构二、主要依赖1. express2. multer3. fs (文件系统模块)4. pat…...

设计模式概述 - 设计模式的重要性

引言 设计模式是软件工程中用于解决常见设计问题的经典解决方案。它们提供了一种标准化的方式来组织和设计代码&#xff0c;使得代码更易于理解、维护和扩展。在C编程中&#xff0c;设计模式尤为重要&#xff0c;因为它们可以帮助开发者应对复杂的系统设计&#xff0c;提高代码…...

OSI5GWIFI自组网协议层次对比

目录 5G网络5G与其他协议栈各层映射 5G网络 物理层 (PHY) 是 5G 基站协议架构的最底层&#xff0c;负责将数字数据转换为适合无线传输的信号&#xff0c;并将接收到的无线信号转换为数字数据。实现数据的编码、调制、多天线处理、资源映射等操作。涉及使用新的频段&#xff08…...

网络安全(渗透)

目录 名词解释 2、相互关系 3. 安全影响 名词解释 1、poc、exp、payload与shellcode POC&#xff08;Proof of Concept&#xff09;&#xff1a; 是一种概念验证代码或演示程序&#xff0c;用于证明漏洞的存在。 主要目的是通过简单的代码或操作向安全研究人员、开发人员…...

Whisper-GPT:混合表征音频大语言模型

Whisper-GPT:混合表征音频大语言模型 当下,利用从神经压缩算法(例如#Encodec#​)派生的离散音频标记的生成式音频、语音以及音乐模型数量激增。然而,这种方法的主要缺陷之一在于对上下文长度的处理。如果必须考虑所有不同频率的音频内容才能进行下一个标记预测,那么高保…...

科技重塑未来:前沿技术趋势、跨领域融合与社会影响深度洞察

目录 科技重塑未来&#xff1a;前沿技术趋势、跨领域融合与社会影响深度洞察引言一、前沿技术趋势洞察与分析1. 人工智能与自动化1.1 趋势分析1.2 挑战分析 2. 区块链技术2.1 趋势分析2.2 挑战分析 3. 量子计算3.1 趋势分析3.2 挑战分析 二、跨领域技术融合与创新实践1. AI与大…...

深度学习:大模型Decoding+MindSpore NLP分布式推理详解

大模型推理流程 1. 用户输入提示词&#xff08;Prompt&#xff09; 假设用户输入为&#xff1a;“从前&#xff0c;有一只小猫&#xff0c;它喜欢……” 我们的目标是让模型生成一段完整的故事。 2. 模型处理用户输入 2.1 分词&#xff1a;输入提示被分词为模型可以理解的…...

GESP6级语法知识(二):动态规划算法(二)

最小路径和; //最小路径和 #include<iostream> using namespace std; const int N100; int dp[N][N],value[N][N]; int n,m; int main() {cin>>n>>m;for(int i1;i<n;i) //录入初始数字矩阵 for(int j1;j<m;j)cin>>value[i][j];for(int i1;i…...

数据结构与算法之递归: LeetCode 79. 单词搜索 (Ts 版)

单词搜索 https://leetcode.cn/problems/word-search/description/ 描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 单词必须按照字母顺序&#xff0c;通过相邻的单…...

智能系统的感知和决策

智能系统在感知和决策过程中具备的关键能力表现在智能感知/自主判定上&#xff0c;下面可以从感知的本质、自主判断的含义及其在智能系统中的作用进行深入分析。 1、智能感知&#xff1a;信息获取与理解 智能感知是指智能系统通过传感器或其他数据采集手段获取环境中的信息&…...

多线程之旅:线程安全问题

之前说到了多线程的创建和一些属性等等&#xff0c;接下来&#xff0c;就来讲讲多线程安全问题。 小编引入这段代码讲解下&#xff1a; public class Demo13 {public static int count0;public static void main(String[] args) throws InterruptedException {Thread t1new…...

用java配合redis 在springboot上实现令牌桶算法

令牌桶算法配合 Redis 在 Java 中的应用令牌桶算法是一种常用的限流算法&#xff0c;适用于控制请求的频率&#xff0c;防止系统过载。结合 Redis 使用可以实现高效的分布式限流。 一.、引入依赖首先&#xff0c;需要在 pom.xml 文件中引入 spring-boot-starter-data-re…...

科学计算库NumPy

NumPy是高性能科学计算和数据分析的基础包。 认识NumPy数据对象 n维数组对象ndarray(array) 数组是编程语言中重要且复杂的数据结构&#xff0c;它是由相同类型元素按照一定的顺序排列的集合。ndarray具有矢量算术能力和复杂的广播能力。 - 维度又称为维数&#xff0c;在数学…...

【大数据】机器学习----------强化学习机器学习阶段尾声

一、强化学习的基本概念 注&#xff1a; 圈图与折线图引用知乎博主斜杠青年 1. 任务与奖赏 任务&#xff1a;强化学习的目标是让智能体&#xff08;agent&#xff09;在一个环境&#xff08;environment&#xff09;中采取一系列行动&#xff08;actions&#xff09;以完成一个…...

Unicode不可见字符

场景复现 在访问 https://dotnet.microsoft.com/zh-cn/apps/aspnet地址时 突然出现 https://dotnet.microsoft.com/zh-cn/apps/aspnet%E2%80%8C%E2%80%8C 但是正常来看&#xff0c;这个地址后面是没有%E2%80%8C%E2%80%8C的&#xff0c;粘贴到idea里发现了url地址后面还拼接了2…...

w172二手车交易系统的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…...

TRELLIS微软的图生3D

TRELLIS 教程目录&#xff1a; Youtube&#xff1a;https://www.youtube.com/watch?vJqFHZ-dRMhI 官网地址&#xff1a;https://trellis3d.github.io/ GitHub&#xff1a;https://github.com/Microsoft/TRELLIS 部署目录&#xff1a; 克隆项目 git clone --recurse-submodul…...

【力扣:新动计划,编程入门 —— 题解 ①】

向前看&#xff0c;总会有新的故事值得期盼 —— 25.1.21 2235. 两整数相加 给你两个整数 num1 和 num2&#xff0c;返回这两个整数的和。 示例 1&#xff1a; 输入&#xff1a;num1 12, num2 5 输出&#xff1a;17 解释&#xff1a;num1 是 12&#xff0c;num2 是 5 &#x…...

如何使用 Pytest -k 选项轻松筛选测试用例

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 你是否曾不得不从成百上千个测试中费力筛选&#xff0c;只为运行几个特定的测试&am…...

C语言之小型成绩管理系统

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 C语言之小型成绩管理系统 目录 设计题目设计目的设计任务描述设计要求输入和输出要求验收要…...

C++ ——— 模拟实现 vector 类

目录 vector 类的框架 无参数的构造函数 析构函数 获取有效数据个数 获取容量 重载 [] 运算符 可读可写版本 只可读版本 扩容 尾插 实现迭代器 可读可写版本 只可读版本 自定义设置size长度和内容 在任意位置插入 删除任意位置的数据 赋值重载 vector 类的框…...

SpringBoot实现轻量级动态定时任务管控及组件化

1关于动态定时任务 关于在SpringBoot中使用定时任务&#xff0c;大部分都是直接使用SpringBoot的Scheduled注解&#xff0c;如下&#xff1a; Component public class TestTask {Scheduled(cron"0/5 * * * * ? ") //每5秒执行一次public void execute(){SimpleDa…...

STM32 FreeRTOS 任务挂起和恢复---实验

实验目标 学会vTaskSuspend( )、vTaskResume( ) 任务挂起与恢复相关API函数使用&#xff1a; start_task:用来创建其他的三个任务。 task1&#xff1a;实现LED1每500ms闪烁一次。 task2&#xff1a;实现LED2每500ms闪烁一次。 task3&#xff1a;判断按键按下逻辑&#xff0c;KE…...

#漏洞挖掘# 一文了解什么是Jenkins未授权访问!!!

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

1.21学习记录

misc 2023isctf 你说爱我尊嘟假嘟 这题有点脑洞&#xff0c;需要把你说爱我换成Ook.将尊嘟换为Ook&#xff01;假嘟换成Ook&#xff1f;&#xff08;根据语气进行猜测吧&#xff09;用在线工具解密最后用base64解密即可 2023isctf 杰伦可是流量明星 解压后是一个MP3文件&am…...

【Pandas】pandas Series groupby

Pandas2.2 Series Function application, GroupBy & window 方法描述Series.apply()用于将一个函数应用到 Series 的每个元素或整个 SeriesSeries.agg()用于对 Series 数据进行聚合操作Series.aggregate()用于对 Series 数据进行聚合操作Series.transform()用于对 Series…...

Text2SQL 智能报表方案介绍

0 背景 Text2SQL智能报表方案旨在通过自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;使用户能够以自然语言的形式提出问题&#xff0c;并自动生成相应的SQL查询&#xff0c;从而获取所需的数据报表&#xff0c;用户可根据得到结果展示分析从而为结论提供支撑&#…...

51c~SLAM~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12327374 #GSLAM 自动驾驶相关~~~ 一个通用的SLAM架构和基准 GSLAM&#xff1a;A General SLAM Framework and Benchmark 开源代码&#xff1a;https://github.com/zdzhaoyong/GSLAM SLAM技术最近取得了许多成功&am…...

服务器安装ESXI7.0系统及通过离线包方式升级到ESXI8.0

新到了一台物理服务器需要安装系统&#xff0c;项目不急用&#xff0c;先拿来做些实验。 本次实验目标&#xff1a; 1、在物理服务器上安装ESXI7.0系统&#xff1b; 2、通过离线包升级方式将ESXI7.0升级为ESXI8.0。 实验环境准备&#xff1a; 物理服务器1台&#xff0c;型号…...

计算机网络 (52)秘钥分配

一、重要性 在计算机网络中&#xff0c;密钥分配是密钥管理中的一个核心问题。由于密码算法通常是公开的&#xff0c;因此网络的安全性主要依赖于密钥的安全保护。密钥分配的目的是确保密钥在传输过程中不被窃取或篡改&#xff0c;同时确保只有合法的用户才能获得密钥。 二、方…...

xctf-comment(Intruder,git恢复,SQL注入,Hex解码)

这题是2018年网鼎杯真题&#xff0c;考察 Burp Suite 的 Intruder 模块去找用户密码&#xff0c;使用 githacker 恢复代码&#xff08;githack不行&#xff09;&#xff0c;代码审计发现SQL二次注入&#xff0c;尝试SQL注入读取文件内容&#xff0c;读取的是/home/www/.bash_hi…...

Docker Compose创建镜像服务

什么是Docker Compose 使用Docker Compose&#xff0c;可以使用YAML配置文件&#xff08;称为Compose文件&#xff09;来配置应用程序的服务&#xff0c;然后使用Compose CLI从配置中创建并启动所有服务 。 Compose文件的默认路径是compose.yaml&#xff08;首选&#xff09;…...

kafka学习笔记5 PLAIN认证——筑梦之路

在Kafka中&#xff0c;SASL&#xff08;Simple Authentication and Security Layer&#xff09;机制包括三种常见的身份验证方式&#xff1a; SASL/PLAIN认证&#xff1a;含义是简单身份验证和授权层应用程序接口&#xff0c;PLAIN认证是其中一种最简单的用户名、密码认证方式&…...

Walrus Learn to Earn计划正式启动!探索去中心化存储的无限可能

本期 Learn to Earn 活动将带领开发者和区块链爱好者深入探索 Walrus 的技术核心与实际应用&#xff0c;解锁分布式存储的无限可能。参与者不仅能提升技能&#xff0c;还能通过完成任务赢取丰厚奖励&#xff01;&#x1f30a; 什么是 Walrus&#xff1f; 数据主权如今正成为越…...

Linux学习笔记

1、什么是Linux Linux,一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&#xff0c;一般搭配GUN套件&#xff0c;故得此称呼&#xff09;&#xff0c;是一种免费使用和自由传播的类UNIX操作系统。它主要受到Minix和Unix思想的启发&#xff0c;是一个基于POSIX的多用…...

解锁电商设计新速度:StartAI插件制作产品图实操教程

在电商设计这片竞争激烈的战场上&#xff0c;每一位设计师都在追求高效与创意的完美融合。繁琐的背景抠图、单一的设计模板、紧迫的时间周期&#xff0c;常常让我们力不从心。但现在&#xff0c;StartAI插件的问世&#xff0c;为我们的设计之路带来了革命性的改变。下面&#x…...

AutoPrompt框架和实操:如何用AutoPrompt完成电影评论和聊天审核任务?

1. AutoPrompt框架概述 1.1 框架定义与目标 AutoPrompt是一个旨在提升和完善用户提示以适应现实世界用例的提示优化框架。该框架通过迭代生成具有挑战性的边缘案例数据集,并相应地优化提示,从而自动生成针对用户意图量身定制的高质量、详细的提示。其核心目标是利用大型语言…...

修复 Kubernetes Deployment 修改后未生效的问题

在 Kubernetes 集群中&#xff0c;当尝试修改某些 Deployment 资源&#xff08;如 calico-kube-controllers&#xff09;的 image 配置时&#xff0c;发现修改总是未生效&#xff0c;并恢复到原样。这种问题通常是因为 Deployment 资源受到其他控制器&#xff08;如 Operator&a…...

Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)

本文讲如何计算倒计时&#xff0c;并添加该倒计时的数据条。 1&#xff0c;如何计算倒计时 这里也要用公式 D3 - TODAY() 显示为下面这个样子的 然后右键该单元格&#xff0c;选 设置单元格格式 然后点 常规 这样就能显示出还书倒计时的日数了。 下拉适用到其他单元格。 2&a…...

Golang Gin系列-5:数据模型和数据库

在这篇Gin教程的博客中&#xff0c;我们将探索如何将模型和数据库与Gin框架无缝集成&#xff0c;使你能够构建健壮且可扩展的web应用程序。通过利用流行的库并遵循最佳实践&#xff0c;你将学习如何定义模型、建立数据库连接、执行CRUD操作以及确保基于gin的项目中的数据完整性…...

Android系统开发(十九):无缝拉伸的艺术——9-Patch 可绘制对象详解

引言 在移动开发中&#xff0c;背景、标题以及其他界面元素的设计质量直接影响用户体验。然而&#xff0c;如何让图片适应不同分辨率设备&#xff0c;成为开发者常常头疼的问题。这时&#xff0c;9-Patch 闪亮登场&#xff01;它不仅可以无缝拉伸&#xff0c;还能保持视觉效果…...