PostgreSQL-基于PgSQL17和11版本导出所有的超表建表语句

最新版本更新
https://code.jiangjiesheng.cn/article/368?from=csdn

推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》

1. 基于pgsql 17.4 研究

查询psql版本:SELECT version();

查看已知1条建表语句和db中数据关系

SELECT create_hypertable('t_water_real_data_main', 'data_time', 'monitor_id', chunk_time_interval => INTERVAL '30 day',number_partitions => 4, associated_table_prefix=>'t_water_real_data_main', migrate_data => true);SELECT * from timescaledb_information.dimensions WHERE hypertable_name = 't_water_real_data_main';//生成表格,navicat导出html,然后截图,给AI生成md表格| hypertable_schema | hypertable_name           | dimension_number | column_name  | column_type                | dimension_type | time_interval | integer_interval | integer_now_func | num_partitions |
|-------------------|---------------------------|------------------|--------------|----------------------------|----------------|---------------|------------------|------------------|----------------|
| public            | t_water_real_data_main    | 1                | data_time    | timestamp without time zone| Time           | 30 days       |                  |                  |                |
| public            | t_water_real_data_main    | 2                | monitor_id   | integer                    | Space          |               |                  |                  | 4              |

解读create_hypertable建表

这条 SQL 语句使用了 TimescaleDBcreate_hypertable 函数,将一个普通的 PostgreSQL 表转换为 hypertable(超表),以便高效地处理时间序列数据。

我们来逐部分解读:

✅ 原始语句:

SELECT create_hypertable('t_water_real_data_main', 'data_time', 'monitor_id', chunk_time_interval => INTERVAL '30 day',number_partitions => 4, associated_table_prefix=>'t_water_real_data_main.',migrate_data => true
);

🔍 各参数解释:

1. 't_water_real_data_main'

这是你要转换为 hypertable 的原始普通表的名称。该表必须已经存在,并且至少包含一个时间类型的列(如 data_time)。

2. 'data_time'

这是你指定的时间维度列名,用于对数据进行分区。这个列通常是 TIMESTAMP, TIMESTAMPTZ, 或 DATE 类型。

3. 'monitor_id'

这是你的空间维度(或称“第二维度”),通常是一个标识符,比如设备 ID、传感器 ID 等。它用于对数据进行水平分区(即分片)。

TimescaleDB 支持多维分区:首先是按时间(time partitioning),其次是按空间(space partitioning,即这里的 monitor_id)。

4. chunk_time_interval => INTERVAL '30 day'

这表示每个基于时间的 chunk(数据块)覆盖 30天 的数据。

  • Chunk 是 hypertable 的底层存储单元。
  • 指定较短的时间间隔可以提高查询性能(因为扫描的数据更少),但会增加元数据开销。
  • 如果不显式指定,TimescaleDB 会根据表中的数据自动选择一个默认值。
5. number_partitions => 4

这表示对 monitor_id 进行哈希分区时,创建 4个分区

  • 即使有成千上万个不同的 monitor_id,TimescaleDB 也会通过哈希将其映射到这 4 个分区中。
  • 更多分区可以带来更好的并行性,但也可能增加管理开销。
6. associated_table_prefix=>'t_water_real_data_main.'

这是一个可选参数,用于指定关联表(如连续聚合视图、策略等)的命名前缀。

  • 它主要用于后续管理对象(如压缩策略、保留策略、连续聚合)的命名组织。
  • 注意这里有个写法错误:=> 后面应该是字符串,建议改为:
    associated_table_prefix => 't_water_real_data_main'
    
    (去掉最后那个多余的点)
7. migrate_data => true

这表示在转换为 hypertable 的过程中,把原表中的现有数据迁移到新的 hypertable 结构中

  • 如果设为 false,则只转换结构,不迁移历史数据。
  • 通常首次转换时设置为 true

🧠 总结功能:

这条语句的作用是:

将名为 t_water_real_data_main 的普通表转换为 TimescaleDB 的 hypertable,使用 data_time 作为时间维度,monitor_id 作为空间维度,每个时间 chunk 包含 30 天的数据,并对 monitor_id 哈希分成 4 个分区。同时将原表中的所有数据迁移到新结构中,并为后续相关对象指定命名前缀。


⚠️ 注意事项:

  1. 转换完成后,原表会被重命名为 _timescaledb_internal._hyper_X_chunk 中的 chunk 表,而 t_water_real_data_main 会成为一个指向这些 chunk 的视图。
  2. 一旦转换为 hypertable,不能直接回退为普通表。
  3. 建议在低峰期执行此操作,因为数据迁移可能会锁定表一段时间。

根据已有表数据批量生成所有建超表语句AI提示词

-- 已知 "timescaledb_information"."dimensions" 有以下字段,示例,有的表有2个维度,有的表有1个维度:
INSERT INTO "timescaledb_information"."dimensions" ("hypertable_schema", "hypertable_name", "dimension_number", "column_name", "column_type", "dimension_type", "time_interval", "integer_interval", "integer_now_func", "num_partitions") VALUES ('public', 'bcs_log_receive_20x1', 1, 'receive_time', 'timestamp without time zone', 'Time', '1 day', NULL, NULL, NULL);
INSERT INTO "timescaledb_information"."dimensions" ("hypertable_schema", "hypertable_name", "dimension_number", "column_name", "column_type", "dimension_type", "time_interval", "integer_interval", "integer_now_func", "num_partitions") VALUES ('public', 'bcs_log_receive_20x1', 2, 'mn', 'character varying', 'Space', NULL, NULL, NULL, 16);
INSERT INTO "timescaledb_information"."dimensions" ("hypertable_schema", "hypertable_name", "dimension_number", "column_name", "column_type", "dimension_type", "time_interval", "integer_interval", "integer_now_func", "num_partitions") VALUES ('public', 'bcs_log_receive_3020', 1, 'receive_time', 'timestamp without time zone', 'Time', '1 day', NULL, NULL, NULL);-- 怎么根据这个表的数据,批量生成原始的建超表的语句:
SELECT create_hypertable('t_water_real_data_main', 'data_time', 'monitor_id', chunk_time_interval => INTERVAL '30 day',number_partitions => 4, associated_table_prefix=>'t_water_real_data_main', migrate_data => true);select create_hypertable('bcs_log_receive_3020', 'receive_time', chunk_time_interval=> interval '1 day', associated_table_prefix=>'_bcs_log_receive_3020',migrate_data => true);

分片时间未转换:

SELECT h.hypertable_name,CASE WHEN d.hypertable_name IS NOT NULL THENformat('SELECT create_hypertable(''%s'', ''%s''%s%s%s%s%s);',h.hypertable_name,max(CASE WHEN d.dimension_type = 'Time' THEN d.column_name END),COALESCE(', ''' || max(CASE WHEN d.dimension_type = 'Space' THEN d.column_name END) || '''', ''),COALESCE(', chunk_time_interval => INTERVAL ''' || max(d.time_interval) || '''', ''),COALESCE(', number_partitions => ' || max(d.num_partitions), ''),', associated_table_prefix=>''_' || replace(h.hypertable_name, '''', '''''') || '''',', migrate_data => true')ELSE NULLEND AS create_statement
FROM timescaledb_information.hypertables h -- 用于校验是否遗漏 ,v17以下版本timescaledb_information.hypertable.table_name
LEFT JOIN timescaledb_information.dimensions d ON h.hypertable_schema = d.hypertable_schema AND h.hypertable_name = d.hypertable_name
WHERE h.hypertable_schema = 'public'AND h.hypertable_name IN ('t_water_real_data_main', 'bcs_log_receive_3020')
GROUP BY h.hypertable_name, d.hypertable_name
ORDER BY h.hypertable_name;

经过多次调试和修正后 最终结果

CREATE OR REPLACE FUNCTION infer_best_time_unit(days INT)
RETURNS TEXT AS $$
BEGINIF days IS NULL OR days <= 0 THENRETURN NULL;END IF;IF days % 360 = 0 THENRETURN (days / 360)::TEXT || ' year' || CASE WHEN (days / 360) = 1 THEN '' ELSE 's' END;ELSIF days % 30 = 0 THENRETURN (days / 30)::TEXT || ' month' || CASE WHEN (days / 30) = 1 THEN '' ELSE 's' END;ELSIF days % 7 = 0 THENRETURN (days / 7)::TEXT || ' week' || CASE WHEN (days / 7) = 1 THEN '' ELSE 's' END;ELSERETURN days::TEXT || ' day' || CASE WHEN days = 1 THEN '' ELSE 's' END;END IF;
END;
$$ LANGUAGE plpgsql IMMUTABLE;SELECT h.hypertable_name,CASE WHEN d.hypertable_name IS NOT NULL THENformat('SELECT create_hypertable(''%s'', ''%s''%s%s%s%s%s);',h.hypertable_name,max(CASE WHEN d.dimension_type = 'Time' THEN d.column_name END),COALESCE(', ''' || max(CASE WHEN d.dimension_type = 'Space' THEN d.column_name END) || '''', ''),COALESCE(', chunk_time_interval => INTERVAL ''' ||infer_best_time_unit(floor((regexp_match(max(d.time_interval)::text, '^(\d+\.?\d*)\s*day'))[1]::NUMERIC)::INT) || '''',''),COALESCE(', number_partitions => ' || max(d.num_partitions), ''),', associated_table_prefix=>''_' || replace(h.hypertable_name, '''', '''''') || '''',', migrate_data => true')ELSE NULLEND AS create_statement
FROM timescaledb_information.hypertables h  -- 用于校验是否遗漏 ,v17以下版本timescaledb_information.hypertable.table_name
LEFT JOIN timescaledb_information.dimensions d ON h.hypertable_schema = d.hypertable_schema AND h.hypertable_name = d.hypertable_name
WHERE h.hypertable_schema = 'public'AND h.hypertable_name IN ('t_water_real_data_main', 'bcs_log_receive_3020','t_water_md_run_log_sub')
GROUP BY h.hypertable_name, d.hypertable_name
ORDER BY 

验证:

| hypertable_name             | create_statement                                                                                                                                                                                                 |
|-----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| bcs_log_receive_3020        | SELECT create_hypertable('bcs_log_receive_3020', 'receive_time', chunk_time_interval => INTERVAL '1 day', associated_table_prefix=>'_bcs_log_receive_3020', migrate_data => true); || t_water_md_run_log_sub      | SELECT create_hypertable('t_water_md_run_log_sub', 'data_time', chunk_time_interval => INTERVAL '1 year', associated_table_prefix=>'_t_water_md_run_log_sub', migrate_data => true); || t_water_real_data_main      | SELECT create_hypertable('t_water_real_data_main', 'data_time', 'monitor_id', chunk_time_interval => INTERVAL '1 month', number_partitions => 4, associated_table_prefix=>'_t_water_real_data_main', migrate_data => true); |

如果需要校验下待执行的目标库是否已有部分表,
先查已有的超表,然后加入到where not in:

SELECT hypertable_name FROM timescaledb_information.hypertables WHERE hypertable_schema = 'public';然后将上面的sql改成
AND h.hypertable_name NOT IN  (...)v11.9版本
SELECT table_name FROM timescaledb_information.hypertable WHERE TABLE_SCHEMA = 'public' ORDER BY "table_name";

2. 基于pgsql 11.9 研究

查询已有的超表:

SELECT table_name FROM timescaledb_information.hypertable ORDER BY "table_name";

查询所有的所有的超表建表语句

特别注意:低版本没有原始的时间分片长度的入参保存,所以要推断。另外1 year默认是360天,不一定365天,月可能也是类似。如果可以尝试从业务表得到一部分的时间分片drop_chunks_policy_config (INSERT INTO “drop_chunks_policy_config” (“table_name”, “drop_chunks_date”) VALUES ( ‘t_air_no_org_real_his_sub’, ‘5 year’))

CREATE OR REPLACE FUNCTION normalize_interval(microseconds BIGINT)
RETURNS TEXT AS $$
DECLAREyear_us   CONSTANT BIGINT := 31104000000000;  -- 360 天month_us  CONSTANT BIGINT := 2592000000000;   -- 30 天week_us   CONSTANT BIGINT := 604800000000;day_us    CONSTANT BIGINT := 86400000000;hour_us   CONSTANT BIGINT := 3600000000;quantity  NUMERIC;
BEGINIF microseconds >= year_us AND (microseconds % year_us) = 0 THENRETURN (microseconds / year_us)::INT || ' years';ELSIF microseconds >= month_us AND (microseconds % month_us) = 0 THENRETURN (microseconds / month_us)::INT || ' months';ELSIF microseconds >= week_us AND (microseconds % week_us) = 0 THENRETURN (microseconds / week_us)::INT || ' weeks';ELSIF microseconds >= day_us AND (microseconds % day_us) = 0 THENRETURN (microseconds / day_us)::INT || ' days';ELSIF microseconds >= hour_us AND (microseconds % hour_us) = 0 THENRETURN (microseconds / hour_us)::INT || ' hours';ELSE-- 如果不整除任何单位,则保留到小时RETURN CEIL(microseconds::NUMERIC / hour_us) || ' hours';END IF;
END;
$$ LANGUAGE plpgsql IMMUTABLE;SELECT h.table_name,format('SELECT create_hypertable(''%s'', ''%s''%s, chunk_time_interval => INTERVAL ''%s''%s%s%s);',h.table_name,-- 第一个维度(时间)max(time_dim.column_name),-- 第二个维度(空间)名称(可能为空)COALESCE(', ''' || max(space_dim.column_name) || '''', ''),-- 时间间隔(优先自定义策略)COALESCE(NULLIF(p.drop_chunks_date, ''), normalize_interval(time_dim.interval_length)),-- 空间分区参数(number_partitions => N)CASE WHEN space_dim.num_slices IS NOT NULL THEN ', number_partitions => ' || space_dim.num_slices::TEXT ELSE '' END,-- associated_table_prefix', associated_table_prefix => ''_' || replace(h.table_name, '''', '') || '''',-- 固定参数', migrate_data => true') AS create_statement
FROM _timescaledb_catalog.hypertable h
-- 时间维度
JOIN LATERAL (SELECT d.column_name, d.interval_lengthFROM _timescaledb_catalog.dimension dWHERE d.hypertable_id = h.idAND d.column_type IN ('timestamp without time zone', 'timestamp with time zone')AND d.interval_length IS NOT NULLORDER BY d.idLIMIT 1
) AS time_dim ON TRUE
-- 空间维度
LEFT JOIN LATERAL (SELECT d.column_name, d.num_slicesFROM _timescaledb_catalog.dimension dWHERE d.hypertable_id = h.idAND d.num_slices IS NOT NULLORDER BY d.idLIMIT 1
) AS space_dim ON TRUE
-- 自定义策略配置(定时任务清除过期数据的业务表也会记录原始时间分片长度入参,优先读取)
LEFT JOIN drop_chunks_policy_config p ON h.table_name = p.table_name
WHERE h.schema_name = 'public' 
AND h.table_name in ('t_air_miss_data_detail','t_water_md_run_log_sub')
GROUP BY h.table_name, time_dim.column_name,time_dim.interval_length, space_dim.column_name,space_dim.num_slices, p.drop_chunks_date
ORDER BY h.table_name;

结果

| table_name                  | create_statement                                                                                                                                                                                                 |
|-----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| t_air_miss_data_detail      | SELECT create_hypertable('t_air_miss_data_detail', 'warning_time', 'monitor_id', chunk_time_interval => INTERVAL '1 years', number_partitions => 4, associated_table_prefix => '_t_air_miss_data_detail', migrate_data => true); |
| t_water_md_run_log_sub      | SELECT create_hypertable('t_water_md_run_log_sub', 'data_time', chunk_time_interval => INTERVAL '5 year', associated_table_prefix => '_t_water_md_run_log_sub', migrate_data => true);                             |

注意:最终导出的sql执行前后加上

-- ROLLBACK;
BEGIN;
...
COMMIT;

出现问题1

ERROR: trigger “ts_insert_blocker” for relation “bcs_log_receive_3020” already exists, 找到同步表结构时带出的ts_insert_blocker触发器,这个触发器在创建超表时可以自动创建。通过执行下面的sql,找到消息中的批量sql: [双击 navicat中报错的消息列,就能定位到具体哪一行的sql]

DO $$
DECLAREr RECORD;
BEGINFOR r INSELECT tgrelid::regclass AS table_nameFROM pg_triggerWHERE tgname = 'ts_insert_blocker'AND NOT tgisinternal  -- 排除内部系统触发器LOOP<!--只打印删除的sql-->RAISE NOTICE 'DROP TRIGGER IF EXISTS ts_insert_blocker ON %;', r.table_name;<!--直接执行删除--><!--EXECUTE format('DROP TRIGGER IF EXISTS ts_insert_blocker ON %s', r.table_name);--><!--RAISE NOTICE 'Trigger "ts_insert_blocker" dropped on table %', r.table_name;-->END LOOP;
END;
$$;

出现问题2

ERROR: cannot create a unique index without the column “start_time” (used in partitioning) [双击 navicat中报错的消息列,就能定位到具体哪一行的sql]

ALTER TABLE "public"."t_water_event_md" DROP CONSTRAINT "t_water_event_md_pkey",ADD CONSTRAINT "t_water_event_md_pkey" PRIMARY KEY ("id", "start_time");

最新版本更新
https://code.jiangjiesheng.cn/article/368?from=csdn

推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》

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

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

相关文章

世事无常,比较复杂,人可以简单一点

2025年6月5日日&#xff0c;17~28℃&#xff0c;一般 待办&#xff1a; 宣讲会 职称材料的最后检查 职称材料有错误&#xff0c;需要修改 期末考试试题启用 教学技能大赛PPT 遇见&#xff1a;部门宣传泰国博士项目、硕士项目、本科项目。 感受或反思&#xff1a;东南亚博士…

B站缓存视频数据m4s转mp4

B站缓存视频数据m4s转mp4 结构分析 结构分析 在没有改变数据存储目录的情况下&#xff0c;b站默认数据保存目录为&#xff1a; Android->data->tv.danmaku.bili->download每个文件夹代表一个集合的视频&#xff0c;比如&#xff0c;我下载的”java从入门到精通“&…

一次Oracle的非正常关闭

数据库自己会关闭吗&#xff1f; 从现象来说Oracle MySQL Redis等都会出现进程意外停止的情况。而这些停止都是非人为正常关闭或者暴力关闭&#xff08;abort或者kill 进程&#xff09; 一次测试环境的非关闭 一般遇到这种情况先看一下错误日志吧。 2025-06-01T06:26:06.35…

linux 串口调试命令 stty

linux 串口调试命令 stty 文章目录 linux 串口调试命令 sttystty 常见命令选项&#xff1a;常用参数&#xff1a;一次性设置串口所有常见参数总结 stty&#xff08;设置终端行模式&#xff09;命令是用来配置终端设备&#xff08;包括串口设备&#xff09;的输入和输出行为的工…

【地址区间划分】

地址区间划分 1 decode_addr1.1 地址区间1.2 变式 本篇博客主要介绍对地址区间划分的一个比较巧妙参数化的做法。 1 decode_addr 遇到一个master转多个slave时&#xff0c;不可避免需要进行对addr总线进行分配地址区间来进行选中&#xff1b; 在这里给出一个可复用且设计思想比…

mysql复合查询mysql子查询

基础表结构创建 表结构包含主外键约束和字符集配置&#xff0c;确保数据完整性 部门表 CREATE TABLE dept (deptno int NOT NULL COMMENT 部门编号,dname varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 部门名称,loc varchar(20) CHARACTE…

vlan(虚拟局域网)逻辑图解+实验详解

VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09; 是一种通过逻辑方式&#xff08;非物理连接&#xff09;将网络设备划分为多个独立广播域的技术。它允许管理员在同一个物理网络中创建多个隔离的虚拟网络&#xff0c;从而提升网络的安全性、灵…

2025年—Comfy UI 和 Stable Diffusion底层原理

为什么要先讲SD原理 &#xff1f; 逻辑理解: ComfyUI是节点式操作&#xff0c;需要自行搭建工作流&#xff0c;理解原理才能灵活定制工作流学习效率: 基础原理不懂会导致后续学习吃力&#xff0c;原理是掌握ComfyUI的关键核心价值: ComfyUI最有价值的功能就是自主搭建工作流&a…

深入理解C#中的Web API:构建现代化HTTP服务的完整指南

在当今的软件开发领域&#xff0c;构建高效、可扩展的Web服务已成为一项基本需求。作为.NET开发者&#xff0c;C#中的Web API框架为我们提供了创建RESTful服务的强大工具。本文将全面探讨Web API的核心概念、实现细节和最佳实践&#xff0c;帮助您掌握这一关键技术。 一、Web A…

起重机指挥人员在工作中需要注意哪些安全事项?

起重机指挥人员在作业中承担着协调设备运行、保障作业安全的关键职责&#xff0c;其安全操作直接关系到整个起重作业的安全性。以下从作业前、作业中、作业后的全流程&#xff0c;详细说明指挥人员需注意的安全事项&#xff1a; 一、作业前的安全准备 资质与状态检查&#xff…

【高等数学】傅里叶级数逼近例子

f ( x ) π 2 − ∣ x ∣ f(x)\frac{\pi}{2}-|x| f(x)2π​−∣x∣ 由于是偶函数只需要求 cos ⁡ ( n x ) , 1 \cos(nx),1 cos(nx),1 的系数 a n 0 a_n 0 an​0, n n n 是偶数 a n 1 ( 2 n − 1 ) 2 a_n \frac{1}{(2n-1)^2} an​(2n−1)21​, n n n 是奇数 则 f ( x )…

PowerBI企业运营分析—全动态盈亏平衡分析

PowerBI企业运营分析—全动态盈亏平衡分析 欢迎来到Powerbi小课堂&#xff0c;在竞争激烈的市场环境中&#xff0c;企业运营分析平台成为提升竞争力的核心工具。 该平台通过整合多源数据&#xff0c;实现关键指标的实时监控&#xff0c;从而迅速洞察业务动态&#xff0c;精准…

用ApiFox MCP一键生成接口文档,做接口测试

日常开发过程中&#xff0c;尤其是针对长期维护的老旧项目&#xff0c;许多开发者都会遇到一系列相同的困扰&#xff1a;由于项目早期缺乏严格的开发规范和接口管理策略&#xff0c;导致接口文档缺失&#xff0c;甚至连基本的接口说明都难以找到。此外&#xff0c;由于缺乏规范…

26考研 | 王道 | 计算机组成原理 | 三、存储系统

26考研 | 王道 | 计算机组成原理 | 三、存储系统 文章目录 26考研 | 王道 | 计算机组成原理 | 三、存储系统3.1 存储系统基本概念3.2 主存储器1. 主存储器的基本组成2. SRAM与DRAM1.DRAM和SRAM对比2.DRAM的刷新3.DRAM的地址线复用技术 3. 只读存储器ROM4.双端口RAM和多模块存储…

IDEA 开发PHP配置调试插件XDebug

1、安装PHP环境 为了方便&#xff0c;使用的PhpStudy。 安装路径&#xff1a;D:\resources\phpstudy_pro\Extensions\php\php7.3.4nts 2、下载Xdebug Xdebug: Downloads 选择对应的版本下载&#xff0c;本次使用的是7.3。 3、配置Xdebug 在php.ini中添加Xdebug配置。 D…

Go 语言的 GC 垃圾回收

序言 垃圾回收&#xff08;Garbage Collection&#xff0c;简称 GC&#xff09;机制 是一种自动内存管理技术&#xff0c;主要用于在程序运行时自动识别并释放不再使用的内存空间&#xff0c;防止内存泄漏和不必要的资源浪费。这篇文章让我们来看一下 Go 语言的垃圾回收机制是如…

60天python训练计划----day45

DAY 45 Tensorboard使用介绍 知识点回顾&#xff1a; tensorboard的发展历史和原理tensorboard的常见操作tensorboard在cifar上的实战&#xff1a;MLP和CNN模型 之前的内容中&#xff0c;我们在神经网络训练中&#xff0c;为了帮助自己理解&#xff0c;借用了很多的组件&#x…

RocketMQ基础概念的理解

1、生产者 生产者和主题之间存在多对多关系。一个生产者可以向多个主题发送消息&#xff0c;一个主题可以接收来自多个生产者的消息。这种多对多关系有助于提高性能扩展和灾难恢复能力。 2、消费者以及消费者组 一个队列可以被多个消费者&#xff08;其中这多个消费者必须分…

Flash烧录速度和加载配置速度(纯FPGA ZYNQ)

在工程综合完成或者implement完成后&#xff0c;打开综合设计或者实现设计。 toots--->Edit Device Properties--->打开比特流设置 将bitstream进行压缩 上图中&#xff0c;时钟频率选择的档位有限&#xff0c;最大为66MHZ io的bus width可以设置为x1,x2,x4 vivado在设计…

优化09-表连接

一、表连接介绍 表连接类型 表连接是关系型数据库关键特性&#xff0c;在关系型数据库中&#xff0c;表连接分为三类&#xff1a;循环嵌套连接&#xff08;Nested Loops Join&#xff09;、哈希连接&#xff08;Hash Join&#xff09;、合并排序连接&#xff08;Merge Sort J…