从MySQL迁移到PostgreSQL的完整指南
1.引言
在现代数据库管理中,选择合适的数据库系统对业务的成功至关重要。随着企业数据量的增长和对性能要求的提高,许多公司开始考虑从MySQL迁移到PostgreSQL。这一迁移的主要原因包括以下几个方面:
1.1 性能和扩展性
PostgreSQL以其高性能和优秀的扩展能力而闻名。它支持复杂的查询优化和并发控制,能够更高效地处理大规模数据。与MySQL相比,PostgreSQL在处理复杂查询和大数据集时表现更为出色。
1.2. 标准兼容性和功能丰富
PostgreSQL严格遵循SQL标准,并提供了许多高级功能,如完整的ACID事务支持、复杂的查询和索引功能、存储过程、触发器等。其丰富的功能集使得开发人员能够更加灵活地设计和实现各种数据库应用。
1.3. 开源社区和企业支持
PostgreSQL拥有一个活跃的开源社区和广泛的企业支持。无论是社区版本还是企业版本,用户都可以获得及时的技术支持和更新。这使得PostgreSQL在稳定性和安全性方面具有显著优势。
1.4. 迁移过程中的挑战和注意事项
尽管从MySQL迁移到PostgreSQL带来了诸多优势,但这一过程也伴随着一些挑战和注意事项:
1.4.1. 语法差异
MySQL和PostgreSQL在SQL语法上存在一些差异,特别是在存储过程、函数和触发器的实现上。在迁移过程中,需要对现有的SQL脚本进行适当的调整和转换,以确保在PostgreSQL中能够正常运行。
1.4.2. 数据类型兼容性
两者在数据类型的支持和实现上也存在差异。例如,MySQL的TINYINT
在PostgreSQL中没有直接对应的类型,需要转换为SMALLINT
。类似的差异需要在迁移前进行详细的审查和处理。
1.4.3. 性能优化
尽管PostgreSQL在性能上具有优势,但迁移后仍需要对系统进行性能调优。包括索引的重新创建、查询的优化等,以充分发挥PostgreSQL的性能优势。
1.4.4. 数据完整性验证
在迁移过程中,确保数据的一致性和完整性至关重要。需要进行全面的数据验证,确保迁移后的数据与原数据完全一致。这包括行数验证、数据对比以及存储过程和函数的功能测试。
1.4.5. 工具的选择
选择合适的迁移工具可以显著简化迁移过程。例如,pgloader、Navicat等工具可以帮助大家完成大部份迁移步骤,减少手动干预的错误风险。关于pgloader的工具使用,可以查看pgloader官方文档,在这里就不赘述了,后续如果有需要可以针对pgloader的使用给大家进行分享。
2. 迁移步骤
将数据从一个数据库系统迁移到另一个数据库系统是一个复杂且关键的任务。以下是从MySQL迁移到PostgreSQL的完整过程,涵盖了所有相关步骤。
2.1 准备工作
2.1.1. 安装并配置MySQL和PostgreSQL
在开始迁移之前,确保MySQL和PostgreSQL都已正确安装并配置。准备工作包括安装和配置数据库系统以及备份MySQL数据库。对于Mysql、PostgreSQL的配置安装可以通过yum或者apt命令进行联网安装,也可以通过二进制进行安装,具体可以参考:
- PostgreSQL16.3基于CentOS7.9源码安装步骤
- 数据库MySQL的四种安装方式
2.1.2. 备份MySQL数据库
在进行数据迁移之前,必须备份MySQL数据库以防止数据丢失。备份可以使用mysqldump
工具完成。
1.备份整个数据库
使用mysqldump
命令导出整个数据库,包括表结构和数据。
mysqldump -u root -p your_database > your_database_backup.sql
2.备份单个表:
如果只需要备份特定的表,可以使用以下命令:
mysqldump -u root -p your_database table_name > table_name_backup.sql
3.备份存储过程和函数:
使用--routines
选项导出存储过程和函数。
mysqldump -u root -p --routines --no-create-info --no-data --skip-triggers your_database > routines_backup.sql
4.验证备份文件:
确保备份文件已正确生成,并且可以读取。可以简单地查看备份文件的内容:
less your_database_backup.sql
通过完成以上准备工作,可以确保MySQL和PostgreSQL环境已正确设置,并且数据已备份,为接下来的迁移步骤打下基础。
2.2 迁移表结构
在迁移表结构时,数据类型的转换是关键的一步。MySQL和PostgreSQL在数据类型的支持和实现上有一些差异,需要进行适当的映射和转换。以下是常用数据类型的对比:
数据类型对比
MySQL
PostgreSQL
说明
TINYINT
SMALLINT
小范围整数,PostgreSQL没有直接的TINYINT,需要转换为SMALLINT
SMALLINT
SMALLINT
小范围整数
MEDIUMINT
INTEGER
中等范围整数,PostgreSQL没有直接的MEDIUMINT,可以转换为INTEGER
INT
INTEGER
标准整数类型
BIGINT
BIGINT
大范围整数
FLOAT
REAL
单精度浮点数
DOUBLE
DOUBLE PRECISION
双精度浮点数
DECIMAL
DECIMAL
精确的小数
NUMERIC
NUMERIC
精确的小数,等同于DECIMAL
CHAR
CHAR
定长字符串
VARCHAR
VARCHAR
可变长度字符串
TINYTEXT
TEXT
小文本字段,PostgreSQL用TEXT替代
TEXT
TEXT
文本字段
MEDIUMTEXT
TEXT
中等大小文本字段,PostgreSQL用TEXT替代
LONGTEXT
TEXT
大文本字段,PostgreSQL用TEXT替代
DATE
DATE
日期
DATETIME
TIMESTAMP
日期和时间,PostgreSQL用TIMESTAMP替代
TIME
TIME
时间
YEAR
INTEGER
年份,PostgreSQL没有直接的YEAR类型,可以使用INTEGER
ENUM
VARCHAR
枚举类型,PostgreSQL没有直接的ENUM,可以使用VARCHAR
SET
VARCHAR
集合类型,PostgreSQL没有直接的SET,可以使用VARCHAR
BLOB
BYTEA
二进制大对象
TINYBLOB
BYTEA
小二进制对象,PostgreSQL用BYTEA替代
MEDIUMBLOB
BYTEA
中等大小二进制对象,PostgreSQL用BYTEA替代
LONGBLOB
BYTEA
大二进制对象,PostgreSQL用BYTEA替代
迁移步骤:
- 导出MySQL表结构: 使用
mysqldump
命令导出MySQL数据库的表结构。- 转换表结构为PostgreSQL兼容格式: 根据上表中的数据类型对比,手动或使用工具调整导出的SQL文件,确保数据类型在PostgreSQL中正确映射。
- 导入到PostgreSQL: 使用
psql
命令将转换后的表结构导入到PostgreSQL中,创建所需的表和列。
注意事项:
- 在进行数据类型转换时,需特别注意数据类型的精度和范围,确保在PostgreSQL中的数据类型能够满足原MySQL数据的需求。
- 特殊数据类型的转化,例如:MySQL当中的
TINYINT(1)
表示Boolean
的字段,在PostgreSQL需要转化为Boolean类型;PostgreSQL没有MySQL的BLOB
类型,所以需要把BLOB
类型转化为BYTEA
2.3 迁移数据
迁移数据是从MySQL到PostgreSQL过程中最关键的一步。这个过程涉及导出MySQL数据、转换数据格式、导入到PostgreSQL以及验证数据的一致性。以下是详细的步骤描述。
2.3.1. 导出MySQL数据
首先,需要将MySQL数据库中的数据导出为一个文件。这可以通过使用mysqldump
工具来实现。
导出步骤:
- 打开终端。
- 使用
mysqldump
命令导出数据mysqldump -u [username] -p [database_name] --no-create-info > data_backup.sql
其中:
[username]
是MySQL的用户名。[database_name]
是要导出的数据库名称。--no-create-info
选项表示只导出数据,不包括表结构。
2. 转换数据文件格式
由于MySQL和PostgreSQL的数据格式有所不同,需要将导出的MySQL数据文件转换为适合PostgreSQL的格式。pgloader
是一个强大的工具,可以简化这个过程。
转换步骤:
- 安装
pgloader
(如果尚未安装):sudo yum install pgloader -y
- 使用
pgloader
进行数据转换和导入:
pgloader mysql://[username]:[password]@localhost/[database_name] postgresql://[pg_username]:[pg_password]@localhost/[pg_database_name]
其中:
[username]
和[password]
是MySQL的用户名和密码[database_name]
是MySQL数据库的名称[pg_username]
和[pg_password]
是PostgreSQL的用户名和密码[pg_database_name]
是PostgreSQL数据库的名称
3. 导入到PostgreSQL
如果没有使用pgloader
,需要手动将数据文件导入到PostgreSQL。
导入步骤:
- 打开终端。
- 使用
psql
命令导入数据。psql -U [pg_username] -d [pg_database_name] -f data_backup.sql
其中:
[pg_username]
是PostgreSQL的用户名。[pg_database_name]
是要导入数据的PostgreSQL数据库名称。data_backup.sql
是导出的MySQL数据文件。
4. 数据完整性验证
在数据导入后,需要进行数据完整性验证,以确保数据迁移过程中没有丢失或损坏。
验证步骤:
- 行数验证:
在MySQL和PostgreSQL中分别查询每个表的行数,确保行数一致。SELECT COUNT(*) FROM table_name;
- 数据对比:
随机抽取若干条记录,比较MySQL和PostgreSQL中的数据是否一致。SELECT * FROM table_name WHERE id = random_id;
- 完整性检查
确保所有外键、唯一约束等数据库完整性规则在PostgreSQL
中正确实现- 业务逻辑验证
使用应用程序的业务逻辑进行数据验证。编写脚本或程序调用应用程序接口,验证数据是否符合预期- 数据范围和分布验证
验证特定列的数据范围和分布是否一致。例如,检查日期
列的最小值
和最大值
是否相同- NULL值验证
检查各个表中NULL
值的分布是否一致- 聚合函数验证
使用聚合函数(如:SUM、AVG、MAX、MIN
)验证数据的一致性- 应用程序功能测试
通过应用程序执行常规操作,验证迁移后的数据是否支持应用程序的正常运行。包括数据插入、更新、删除和查询
等操作
注意事项:
- 字符编码:确保MySQL和PostgreSQL的字符编码一致,避免出现乱码问题。
- 事务处理:在数据导入过程中使用事务,以确保数据的一致性和完整性。
- 索引和约束:在导入数据前,可以暂时禁用索引和约束,提高数据导入速度。导入完成后再重新在PostgreSQL侧进行重建。
2.4 迁移存储过程和函数
将MySQL的存储过程和函数迁移到PostgreSQL时,需要了解两者之间的系统函数和语法差异。以下是详细的对比表格:
迁移步骤:
- 导出MySQL存储过程和函数:
使用mysqldump
命令导出MySQL数据库中的存储过程和函数。mysqldump -u [username] -p --routines --no-create-info --no-data --skip-triggers [database_name] > routines_backup.sql
- 转换存储过程和函数为PostgreSQL兼容格式
手动调整导出的存储过程和函数,使其适应PostgreSQL的语法- 导入到PostgreSQL
使用psql
命令将转换后的存储过程和函数导入到PostgreSQL中。psql -U [pg_username] -d [pg_database_name] -f routines_backup_pg.sql
2.4.1 系统函数对比
功能
MySQL
PostgreSQL
当前日期和时间
NOW()
CURRENT_TIMESTAMP
当前用户
CURRENT_USER()
CURRENT_USER
字符串长度
CHAR_LENGTH(string)
LENGTH(string)
数学函数
ABS(number)
, ROUND(number)
ABS(number)
, ROUND(number)
随机数生成
RAND()
RANDOM()
子字符串
SUBSTRING(string, pos, len)
SUBSTRING(string FROM pos FOR len)
日期加减
DATE_ADD(date, INTERVAL expr unit)
date + interval 'expr unit'
日期格式化
DATE_FORMAT(date, format)
TO_CHAR(date, format)
2.4.2 语法对比
功能/特性
MySQL
PostgreSQL
存储过程定义
CREATE PROCEDURE proc_name (params) BEGIN ... END;
CREATE OR REPLACE PROCEDURE proc_name (params) LANGUAGE plpgsql AS $$ BEGIN ... END; $$;
函数定义
CREATE FUNCTION func_name (params) RETURNS type BEGIN ... END;
CREATE OR REPLACE FUNCTION func_name (params) RETURNS type LANGUAGE plpgsql AS $$ DECLARE ... BEGIN ... END; $$;
参数
输入、输出、输入输出参数
输入参数(默认),使用IN
、OUT
、INOUT
指定
变量声明
DECLARE var_name type;
DECLARE var_name type;
在DECLARE
块中
异常处理
DECLARE ... HANDLER
EXCEPTION
块
条件控制
IF ... THEN ... ELSE ... END IF;
IF ... THEN ... ELSE ... END IF;
循环控制
WHILE ... DO ... END WHILE;
WHILE ... LOOP ... END LOOP;
结果集处理
SELECT ... INTO var;
SELECT ... INTO var;
2.4.3 示例说明
-
在MySQL中定义存储过程和函数
– 存储过程
DELIMITER //
CREATE PROCEDURE example_procedure(IN param1 INT)
BEGIN
SELECT * FROM example_table WHERE id = param1;
END //
DELIMITER ;– 函数
DELIMITER //
CREATE FUNCTION example_function(param1 INT) RETURNS INT
BEGIN
DECLARE result INT;
SELECT column INTO result FROM example_table WHERE id = param1;
RETURN result;
END //
DELIMITER ; -
在PostgreSQL中转换存储过程和函数
– 存储过程
CREATE OR REPLACE PROCEDURE example_procedure(param1 INT)
LANGUAGE plpgsql
AS B E G I N S E L E C T ∗ F R O M e x a m p l e t a b l e W H E R E i d = p a r a m 1 ; E N D ; BEGIN SELECT * FROM example_table WHERE id = param1; END; BEGINSELECT∗FROMexampletableWHEREid=param1;END;;– 函数
CREATE OR REPLACE FUNCTION example_function(param1 INT) RETURNS INT
LANGUAGE plpgsql
AS D E C L A R E r e s u l t I N T ; B E G I N S E L E C T c o l u m n I N T O r e s u l t F R O M e x a m p l e t a b l e W H E R E i d = p a r a m 1 ; R E T U R N r e s u l t ; E N D ; DECLARE result INT; BEGIN SELECT column INTO result FROM example_table WHERE id = param1; RETURN result; END; DECLAREresultINT;BEGINSELECTcolumnINTOresultFROMexampletableWHEREid=param1;RETURNresult;END;;
2.4.3 存储过程和函数测试
迁移完成后,存储过程和函数的测试是确保迁移成功的重要步骤。测试的目的是验证在PostgreSQL中存储过程和函数的功能是否与在MySQL中一致,主要从如下几方面进行测试验证:
- 功能测试
需要确保每个存储过程和函数在PostgreSQL中按预期工作。可以通过创建测试用例来调用每个存储过程和函数,并验证其输出是否正确。例如,对于存储过程get_user_by_id,可以在PostgreSQL中执行CALL get_user_by_id(1);,并检查返回结果是否正确。- 性能测试
对比MySQL和PostgreSQL中存储过程和函数的执行时间,确保性能没有显著下降。这可以通过在两个数据库中分别执行相同的存储过程或函数,并记录其执行时间来实现。例如,在MySQL中执行CALL get_user_by_id(1);,然后在PostgreSQL中执行相同的命令,并比较执行时间。- 边界测试
测试存储过程和函数的边界情况,如最大和最小输入值,空值处理,异常情况等。例如,可以在PostgreSQL中执行CALL
get_user_by_id(NULL);、CALL get_user_by_id(-1);和CALL
get_user_by_id(99999999);,以确保存储过程和函数能够正确处理各种输入情况。- 集成测试
通过应用程序执行常规操作,验证迁移后的数据是否支持应用程序的正常运行。这包括在应用程序中调用存储过程和函数,并验证结果是否与预期一致。例如,在Java应用程序中,通过JDBC连接到PostgreSQL数据库,调用存储过程get_user_by_id,并检查返回结果是否正确。
3.注意事项
数据的迁移大多都是基于实际的生成环境中进行,为了尽可能减少对于业务的影响,我们应该通过细致的规划和执行,合理的停机时长规划、应用改造和生产环境验证等来确保迁移过程的顺利和成功,最大程度地减少对业务的影响,一下为在整个迁移过程中需要考虑的注意事项:
1.停机时长的考虑
迁移过程中,停机时长是一个重要的考虑因素。数据量越大,迁移所需的时间越长。因此,建议在数据量较少或业务低峰期进行迁移,以减少对生产环境的影响。为了确保数据的一致性,在停机前需要备份所有数据,并确保在迁移过程中不进行数据修改。
2.缩短停机时间的方法
为了尽可能缩短停机时间,可以考虑使用增量备份和恢复的方法,减少全量数据备份和恢复所需的时间。此外,提前准备好迁移所需的脚本和配置,可以减少实际迁移操作的时间。
3.代码兼容性
迁移过程中,需要修改应用程序的数据库连接配置,确保连接到PostgreSQL。同时,检查并修改应用程序中所有的SQL查询,确保其在PostgreSQL中能够正确执行。尤其注意MySQL特有的语法和函数,需替换为PostgreSQL兼容的语法和函数。
4.功能验证
迁移完成后,需要进行功能验证。编写和执行单元测试,确保应用程序中的所有功能在使用PostgreSQL时能够正常运行。此外,在测试环境中进行全面的集成测试,模拟生产环境中的实际操作,确保所有业务流程能够正常执行。
5.数据验证
数据验证是迁移过程中的关键步骤。使用行数验证、数据对比、校验和验证等方法,确保迁移后数据的完整性和一致性。同时,验证特定列的数据范围和分布是否一致,如日期列的最小值和最大值是否相同。
6.性能验证
性能验证也是迁移过程中不可忽视的一部分。对比迁移前后关键查询的执行时间,确保PostgreSQL中的查询性能满足需求。通过性能测试,确保PostgreSQL中的存储过程和函数的执行时间在可接受范围内。
7.系统稳定性
为了确保系统的稳定性,建议在生产环境中进行压力测试,验证系统在高负载下的稳定性和性能。同时,设置详细的监控和日志记录,及时发现和解决潜在的问题。
8.关键注意事项
在进行任何迁移操作前,务必做好全面的数据备份,以防迁移过程中出现数据丢失或损坏的情况。制定详细的迁移计划,包括每个步骤的时间安排、责任人和应急预案。如果可能,分阶段逐步实施迁移,逐步验证每个阶段的结果,以降低整体迁移的风险。
总结
从MySQL迁移到PostgreSQL是一个复杂但必要的过程,它能够为系统带来更高的性能、丰富的功能集和更强的扩展能力。整个迁移过程包括准备工作、迁移表结构、迁移数据、迁移存储过程和函数以及数据完整性验证。在每个步骤中都需要细致的规划和执行,以确保数据的一致性和完整性。
在迁移过程中,需要仔细考虑停机时长、应用改造以及生产环境中的实际验证。停机时长的规划直接影响业务的连续性,建议在业务低峰期进行迁移,并使用增量备份和恢复的方法以缩短停机时间。应用改造方面,需修改数据库连接配置和SQL查询,确保兼容PostgreSQL。生产环境验证是确保迁移成功的关键步骤,包括数据验证、性能验证和系统稳定性测试。通过行数验证、数据对比、校验和验证等方法,可以确保数据的完整性和一致性。同时,性能测试和压力测试能够确保系统在迁移后的高效稳定运行。
通过细致的规划和执行,从MySQL迁移到PostgreSQL不仅能够提升系统性能,还能为未来的发展打下坚实的基础。希望本文提供的详细步骤和注意事项能够帮助您顺利完成迁移过程,实现系统的平稳过渡和功能增强。
参考链接
以下是一些关于从MySQL迁移到PostgreSQL的参考文章和链接,这些资源可以为您提供更多的技术细节:
- PostgreSQL Official Documentation
- MySQL to PostgreSQL Migration Guide
- pgloader Documentation
- mysqldump Documentation
相关文章:
从MySQL迁移到PostgreSQL的完整指南
1.引言 在现代数据库管理中,选择合适的数据库系统对业务的成功至关重要。随着企业数据量的增长和对性能要求的提高,许多公司开始考虑从MySQL迁移到PostgreSQL。这一迁移的主要原因包括以下几个方面: 1.1 性能和扩展性 PostgreSQL以其高性能…...

服务器一次性部署One API + ChatGPT-Next-Web
服务器一次性部署One API ChatGPT-Next-Web One API ChatGPT-Next-Web 介绍One APIChatGPT-Next-Web docker-compose 部署One API ChatGPT-Next-WebOpen API docker-compose 配置ChatGPT-Next-Web docker-compose 配置docker-compose 启动容器 后续配置 同步发布在个人笔记服…...
51单片机 和 STM32 的烧录方式和通信协议的区别
51单片机 和 STM32 的烧录方式和通信协议的区别 1. 为什么51单片机需要额外的软件(如ISP)? (1)51单片机的烧录方式 ISP(In-System Programming): 51单片机通常通过 串口(…...

(STM32笔记)十二、DMA的基础知识与用法 第二部分
我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 DMA的基础知识与用法 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器到外设存储器到存储器 2、每次传输大小3、传…...

【优选算法篇】:模拟算法的力量--解决复杂问题的新视角
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:优选算法篇–CSDN博客 文章目录 一.模拟算法二.例题1.替换所有的问号2.提莫攻击3.外观数列4…...

探秘 JMeter (Interleave Controller)交错控制器:解锁性能测试的隐藏密码
嘿,小伙伴们!今天咱们要把 JMeter 里超厉害的 Interleave Controller(交错控制器)研究个透,让你从新手直接进阶成高手,轻松拿捏各种性能测试难题! 一、Interleave Controller 深度剖析 所属家族…...

脚本化挂在物理盘、nfs、yum、pg数据库、nginx(已上传脚本)
文章目录 前言一、什么是脚本化安装二、使用步骤1.物理磁盘脚本挂载(离线)2.yum脚本化安装(离线)3.nfs脚本化安装(离线)4.pg数据库脚本化安装(离线)5.nginx脚本化安装(离…...

ESP嵌入式开发环境安装
前期准备,虚拟机,ios镜像,VSCode。 centOS8:centos安装包下载_开源镜像站-阿里云 虚拟机:vmware VSCode:Visual Studio Code - Code Editing. Redefined 如何安装镜像自行查找 完成以上环境后进行一下操…...

Elasticsearch入门学习
Elasticsearch是什么 Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展的数据存储和矢量数据库。 它针对生产规模工作负载的速度和相关性进行了优化。 使用 Elasticsearch 近乎实时地搜索、索引、存储和分析各种形状和大小的数据。 特点 分布式&a…...

黑马linux笔记(03)在Linux上部署各类软件 MySQL5.7/8.0 Tomcat(JDK) Nginx RabbitMQ
文章目录 实战章节:在Linux上部署各类软件tar -zxvf各个选项的含义 为什么学习各类软件在Linux上的部署 一 MySQL数据库管理系统安装部署【简单】MySQL5.7版本在CentOS系统安装MySQL8.0版本在CentOS系统安装MySQL5.7版本在Ubuntu(WSL环境)系统…...
《软硬协同优化,解锁鸿蒙系统AI应用性能新高度》
在当今数字化时代,鸿蒙系统与人工智能的融合正逐渐成为科技领域的热门话题。如何通过软件和硬件协同优化,进一步提升鸿蒙系统中AI应用的整体性能,成为了开发者和技术爱好者们关注的焦点。 鸿蒙系统与AI应用的融合现状 鸿蒙系统以其独特的微…...
利用 Tree Shaking 提升 React.js 性能
Tree Shaking 是现代 JavaScript 应用中不可或缺的优化技术,它通过移除未使用的代码来减少最终打包的大小。对于 React.js 应用,这一技术尤为重要,因为随着组件和第三方库的增多,打包体积可能迅速膨胀。Tree Shaking 能显著提升加…...
RPC实现原理,怎么跟调用本地一样
回答1 要让⽹络通信细节对使⽤者透明,我们需要对通信细节进⾏封装,我们先看下⼀个 RPC 调⽤的流程涉及到哪些通 信细节: 1. 服务消费⽅( client )调⽤以本地调⽤⽅式调⽤服务; 2. client stub 接收到调…...

Vue进阶之AI智能助手项目(二)——ChatGPT的调用和开发
AI智能助手项目 service服务端文件目录src目录详解src/index.tschatGPT:src/chatgpt/index.ts前端接口部分src/api/index.tssrc/utils/request/index.tspost方法httpHttpOptionsrc/utils/request/axios.tsLayout布局页面-viewsexception异常页面src/views/exception/404/index…...

python学opencv|读取图像(二十九)使用cv2.getRotationMatrix2D()函数旋转缩放图像
【1】引言 前序已经学习了如何平移图像,相关文章链接为: python学opencv|读取图像(二十七)使用cv2.warpAffine()函数平移图像-CSDN博客 在此基础上,我们尝试旋转图像的同时缩放图像。 【2】…...

2025-微服务—SpringCloud-1~3
2025-微服务—SpringCloud 第一章、从Boot和Cloud版本选型开始说起1、Springboot版本2、Springcloud版本3、Springcloud Alibaba4、本次讲解定稿版 第二章 关于Cloud各种组件的停更/升级/替换1、微服务介绍2、SpringCloud是什么?能干吗?产生背景…...

UnityXR Interaction Toolkit 如何检测HandGestures
前言 随着VR设备的不断发展,从最初的手柄操作,逐渐演变出了手部交互,即头显可以直接识别玩家的手部动作,来完成手柄的交互功能。我们今天就来介绍下如何使用Unity的XR Interaction Toolkit 来检测手势Hand Gesture。 环境配置 1.使用Unity 2021或者更高版本,创建一个项…...

使用 Multer 上传图片到阿里云 OSS
文件上传到哪里更好? 上传到服务器本地 上传到服务器本地,这种方法在现今商业项目中,几乎已经见不到了。因为服务器带宽,磁盘 IO 都是非常有限的。将文件上传和读取放在自己服务器上,并不是明智的选择。 上传到云储存…...

2008-2020年各省社会消费品零售总额数据
2008-2020年各省社会消费品零售总额数据 1、时间:2008-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、社会消费品零售总额 4、范围:31省 5、指标解释:社会消费品零售总额指企业&#x…...

【大模型入门指南 07】量化技术浅析
【大模型入门指南】系列文章: 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...