MySQL项目迁移华为GaussDB PG模式指南
文章目录
- 0. 前言
- 1. 数据库模式选择(B/PG)
- 2.驱动选择
- 2.1. 使用postgresql驱动
- 2.1. 使用opengaussjdbc驱动
- 3. 其他考虑因素
- 4. PG模式
- 4.1 MySQL和OpenGauss不兼容的语法处理建议
- 4.2 语法差异
- 6. 高斯数据库 PG模式JDBC 使用示例验证
- 6. 参考资料
本章节主要介绍MySQL项目迁移华为GaussDB PG模式指南
0. 前言
本文是关于如何将MySQL项目迁移到华为GaussDB PG模式的详细教程。
背景:在当今的国际形势严峻,很多卡脖子的技术搞得我们国内奋发图强,以华为为代表的国产数据库。在很多国企的系统中已经开始迁移。国产数据库的重要性不言而喻。
本文整理总计了一下从MySQL迁移到华为的GaussDB PG模式。这两种数据库在核心上有很大的不同,因此这个迁移过程可能会遇到一些困难。本文将详细介绍如何进行这种迁移,包括数据迁移,表结构迁移,以及索引、触发器、存储过程和函数的迁移等步骤。无论你是数据库管理员,还是只是想要了解这个过程的人,都可以从本文中获得有用的信息。
1. 数据库模式选择(B/PG)
GaussDB 是华为提供的一种数据库解决方案,它支持多种存储引擎和数据库模式。在 GaussDB 中,B 和 PG 分别是两种不同的数据库模式。
-
B 模式:这通常是基于 GaussDB 自己的原生存储引擎。这种模式可能提供更多的高级特性和优化,特别是针对大规模、高并发的环境。
-
PG 模式:这是基于 PostgreSQL 的模式。如果你的应用或系统已经在使用 PostgreSQL,或者你需要一个与 PostgreSQL 兼容的解决方案,那么这可能是更好的选择。
2.驱动选择
2.1. 使用postgresql驱动
如果使用PG模式,在3.x版本可以直接使用pgSQL的驱动我们项目亲测
在代码中创建连接之前任意位置隐含装载:Class.forName(“org.postgresql.Driver”);
在JVM启动时参数传递:java -Djdbc.drivers=org.postgresql.Driver jdbctest
这些文件都是不同版本的OpenGauss JDBC驱动,用于Java应用程序连接到OpenGauss数据库。
2.1. 使用opengaussjdbc驱动
当使用opengaussjdbc.jar时,上面的Driver类名相应修改为“com.huawei.opengauss.jdbc.Driver”。
文件名称 | 说明 | 文件大小 | 最后修改时间 |
---|---|---|---|
gsjdbc200.jar | 针对某些版本的Java(如Java 2.0)的OpenGauss JDBC驱动 | 909 kB | 2023/3/27 00:43:23 |
gsjdbc4.jar | 针对Java 4或更高版本的OpenGauss JDBC驱动 | 896 kB | 2023/3/27 00:43:23 |
opengaussjdbc.jar | 通用的OpenGauss JDBC驱动 | 909 kB | 2023/3/27 00:43:23 |
3. 其他考虑因素
-
兼容性:
如果你需要与 PostgreSQL 兼容,那么 PG 模式可能是更好的选择。
-
性能需求:
对于特定的高性能或大规模需求,B 模式可能提供更多的优化选项。
-
特性需求:
某些高级功能可能只在特定的模式下可用。
-
团队经验:
如果你的团队有更多的 PostgreSQL 经验,那么 PG 模式可能更适合;反之亦然。
-
迁移和集成:
考虑到数据迁移和系统集成的复杂性和成本,选择一个与现有系统更兼容的模式。
-
成本:
不同的模式可能有不同的成本结构,包括授权费用和运维成本。
项目迁移数据库类型可是一个大工程,在迁移之初一定要做好充分的调研。建议在确定模式之前,进行性能和兼容性测试,以确保你的选择能满足业务和技术需求。
在 GaussDB 的 PG 模式下,虽然它已经做出了很大的努力来实现对 PostgreSQL 的兼容,但仍然可能存在一些与 MySQL 不兼容的情况。如果你在迁移过程中遇到了这样的问题,以下是一些处理建议:
-
了解两种数据库的差异:首先,你需要理解 MySQL 和 OpenGauss(GaussDB 的 PG 模式)在 SQL 语法、数据类型、函数、存储过程等方面的差异。这将帮助你更好地理解迁移过程中可能出现的问题。
-
使用数据库迁移工具:对于大规模的数据库迁移,手动修改 SQL 语句可能并不现实。你可以考虑使用数据库迁移工具,如 AWS DMS(Database Migration Service)或 Azure Database Migration Service,这些工具可以自动处理一些常见的不兼容问题。
-
手动修改 SQL 语句:对于一些特定的不兼容问题,你可能需要手动修改你的 SQL 语句。例如,MySQL 使用
AUTO_INCREMENT
在表定义中创建自增字段,而 OpenGauss 使用SERIAL
数据类型。对于这样的差异,你需要手动修改你的表定义。 -
修改应用代码:在某些情况下,你可能需要修改你的应用代码来适应新的数据库。例如,如果你的应用依赖于 MySQL 的特定功能(如全文搜索或地理空间查询),你可能需要重新实现这些功能以使用 OpenGauss 的等价功能。
4. PG模式
4.1 MySQL和OpenGauss不兼容的语法处理建议
以下是在GaussDB PG(OpenGauss)和MySQL之间的一些主要的SQL语法不兼容性。这个列表包含了一些主要的不同之处,但并不是全部的不兼容性。在进行迁移之前,建议深入对比和测试以确保兼容性。
MySQL | OpenGauss | 备注 |
---|---|---|
AUTO_INCREMENT | SERIAL | 序列生成器 |
SHOW TABLES | \dt | 查看所有表 |
SHOW DATABASES | \l | 查看所有数据库 |
LIMIT n OFFSET m | LIMIT n OFFSET m 或 FETCH FIRST n ROWS ONLY OFFSET m | 分页查询 |
DESCRIBE table or DESC table | \d table | 描述表结构 |
CONCAT(str1, str2, ...) | `str1 | |
SUBSTRING(str, pos, len) | SUBSTRING(str FROM pos FOR len) | 子字符串 |
LENGTH(str) | LENGTH(str) 或CHAR_LENGTH(str) | 字符串长度 |
CURDATE() | CURRENT_DATE | 当前日期 |
NOW() | CURRENT_TIMESTAMP | 当前时间 |
RAND() | RANDOM() | 生成随机数 |
IFNULL(exp, replace_exp) | COALESCE(exp, replace_exp) | 判断表达式是否为空 |
ISNULL(exp) | exp IS NULL | 判断表达式是否为空 |
` 作为标识符引用符 | " 作为标识符引用符 | 标识符引用符 |
存储过程使用 BEGIN 和 END | 存储过程使用 $$ | 存储过程定义 |
TRUNCATE TABLE 不可在事务中 | TRUNCATE TABLE 可在事务中 | 清空表数据 |
REPLACE INTO | INSERT ... ON CONFLICT DO UPDATE | 插入冲突更新 |
REGEXP | ~ | 正则表达式搜索 |
CREATE DATABASE 不支持所有者 | CREATE DATABASE 支持所有者 | 创建数据库 |
ENUM 类型 | 无对应,可用 CHECK 约束代替 | 类型不一致 |
SET 类型 | 无对应,可用 ARRAY 类型代替 | 类型不一致 |
YEAR 类型 | 无对应,可用 INTERVAL YEAR 或 DATE 类型代替 | 类型不一致 |
UNSIGNED 类型 | 无对应,需注意数值范围 | 类型不一致 |
ZEROFILL 类型 | 无对应,需在应用层处理 | 类型不一致 |
SHOW CREATE TABLE | pg_dump -t table -s | 查看表创建语句 |
ENGINE = InnoDB | 无对应 | 存储引擎 |
CHARSET = utf8mb4 | ENCODING = UTF8 | 字符集 |
COLLATE = utf8mb4_bin | COLLATE "C" | 排序规则 |
分区表 | 分区表 | 分区定义语法不同 |
CREATE USER | CREATE ROLE | 创建用户 |
REVOKE ALL PRIVILEGES | REVOKE ALL | 撤销权限 |
GRANT SELECT ON *.* | GRANT SELECT ON ALL TABLES IN SCHEMA | 授予权限 |
/*!50003 CREATE*/ | CREATE OR REPLACE | 创建或替换 |
LOCK TABLES | LOCK TABLE | 锁表 |
UNLOCK TABLES | COMMIT | 解锁 |
KILL QUERY | CANCEL | 取消查询 |
SHOW PROCESSLIST | SELECT * FROM pg_stat_activity | 查看进程列表 |
LOAD DATA INFILE | COPY | 数据导入 |
SELECT INTO OUTFILE | COPY TO | 数据导出 |
RENAME COLUMN | ALTER COLUMN RENAME | 重命名列 |
RENAME INDEX | ALTER INDEX RENAME | 重命名索引 |
RENAME DATABASE | 无对应 | 重命名数据库 |
ALTER DATABASE 不支持修改所有者 | ALTER DATABASE 支持修改所有者 | 修改数据库所有者 |
ALTER DATABASE 支持修改字符集和排序规则 | ALTER DATABASE 不支持修改字符集和排序规则 | 修改数据库字符集和排序规则 |
ALTER TABLE 支持一次修改多个列 | ALTER TABLE 一次只能修改一个列 | 修改表列 |
ALTER TABLE 支持一次添加多个索引 | ALTER TABLE 一次只能添加一个索引 | 添加表索引 |
ALTER TABLE 支持一次删除多个索引 | ALTER TABLE 一次只能删除一个索引 | 删除表索引 |
ALTER TABLE 支持修改存储引擎 | ALTER TABLE 不支持修改存储引擎 | 修改表存储引擎 |
ALTER TABLE 支持修改字符集和排序规则 | ALTER TABLE 不支持修改字符集和排序规则 | 修改表字符集和排序规则 |
ALTER TABLE 支持修改自增值 | ALTER TABLE 不支持修改自增值 | 修改表自增值 |
4.2 语法差异
序号 | 描述 | MySQL | GaussDB PG |
---|---|---|---|
1 | 插入并在存在时更新 | REPLACE INTO 或 INSERT … ON DUPLICATE KEY UPDATE … | INSERT … ON CONFLICT DO UPDATE … |
2 | 使用 LIMIT 进行分页查询 | SELECT … LIMIT offset, count | SELECT … LIMIT count OFFSET offset |
3 | 单行插入返回插入的 ID | INSERT INTO …; SELECT LAST_INSERT_ID(); | INSERT INTO … RETURNING id; |
4 | 单行更新返回更新的行 | UPDATE …; SELECT …; | UPDATE … RETURNING *; |
5 | 单行删除返回删除的行 | DELETE …; SELECT …; | DELETE … RETURNING *; |
6 | 随机获取一行记录 | SELECT … ORDER BY RAND() LIMIT 1 | SELECT … ORDER BY RANDOM() LIMIT 1 |
7 | 索引字段查询优化 | SELECT * FROM table USE INDEX(index) WHERE column = value | SET enable_seqscan TO OFF; SELECT * FROM table WHERE column = value; SET enable_seqscan TO ON; |
8 | 使用全文索引搜索 | MATCH(column) AGAINST(‘text’) | to_tsvector(column) @@ to_tsquery(‘text’) |
9 | 查询特定范围的行 | SELECT * FROM table LIMIT x, y | SELECT * FROM table LIMIT y OFFSET x |
10 | 使用存储过程 | CALL procedure_name() | SELECT * FROM procedure_name() |
11 | 事务处理 | START TRANSACTION; COMMIT; ROLLBACK; | BEGIN; COMMIT; ROLLBACK; |
12 | 创建临时表 | CREATE TEMPORARY TABLE table_name | CREATE TEMP TABLE table_name |
13 | MySQL使用反引号(``)引用表名和列名 | SELECT column FROM table | SELECT “column” FROM “table” |
14 | 时间和日期函数 | DATE(), NOW(), YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND() | CURRENT_DATE, CURRENT_TIME, DATE_PART(‘year’, column), DATE_PART(‘month’, column), DATE_PART(‘day’, column), DATE_PART(‘hour’, column), DATE_PART(‘minute’, column), DATE_PART(‘second’, column) |
15 | 字符串连接函数 | CONCAT(column1, column2) | column1 |
16 | 对分组的限制 | SELECT … FROM … GROUP BY … WITH ROLLUP | SELECT … FROM … GROUP BY … ROLLUP(…) |
17 | 对NULL的处理 | SELECT IFNULL(column, 0) FROM table | SELECT COALESCE(column, 0) FROM table |
18 | 判断是否为空 | SELECT column IS NULL FROM table | SELECT column IS NULL FROM table |
19 | 日期加减操作 | SELECT DATE_ADD(date, INTERVAL 1 DAY) FROM table | SELECT date + INTERVAL ‘1 day’ FROM table |
20 | 创建自增主键 | CREATE TABLE table (id INT AUTO_INCREMENT, PRIMARY KEY (id)) | CREATE TABLE table (id SERIAL PRIMARY KEY) |
21 | 使用正则表达式匹配数据 | SELECT column REGEXP ‘pattern’ FROM table | SELECT column ~ ‘pattern’ FROM table |
22 | 计算平均值 | SELECT AVG(column) FROM table | SELECT AVG(column) FROM table |
23 | 计算最大值 | SELECT MAX(column) FROM table | SELECT MAX(column) FROM table |
24 | 计算最小值 | SELECT MIN(column) FROM table | SELECT MIN(column) FROM table |
25 | 计算总和 | SELECT SUM(column) FROM table | SELECT SUM(column) FROM table |
26 | 计算记录数 | SELECT COUNT(column) FROM table | SELECT COUNT(column) FROM table |
27 | 使用内置数学函数 | SELECT ABS(column), CEIL(column), FLOOR(column), ROUND(column) FROM table | SELECT ABS(column), CEILING(column), FLOOR(column), ROUND(column) FROM table |
28 | 使用内置字符串函数 | SELECT CHAR_LENGTH(column), LOWER(column), UPPER(column), REVERSE(column) FROM table | SELECT LENGTH(column), LOWER(column), UPPER(column), REVERSE(column) FROM table |
29 | 使用内置日期函数 | SELECT CURRENT_DATE(), CURRENT_TIME(), DATE_FORMAT(date, ‘format’) FROM table | SELECT CURRENT_DATE, CURRENT_TIME, TO_CHAR(date, ‘format’) FROM table |
30 | 使用内置转换函数 | SELECT CAST(column AS type) FROM table | SELECT CAST(column AS type) FROM table |
在华为GaussDB PG模式迁移MySQL项目中,这个过程可能会涉及到数据、表结构、索引、触发器、存储过程和函数的迁移。以下是一些具体步骤:
准备工作:
- 确保MySQL和GaussDB PG版本所支持的功能是兼容的。
- 在GaussDB PG创建一个新的数据库来保存迁移过来的数据。
- 确保你的MySQL数据已经被备份。
步骤1: 数据迁移
- 使用mysqldump工具导出MySQL数据库的数据。例如:mysqldump -u [username] -p [password] [database_name] > [dump_file.sql]
- 使用pgloader工具将MySQL数据导入到GaussDB PG中。例如:pgloader mysql://[username]:[password]@localhost/[database_name] postgresql:///new_database
步骤2: 表结构迁移
- 使用MySQL 客户端等工具查看MySQL的表结构。
- 根据MySQL的表结构,在GaussDB PG中创建相应的表结构,也可以在找找其他工具是否可以批量同步生成。
- 请注意,MySQL和GaussDB PG中的数据类型可能是不一样的,所以在创建表结构时,需要做相应的类型转换。
步骤3: 索引、触发器、存储过程和函数的迁移
- 通过SHOW INDEX FROM [table_name]在MySQL中查看索引。
- 在GaussDB PG中创建相应的索引。
- 通过SHOW TRIGGERS在MySQL中查看触发器。
- 在GaussDB PG中创建相应的触发器。
- 使用SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS在MySQL中查看存储过程和函数。
- 在GaussDB PG中创建相应的存储过程和函数。
注意:这些步骤可能需要一些SQL知识,并且在迁移过程中可能会遇到一些问题,比如数据类型不匹配、编码问题等,需要根据实际情况进行调整。
6. 高斯数据库 PG模式JDBC 使用示例验证
高斯数据库(GaussDB)。对于PG模式,可以使用PostgreSQL JDBC驱动来连接。
添加PostgreSQL JDBC驱动的Maven依赖:
<dependencies><!-- PostgreSQL JDBC driver --><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.3.1</version> <!-- 这里的版本号根据实际情况更改 --></dependency>
</dependencies>
可以使用以下Java代码来连接到GaussDB并执行查询。如果是使用持久化框架,比如MyBatis 或者MP 或者JPA hbernate 等就不需要手动创建连接。只需要换一下配置中的jdbc连接串
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class Main {public static void main(String[] args) {try {// 加载驱动Class.forName("org.postgresql.Driver");// 连接数据库,注意URL的格式,包括服务器地址、端口、数据库名、SSL和其他参数String url = "jdbc:postgresql://your_server:your_port/your_database?ssl=true&"+ "sslfactory=org.postgresql.ssl.NonValidatingFactory";Connection conn = DriverManager.getConnection(url, "your_user", "your_password");// 创建一个Statement对象并执行SQL查询Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM your_table");// 处理查询结果while (rs.next()) {System.out.println(rs.getString("your_column"));}// 关闭连接rs.close();stmt.close();conn.close();} catch (Exception e) {e.printStackTrace();}}
}
6. 参考资料
- GaussDB官方文档:https://support.huaweicloud.com/intl/zh-cn/opengauss/index.html
- PostgreSQL JDBC驱动的官方文档:https://www.postgresql.org/
相关文章:
MySQL项目迁移华为GaussDB PG模式指南
文章目录 0. 前言1. 数据库模式选择(B/PG)2.驱动选择2.1. 使用postgresql驱动2.1. 使用opengaussjdbc驱动 3. 其他考虑因素4. PG模式4.1 MySQL和OpenGauss不兼容的语法处理建议4.2 语法差异 6. 高斯数据库 PG模式JDBC 使用示例验证6. 参考资料 本章节主要…...
流处理详解
【今日】 目录 一 Stream接口简介 Optional类 Collectors类 二 数据过滤 1. filter()方法 2.distinct()方法 3.limit()方法 4.skip()方法 三 数据映射 四 数据查找 1. allMatch()方法 2. anyMatch()方法 3. noneMatch()方法 4. findFirst()方法 五 数据收集…...
Qt中XML文件创建及解析
一 环境部署 QT的配置文件中添加xml选项: 二 写入xml文件 头文件:#include <QXmlStreamWriter> bool MyXML::writeToXMLFile() {QString currentTime QDateTime::currentDateTime().toString("yyyyMMddhhmmss");QString fileName &…...
【pyqt5界面化工具开发-11】界面化显示检测信息
目录 0x00 前言: 一、布局的设置 二、消息的显示 0x00 前言: 我们在10讲的基础上,需要将其输出到界面上 思路: 1、消息的传递 2、布局的设置 先考虑好消息的传递,再来完善布局 其实先完善布局,再来设置消…...
Batbot电力云平台在智能配电室中的应用
智能配电室管理系统是物联网应用中的底层应用场景,无论是新基建下的智能升级,还是双碳目标下的能源管理,都离不开智能配电运维对传统配电室的智慧改造。Batbot智慧电力(运维)云平台通过对配电室关键电力设备部署传感器…...
链表(详解)
一、链表 1.1、什么是链表 1、链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。 2、结点包括两个部分:&#x…...
最简单vue获取当前地区天气--高德开放平台实现
目录 前言 一、注册成为高德平台开发者 二、注册天气key 1.点击首页右上角打开控制台 2.创建新应用 三、vue项目使用 1.打开vue项目找到public下的index.html,如果是vue3的话直接在主目录打开index.html文件就行,主要就是打开出口文件 编辑 2.根据高德…...
大数据处理 正则表达式去除特殊字符 提取中文英文数字
在文本处理中,经常会碰到含有特殊字符的字符串。 比如用户昵称, 小红书文案,等等 都包含了大量表情特殊字符。 这些特殊字符串在ETL处理过程中,经常会引起程序报错,导致致命错误,程序崩溃;或者导…...
Python装饰器(decorators)
本文改编自以下文章:Decorators in Python 装饰器是一个很强大的工具,它允许我们很便捷地修改已有函数或者类的功能,我们可以用装饰器把另一个函数包装起来,扩展一些功能而不需要去修改这个函数代码。 预备知识 在Python中&…...
[halcon] 局部图片保存 gen_circle 和 gen_rectangle2 对比 这怕不是bug吧
背景 我想实现一个功能,获取图片中瑕疵的位置,将瑕疵周边的一块区域抠图并保存。 上代码 一开始我代码这么写的: gen_circle (Rectangle, Row[i], Column[i], 256) reduce_domain(Image,Rectangle,GrayEllipse) crop_domain(GrayEllipse,…...
解析msvcp100.dll丢失的原因及修复方法,教你快速解决的方案
msvcp100.dll文件的丢失,其实也是属于dll丢失的其中一种,因为它是dll文件,大家记住,只要是后缀是dll的文件那么它就是dll文件,只要丢失了dll文件,那么其解决的方法都是大同小异的,唯一不同的是&…...
算法:模拟思想算法
文章目录 实现原理算法思路典型例题替换所有问号提莫攻击N字型变换外观序列 总结 本篇总结的是模拟算法 实现原理 模拟算法的实现原理很简单,就是依据题意实现题意的目的即可,考察的是你能不能实现题目题意的代码能力 算法思路 没有很明显的算法思路…...
【base64】JavaScriptuniapp 将图片转为base64并展示
Base64是一种用于编码二进制数据的方法,它将二进制数据转换为文本字符串。它的主要目的是在网络传输或存储过程中,通过将二进制数据转换为可打印字符的形式进行传输 JavaScript 压缩图片 <html><body><script src"https://code.j…...
根据一个List生成另外一个List,修改其中一个,导致另外一个List也在变化
1、两个List复制 SysDic aSysDic new SysDic(); aSysDic.setDkey("1"); aSysDic.setDnote("12"); SysDic bSysDic new SysDic(); bSysDic.setDkey("2"); bSysDic.setDnote("23"); …...
Cesium 加载 geojson 文件并对文件中的属性值进行颜色设置
文章目录 需求分析解决 需求 Cesium 加载 geojson 文件并对文件中的属性值进行颜色设置 分析 在搜寻多种解决方案后,最后总结出 自己的解决方案 方案一,没看懂 var geojsonOptions {clampToGround : true //使数据贴地};var entities;promise Cesium…...
windows系统配置tcp最大连接数
打开注册表 运行->regedit HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目录下 增加一个MaxUserPort(默认值是5000,端口范围是1025至5000)MaxUserPort设置为65534(需重启服务器) 执行dos命令&…...
SQL存储过程中 SET ANSI_NULLS ON 和 SET QUOTED_IDENTIFIER ON的作用和详解
今天在写SQL Server存储过程中遇到的,做个整理归纳 USE [ABInbevDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO实际上,我们在创建存储过程的时候,这几行的代码是会自动创建出来的,那么先解释下两个标准的概念。 两个…...
C语言——程序执行的三大流程
顺序 : 从上向下, 顺序执行代码分支 : 根据条件判断, 决定执行代码的分支循环 : 让特定代码重复的执行...
二级MySQL(十)——单表查询
这里我们只在一个表内查询,用到的是较为简单的SELECT函数形式 1、查询指定的字段: 用到的数据库是之前提到的S、P、SP数据库 S表格用到的总数据: 首先我们查询所有供应商的序号和名字 这时都是独立的,没有关系,我们找…...
机器学习:无监督学习
文章目录 线性学习方法聚类ClusteringKmeansHAC 分布表示降维PCAMatrix FactorizationManifold LearningLLELaplacian Eigenmapst-SEN 线性学习方法 聚类Clustering Kmeans 随机选取K个中心,然后计算每个点与中心的距离,找最近的,然后更新中…...
计算机网络之5层网络协议
文章目录 引言一、OSI七层模型二、TCP/IP参考模型三、网络协议的概念和作用四、TCP/IP参考模型每层详细介绍1.物理层2.数据链路层1. 基本概念2.MAC地址3.ARP协议 3. 网络层1. 基本概念2.ip协议3.子网掩码 4. 传输层1. 基本概念2. 协议3. TCP(三次握手四次挥手&#…...
常见前端面试之VUE面试题汇总十一
31. Vuex 有哪几种属性? 有五种,分别是 State、 Getter、Mutation 、Action、 Module state > 基本数据(数据源存放地) getters > 从基本数据派生出来的数据 mutations > 提交更改数据的方法,同步 actions > 像一个装饰器&a…...
2021年12月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
第1题:书架 John最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。 John共有N头奶牛(1 ≤ N ≤ 20,000),每头奶牛有自己的高度Hi(1 ≤ Hi ≤ 10,000),N头奶牛的总高度为S。书架高度为B(1 ≤…...
解决 git clone 时出现Failed to connect to 127.0.0.1 port 1573问题
今天去拉一个仓库代码,往常都是一下就拉下来了,今天却报错,报错信息如下: 原因:这种情况是因为代理在git中配置的,但是本身环境就有SSL协议了,所以取消git的https或者http代理即可 方法如下&…...
日本核污染水排海,有必要囤盐吗?
据央视新闻24日报道,当地时间8月24日13时,日本福岛第一核电站启动污水排海。消息一出,全球哗然。虽然事情已经过去了几天,但是,随着这一举动,大家就乱了阵脚,恐惧者有之,辱骂者有之&…...
windows 10自带命令查看文件的哈希值
windows的powershell自带了查看文件哈希值的命令: Get-FileHash 文件名 -Algorithm MD5/SHA1/SHA256 【案例】 查看文件的MD5值: 查看文件的SHA1值: 查看文件的SHA256值:...
ssm+vue理发店会员管理系统源码和论文
ssmvue理发店会员管理系统源码和论文089 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用&a…...
Python的for循环
for语法: """ for 临时变量 in 待处理数据集(序列):循环满足条件时执行的代码 """ 例子: name "itheima is a brand of itcast" count 0 for i in name:if i "a":count 1 print(f"a的数量…...
爬虫逆向实战(二十七)--某某招标投标网站招标公告
一、数据接口分析 主页地址:某网站 1、抓包 通过抓包可以发现数据接口是page 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现,请求参数是一整个密文 请求头是否加密? 无响应是否加密? 通…...
线程和之间的通讯方式、进程之间的通讯方式、线程之间如何同步
通信是指线程之间以何种机制来交换信息,同步是指程序中用于控制不同线程间操作发生相对顺序的机制 进程由线程组成,所以进程中有的通讯机制线程中全都有 线程的通讯方式: 1. 锁机制:包括互斥锁、条件变量、读写锁 互斥锁提供了以…...
CRM线索公海如何管理?
对于销售和CRM客户管理而言,公海线索的管理极为重要,今天本文将告诉大家: 1、如何合理设置公海线索规则和流程?2、手把手教你完成公海管理系统的搭建 关于CRM的公海管理问题,需要根据企业的具体情况和销售流程来设置…...
创建web应用程序,React和Vue怎么选?
React和Vue都是创建web应用程序的绝佳选择。React得到了科技巨头和庞大的开源社区的支持,代码库可以很大程度地扩展,允许你创建企业级web应用程序。React拥有大量合格甚至优秀的开发人员粉丝,可以解决你在开发阶段可能遇到的任何问题。 毫无疑…...
【每日一题】1267. 统计参与通信的服务器
【每日一题】1267. 统计参与通信的服务器 1267. 统计参与通信的服务器题目描述解题思路 1267. 统计参与通信的服务器 题目描述 这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有…...
Python入门教程29:字符串前加r、u、b、f是什么意思?
★★★★★博文原创不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习编程小技巧,喜欢的老铁可以多多帮忙点赞,小红牛在此表示感谢。★★★★★ 关键字参数字符串前加上r、u、b和f,分别表示不同的字…...
java8 IntStream.range
简介 IntStream.range是Java 8中的一个方法,它是java.util.stream.IntStream类中的静态方法。这个方法用于生成一个顺序排列的整数流,包含起始值但不包含结束值。可以使用以下代码调用IntStream.range方法: IntStream.range(int startInclu…...
数据库集群的简单了解
Update 关于操作的日志 1.0 redo log 读一次写一次 一共2次, 不安全 注意redo log是顺写 而file是随机 所以Mysql做出类似HDFS的操作 行为日志和数据分离,但是不同的是,Mysql在内存中操作修改,如果不出事故,由内存中的行为来直接…...
CSS中如何实现文字阴影效果(text-shadow)?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现思路⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前…...
Nginx从入门到精通(超级详细)
文章目录 一、什么是Nginx1、正向代理2、反向代理3、负载均衡4、动静分离 二、centos7环境安装Nginx1、安装依赖2、下载安装包3、安装4、启动5、停止 三、Nginx核心基础知识1、nginx核心目录2、常用命令3、默认配置文件讲解4、Nginx虚拟主机-搭建前端静态服务器5、使用nignx搭建…...
为何反射探针关闭Mipmap后变成了白图
1)为何反射探针关闭Mipmap后变成了白图 2)2021.3 Android从AssetBundle中加载视频播放失败问题 3)SBP是否可以解决打包时FBX等模型文件中额外的GameObject 4)Addressables加载已打包过的Prefab后Mono脚本丢失 这是第349篇UWA技术知…...
成都睿趣科技:抖音开网店前期的流程是什么
随着互联网的快速发展,电子商务成为了商业领域中的一大利器,而在电商领域中,抖音作为一个强大的平台,也吸引了众多商家的目光。然而,要在抖音上开设一家成功的网店,并不是一件简单的事情,需要经…...
机房安全之道:构筑坚固的网络防线
引言: 在数字化时代,机房成为了许多组织和企业的核心基础设施,承载着重要的数据和应用。然而,随着网络攻击日益猖獗,机房的安全性显得尤为重要。本文将深入探讨如何构建坚固的网络防线,保护机房免受攻击的方…...
使用GoLand进行远程调试
对部署进行配置 在此配置远程服务器地址,映射,是否自动上传(更新)等 选择SFTP类型 选择上传 另外给自动上传选项打钩 此时在本地修改某个文件,远程机器相应目录的文件,也会被同步修改 对远程调试进行配置 远程机器需要安装delve 而…...
C++通过JNI调用JAVA方法返回ArrayList对象
运行效果: JAVA实现: 获取系统已安装应用列表并返回List<String>对象 //使用系统API获取安装包列表public List<String> getAppList(MainActivity act) {List<String> packages = new ArrayList<String>();try {//取包信息列表List<PackageInf…...
.netcore grpc截止时间和取消详解
一、截止时间概述 截止时间功能让 gRPC 客户端可以指定等待调用完成的时间。 超过截止时间时,将取消调用。 设定一个截止时间非常重要,因为它将提供调用可运行的最长时间。它能阻止异常运行的服务持续运行并耗尽服务器资源。截止时间对于构建可靠应用非…...
React组件间数据传递(弹框和高阶组件(HOC)特性实现)
前言 在现代前端开发中,React 已经成为了最受欢迎的 JavaScript 库之一。而在复杂的应用中,不同组件之间的数据传递问题显得尤为关键。在本文中,我们将探讨一种高效的方法,即如何利用弹框和高阶组件特性来实现 React 组件间的数据…...
只考一门数据结构,计算机学硕复录比1:1的山东双非学校考情分析
青岛理工大学 考研难度(☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1420字,预计阅读:3分钟 2023考情概况 青岛理工…...
SpringMVC之异常处理器
文章目录 前言一、基于配置的异常处理二、基于注解的异常处理总结 前言 SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver。 HandlerExceptionResolver接口的实现类有:DefaultHandlerExceptionResolver&#x…...
【数据结构与算法篇】手撕八大排序算法之快排的非递归实现及递归版本优化(三路划分)
👻内容专栏: 《数据结构与算法篇》 🐨本文概括: 利用数据结构栈(Stack)来模拟递归,实现快排的非递归版本;递归版本测试OJ题时,有大量重复元素样例不能通过,导致性能下降࿰…...
docker network
docker network create <network>docker network connect <network> <container>docker network inspect <network>使用这个地址作为host即可 TODO:添加docker-compose...
回归预测 | MATLAB实现DBN-ELM深度置信网络结合极限学习机多输入单输出回归预测
回归预测 | MATLAB实现DBN-ELM深度置信网络结合极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现DBN-ELM深度置信网络结合极限学习机多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现DBN-ELM深度置信网络结合极限学习…...