崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB

前言

首届YashanDB「迁移体验官」开放后,陆续收到「体验官」们的投稿,小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB》(作者:小草),满满干货,不要错过!

号外!新的征文活动已开启,点击此处或戳一戳下方图片即可跳转活动链接,最高可获千元大奖!

一、背景

我司主要软件生态数据库使用的是Oracle,国产数据库中崖山兼容Oracle做的比较好。在国产化替换进程中崖山无疑是首选,因为替换的研发和运维成本相对较低。为了提前了解国产数据库与Oracle的兼容适配情况,测试并研究生产应用的可能性,特意关注国产化数据库的最新动态。通过测试国产数据库及相关生态工具验证其可行性。本文主要介绍如何通过崖山YMP异构迁移工具将Oracle数据库迁移到YashanDB数据库。

二、YMP简介

2.1概述

崖山迁移平台(YashanDB Migration Platform,YMP)是YashanDB提供的数据库迁移产品,支持异构RDBMS与YashanDB之间进行迁移评估、离线迁移、数据校验的能力。YMP提供可视化服务,用户只需通过简单的界面操作,即可完成从评估到迁移整个流程的执行与监控,实现低门槛、低成本、高效率的异构数据库迁移。

2.2产品功能

2.2.1 迁移评估

  • 提前自动评估元数据迁移代价及可行性

  • 预估数据迁移时间、评估风险及可行性

  • 在线/离线评估,统计并生成评估报告

  • 一站式完成数据库迁移方案设计,支撑自动化迁移

2.2.2 元数据迁移

  • 自动生成DDL语法

  • PL/SQL一键自动转换

  • 支持源库自动抽取或手工导入

  • 提升迁移效率,降低人力投入成本

2.2.3 数据迁移

  • 异构数据库元数据自动迁移,全量/增量

  • 支持传统离线方式,在线直连不停机方式

  • 支持元数据兼容映射

  • 全库/单表/批量/对象级灵活任务管理和调度

  • 并行高速迁移调度

2.2.4 数据校验

  • 支持对象校验/数据校验/全量校检

  • 数据支持统计校验、抽样校验和精确校验

  • 快速准确给出校验结果,确保迁移结果正确性和可靠性

  • 可自动校检/实时校检/随时校检

2.3产品架构

2.4产品规格

2.4.1 数据库版本支持

2.4.2 数据类型支持

三、本次体验环境说明

四、YMP部署

4.1安装前准备

4.1.1 操作系统参数调整

# 查看最大用户线程数 # ulimit -u# 执行如下命令使最大用户线程数临时生效,重启后无效 # ulimit -u 65536# 执行执行如下命令将最大用户线程数写入/etc/security/limits.conf文件,重启后参数永久生效
# echo "
# * soft nproc 65536
# * hard nproc 65536 # " >> /etc/security/limits.conf#使参数立即生效 # sysctl -p

4.1.2 防火墙设置

如下为YMP默认使用端口

我们只需要放行8090管理平台web访问端口即可。

查看防火墙放行情况:

# firewall-cmd --zone=public --list-ports

防火墙放行8090端口:

# 添加(–permanent 永久生效,没有此参数重启后失效) # firewall-cmd --zone=public --add-port=8090/tcp --permanent# 重新载入 # firewall-cmd --reload# 查看 # firewall-cmd --zone=public --query-port=8090/tcp如需删除请使用如下命令:# 删除已添加的端口 # firewall-cmd --zone=public --remove-port=8090/tcp --permanent

4.1.3 创建YMP部署用户

# 新建YMP用户
# useradd -d /home/ymp -m ymp # passwd ymp

4.1.4 JDK环境准备

YMP仅支持在JDK8或JDK11的环境下安装。

# 以JDK安装路径为/usr/tools/jdk8为例 # vi /etc/profile
# 在文件结尾添加如下 #java_8u221
export JAVA_HOME=/usr/local/java/jdk1.8.0_221
export MAVEN_HOME=/usr/local/maven/apache-maven-3.9.6
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib
# 重新载入配置文件 # source /etc/profile
# 安装成功后查看JDK版本信息 # java -version

4.1.5 libaio环境准备

YMP运行需要libaio动态库。

# 查看是否已安装libaio动态库
# rpm -qa | grep libaio# 若未有版本信息打印,安装libaio
# yum install -y libaio

4.1.6 OCI环境准备

如需要使用Oracle到YashanDB的数据迁移功能,需进行OCI环境安装。

准备OCI环境需从Oracle官网下载OCI客户端并依据官网所列步骤进行安装。

(https://www.oracle.com/cn/database/technologies/instant-client/linux-x86-64-downloads.html)

YMP现仅支持OCI Version 19.19.0.0.0及以上版本。建议下载和安装的版本信息如下:

  • x86平台使用:instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip

  • arm平台使用:instantclient-basic-linux.arm64-19.10.0.0.0dbru-2.zip

上传安装包至YMP用户/home/ymp/路径。

# 修改安装包所属用户及用户组为ymp用户 # chown ymp:ymp instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip# 从root用户切换至ymp用户 # su - ymp# 切换至安装路径 $ cd /home/ymp# 解压OCI安装包 $ unzip instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip

4.1.7 YashanDB环境准备

使用默认内置库时,本步骤可省略。(推荐使用内置库,比较省事)

使用外部内置库时:

  • 如需一个全新的YashanDB单机环境,参考YashanDB官网文档进行安装部署。

  • 如为一个已有的YashanDB单机环境,则需由DBA在该环境中执行如下脚本:

–创建一个ymp用户(以YMP_DEFAULT为例)并为其授权
create user YMP_DEFAULT IDENTIFIED BY ymppw602 DEFAULT TABLESPACE users;
GRANT ALL PRIVILEGES TO YMP_DEFAULT; GRANT DBA TO YMP_DEFAULT;

4.1.8 软件包准备

下载YMP及YashanDB安装包。

yashan-migrate-platform-v23.2.1.0-linux-x86-64.zip

yashandb-personal-23.2.1.100-linux-x86_64.tar.gz

上传安装包至YMP用户/home/ymp/路径。

#修改安装包所属用户及用户组为ymp用户 
# chown ymp:ymp yashandb-personal-23.2.1.100-linux-x86_64.tar.gz
# chown ymp:ymp yashan-migrate-platform-v23.2.1.0-linux-x86-64.zip

4.1.9 客户端浏览器

YMP支持浏览器Google Chrome、Microsoft Edge和Firefox,建议使用当前较新的版本。

4.2安装

4.2.1 解压安装包

# 从root用户切换至ymp用户 # su - ymp# 切换至YMP安装目录
$ cd /home/ymp/ $ unzip yashan-migrate-platform-v23.2.1.0-linux-x86-64.zip

4.2.2 安装参数调整

依据实际需要对默认内置库安装及YMP启动参数进行调整。

$ vi /home/ymp/yashan-migrate-platform/conf/db.properties默认内置库安装配置文件# db.propertiesYASDB_PASSWORD=3uplbtbnyZ5XFRtpg5F5JQ== # 默认内置库sys用户默认密码密文 YYASDB_PASSWORD=ymppw602.YASDB_PORT=8091
YASDB_CHARACTER_SET=UTF8 ## character_set optional: UTF8, ASCII, ISO88591, GBKYMP默认配置 $ vi /home/ymp/yashan-migrate-platform/conf/application.properties# YMP服务端口 server.port=8090# 用户登录后空闲过期时间,单位秒(s),默认15分钟
shiro.session.timeout=900
# YMP使用的最大堆内存,单位: GB
ymp_memory=4
# YMP使用的堆外内存,单位: GB ymp_direct_memory=2#YMP业务数据库=====
# YMP业务数据库连接信息
spring.datasource.url=jdbc:yasdb://127.0.0.1:1688/yashandb
spring.datasource.username=YMP_DEFAULT
spring.datasource.password=ymppw602
spring.datasource.largePoolSize=64M
spring.datasource.cursorPoolSize=64M
# 默认内置库表类型,默认HEAP,可选HEAP,TAC,LSC
spring.datasource.defaultTableType=HEAP
spring.datasource.openCursors=3000
spring.datasource.sharePoolSize=2G
spring.datasource.dateFormat=yyyy-mm-dd hh24:mi:ss spring.datasource.ddlLockTimeout=2#评估=====# YMP的最大并行任务数
task.parallel.max-num=500
# 预计数据迁移速度,KB/s。修改会影响评估结果预计迁移时间的大小
commons.dataMigrateSpeed=51200
# 预计对象迁移速度,number/s。修改会影响评估结果预计迁移时间的大小
commons.objMigrateSpeed=200
# 评估任务单个会话获取DDL的数量,如果Oracle性能较差,则需要降低该值
assessment.ddlCount=50
# 评估任务最多同时拥有的会话数,如果Oracle性能较差,则需要降低该值
assessment.maxThreadCount=20
# 内置库表类型是否为LSC,默认为false
isLscTable=false
# 拦截的Oracle数据源db/schema黑名单
schemaBlackList.oracle=ANONYMOUS,APEX_030200,APEX_PUBLIC_USER,APPQOSSYS,BI,CTXSYS,DBSNMP,DIP,EXFSYS,FLOWS_FILES,HR,IX,MDDATA,MDSYS,MGMT_VIEW,OE,OLAPSYS,ORACLE_OCM,ORDDATA,ORDPLUGINS,ORDSYS,OUTLN,OWBSYS,OWBSYS_AUDIT,PM,SCOTT,SH,SI_INFORMTN_SCHEMA,SPATIAL_CSW_ADMIN_USR,SPATIAL_WFS_ADMIN_USR,SYS,SYSMAN,SYSTEM,WMSYS,XDB,XS$NULL
# 拦截的MySQL数据源db/schema黑名单
schemaBlackList.mysql=information_schema,mysql,performance_schema,sys
# 拦截的dm数据源db/schema黑名单 schemaBlackList.dm=SYS,SYSDBA,SYSSSO,SYSAUDITOR,CTISYS#迁移=====# 元数据迁移过程中源端、目标端查询视图连接数。在元数据迁移过程中会有分批量的查询的动作, 需要开启多个查询连接并行查询。该参数配置元数据迁移的源端、目标端查询的并行线程数,决定了对数据库的查询最大连接数,不设置默认20
migration.parallel.query=20
# 元数据迁移过程中目标端执行创建连接数。在元数据迁移过程中会并行把对象在目标端的执行,以提升迁移效率。该参数配置元数据迁移的目标端DDL执行的并行线程数,决定了连接数据库的执行最大连接数,不设置默认20。migration.parallel.query和migration.parallel.execute的连接总和,是最终迁移过程中所有的目标端数据库连接数。
migration.parallel.execute=20
# 创建索引是否使用并行参数,true/TRUE:使用,false/FALSE:不使用
migration.parallel.createIndexUseParallel=true
# 索引创建的并行度,需要考虑migration.parallel.execute。例:migration.parallel.execute:10,migration.parallel.index: 5,表示,同时10个连接在并行建索引,每个索引的并行度是5(CREATE INDEX XXX PARALLEL 5)。不填默认CPU核数。
migration.parallel.index=5
# 数据迁移前是否将表设为nologging,默认为false
setNoLogging=false
# 导出oracle时使用的导出方式,支持 [dts, jdbc] 两种方式
export.oracle.tool=dts
# 导出时每个csv文件的行数
export.csv.exportRowsEveryFile=2000000
# 迁移成功时候是否删除csv文件
export.csv.isRemoveCsvFileInSuccess=true
# csv文件存储路径包含对schema和table的拼接,schema名或table名中包含以上字符时,将会被替换,以避免被操作系统识别错误导致迁移失败;不过这可能会使某些表(比如AA$与AA.)在替换后使用的csv文件存储路径相同,导致迁移失败(No such file or directory),可以通过重新迁移失败表来解决
export.csv.path.replacement.from=\ /’."*$
/dev/sda4 926G 36G 891G 4% /
# YMP服务端口 server.port=8090# 用户登录后空闲过期时间,单位秒(s),默认15分钟
shiro.session.timeout=900
# YMP使用的最大堆内存,单位: GB
ymp_memory=4
# YMP使用的堆外内存,单位: GB ymp_direct_memory=2#YMP业务数据库=====
# YMP业务数据库连接信息
spring.datasource.url=jdbc:yasdb://172.16.60.219:1688/yashandb
spring.datasource.username=YMP_DEFAULT
spring.datasource.password=ymppw602
spring.datasource.largePoolSize=64M
spring.datasource.cursorPoolSize=64M
# 默认内置库表类型,默认HEAP,可选HEAP,TAC,LSC
spring.datasource.defaultTableType=HEAP
spring.datasource.openCursors=3000
spring.datasource.sharePoolSize=2G
spring.datasource.dateFormat=yyyy-mm-dd hh24:mi:ss spring.datasource.ddlLockTimeout=2#评估=====# YMP的最大并行任务数
task.parallel.max-num=500
# 预计数据迁移速度,KB/s。修改会影响评估结果预计迁移时间的大小
commons.dataMigrateSpeed=51200
# 预计对象迁移速度,number/s。修改会影响评估结果预计迁移时间的大小
commons.objMigrateSpeed=200
# 评估任务单个会话获取DDL的数量,如果Oracle性能较差,则需要降低该值
assessment.ddlCount=50
# 评估任务最多同时拥有的会话数,如果Oracle性能较差,则需要降低该值
assessment.maxThreadCount=20
# 内置库表类型是否为LSC,默认为false
isLscTable=false
# 拦截的Oracle数据源db/schema黑名单
# 拦截的MySQL数据源db/schema黑名单
schemaBlackList.mysql=information_schema,mysql,performance_schema,sys
# 拦截的dm数据源db/schema黑名单 schemaBlackList.dm=SYS,SYSDBA,SYSSSO,SYSAUDITOR,CTISYS#迁移=====# 元数据迁移过程中源端、目标端查询视图连接数。在元数据迁移过程中会有分批量的查询的动作, 需要开启多个查询连接并行查询。该参数配置元数据迁移的源端、目标端查询的并行线程数,决定了对数据库的查询最大连接数,不设置默认20
migration.parallel.query=20
# 元数据迁移过程中目标端执行创建连接数。在元数据迁移过程中会并行把对象在目标端的执行,以提升迁移效率。该参数配置元数据迁移的目标端DDL执行的并行线程数,决定了连接数据库的执行最大连接数,不设置默认20。migration.parallel.query和migration.parallel.execute的连接总和,是最终迁移过程中所有的目标端数据库连接数。
migration.parallel.execute=20
# 创建索引是否使用并行参数,true/TRUE:使用,false/FALSE:不使用
migration.parallel.createIndexUseParallel=true
# 索引创建的并行度,需要考虑migration.parallel.execute。例:migration.parallel.execute:10,migration.parallel.index: 5,表示,同时10个连接在并行建索引,每个索引的并行度是5(CREATE INDEX XXX PARALLEL 5)。不填默认CPU核数。
migration.parallel.index=5
# 数据迁移前是否将表设为nologging,默认为false
setNoLogging=false
# 导出oracle时使用的导出方式,支持 [dts, jdbc] 两种方式
export.oracle.tool=dts
# 导出时每个csv文件的行数
export.csv.exportRowsEveryFile=2000000
# 迁移成功时候是否删除csv文件
export.csv.isRemoveCsvFileInSuccess=true
# csv文件存储路径包含对schema和table的拼接,schema名或table名中包含以上字符时,将会被替换,以避免被操作系统识别错误导致迁移失败;不过这可能会使某些表(比如AA$与AA.)在替换后使用的csv文件存储路径相同,导致迁移失败(No such file or directory),可以通过重新迁移失败表来解决
export.csv.path.replacement.from=\ /’."*$
# 发生csv文件存储路径字符替换时(详见export.csv.path.replacement.from),指定替换的目标字符或字符串
export.csv.path.replacement.to=_
# 导出时大表拆分的个数
export.table.splitCount=5
# 导出时触发大表拆分的行数
export.table.splitConditionCount=10000000
# 导出时触发大表拆分的表大小(G)
export.table.splitConditionSize=5
# 导出时带lob字段大表拆分的个数
export.lobTable.splitCount=5
# 导出时触发带lob字段大表拆分的行数
export.lobTable.splitConditionCount=1000000
# 导出时触发带lob字段大表拆分的表大小(G)
export.lobTable.splitConditionSize=5
# 使用jdbc导出时每个csv文件的最大行数
export.jdbc.thresholdForSplittingFileLines=5000000
# 使用jdbc导出时每个csv文件的最大大小(M)
export.jdbc.thresholdForSplittingFileSize=3072
# #yasldr More References: http://doc.yashandb.com/yashandb/22.2/zh/%E5%B7%A5%E5%85%B7%E6%89%8B%E5%86%8C/yasldr/yasldr%E4%BD%BF%E7%94%A8%E6%8C%87%E5%AF%BC.html
# yasldr导入时的并行度
import.degree_of_parallelism=16
# yasldr导入时每批次的CSV数据行数
import.batch_size=2048
# yasldr导入方式,包括BASIC方式和BATCH方式
import.mode=BATCH
import.SENDERS=7 import.CSV_CHUNK_SIZE=128#校验=====# 校验任务限制每个数据源支持的最大连接数
checkTask.datasource.max-connection=500
# 校验任务获取连接超时时间,单位:ms
checkTask.datasource.connection-timeout=10000
# 校验任务获取的连接池中维持的最小连接数
checkTask.datasource.minimum-idle=0
# 校验任务的最大并行任务数
checkTask.task.parallel.max-num=20
# 校验任务的子任务的最大并行任务数,即一个任务多少个表在同时校验
checkTask.subTask.parallel.max-num=200
# 校验任务的全量校验对FLOAT数据类型的校验精度
checkTask.checkFloatPrecision=6
# 校验任务的数据类型映射有一边是char数据类型就移除数据右侧空格进行对比 checkTask.isRemoveCharBlank=true

4.2.3 执行安装

我这里采用的是安装默认内置库和OCI客户端并启动YMP

更改内置库SYS用户默认密码(可选)

进入安装目录执行更改密码命令,以yasdb_123为例:

$ cd /home/ymp/yashan-migrate-platform/ $ sh bin/ymp.sh password --sys yasdb_123# 进入安装目录执行安装命令
$ cd /home/ymp/yashan-migrate-platform/ $ sh bin/ymp.sh install --db /home/ymp/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz --path /home/ymp/instantclient_19_19

4.2.4 查看运行状态

$ cd /home/ymp/yashan-migrate-platform/ [ymp@localhost yashan-migrate-platform]$ sh bin/ymp.sh statusYMP is running, pid is 240743.
Built-in database is used, pid is 240616. [ymp@localhost yashan-migrate-platform]$

4.2.5 查看版本

[ymp@localhost yashan-migrate-platform]$ sh bin/ymp.sh -v
Yashan-migrate-platform version: Release v23.2.1.0
YashanDB SQL Personal Edition Release 23.2.1.100 x86_64
YashanDB Loader Personal Edition Release 23.2.1.100 x86_64 2d13f1d [ymp@localhost yashan-migrate-platform]$

4.2.6 访问YMP

访问方式:http://IP:PORT/,PORT默认8090,初始账户名和密码是(admin/admin)。首次登录会提示修改密码。

4.3卸载

$ cd /home/ymp/yashan-migrate-platform/ $ sh bin/ymp.sh uninstall# 使用uninstall功能时可携带-f参数,强制清理环境 $ sh bin/ymp.sh uninstall -f# 验证
$ ps -ef | grep yas ymp 20840 6322 0 10:02 pts/14 00:00:00 grep --color=auto yas
  • 卸载YMP时,会删除默认内置库(自定义内置库不受影响)并清空db和yashan_client文件夹,若想替换数据库版本,请在卸载后重新部署。

  • 强制清理功能会使用kill -9强制清理当前用户下YMP启动的所有进程,并删除内置库及yasldr文件夹下所有内容,请谨慎使用,建议在专用的YMP用户下使用。

  • 最后还需要手动删除~/.bashrc中与YashanDB有关的环境变量。

4.4启动与停止

4.4.1 启动YMP

默认内置库启动YMP:

 $ cd /home/ymp/yashan-migrate-platform/$ sh bin/ymp.sh start

自定义内置库启动YMP:

 $ cd /home/ymp/yashan-migrate-platform/$ sh bin/ymp.sh startnodb

4.4.2 停止YMP

默认内置库停止YMP:

 $ cd /home/ymp/yashan-migrate-platform/$ sh bin/ymp.sh stop

自定义内置库停止YMP:

 $ cd /home/ymp/yashan-migrate-platform/$ sh bin/ymp.sh stopnodb

4.4.3 重启YMP

默认内置库重启YMP:

 $ cd /home/ymp/yashan-migrate-platform/$ sh bin/ymp.sh restart

自定义内置库重启YMP:

 $ cd /home/ymp/yashan-migrate-platform/$ sh bin/ymp.sh restartnodb

Caution:

在任务运行过程中停止或重启YMP会造成当前阶段任务运行失败,需重新开始当前阶段任务。

五、数据迁移

5.1创建数据源

5.1.1 创建Oracle数据库数据源并测试

5.1.2 创建YashanDB数据库数据源并测试

5.2创建迁移任务

5.3评估迁移

评估完成结果如下:

5.4迁移配置

评估迁移完毕后点击下一步迁移配置:

评估兼容非百分百的话需要在对象浏览里将所有不兼容数据进行过滤,选择忽略,然后点击重新刷新报告。

迁移对象可以根据实际情况进行选择。

点击下一步开始数据迁移。

5.5开始迁移

迁移完毕后结果如下:

可以发现有一部分数据没有迁移成功。

5.6一致性校验

六、遇到的问题与解决过程

6.1遇到的问题

安装过程中使用了外置库,然后外置库和目标业务库是同一套数据,导致各种冲突现象,具体如下:

1.评估缓慢,不完全兼容的情况下忽略不兼容对象,刷下兼容报告时会报如下错误。

2.目标库数据源老提示账户锁定,反复解锁,反复锁定。

3.过段时间提示用户名或密码无效,新创建用户后进行了dba授权,过一会会被系统自动删除。

6.2解决过程

1.将YMP单独部署在一台服务器上,使用默认内置库。

2.修改默认内置库为外置库,外置库不能和目标迁移数据库是一个实例。

在此特别感谢崖山官方的李梦莹大拿,凌晨0:30帮我把问题解决了


小崖有话说🤩
历时一个月的【迁移体验官】活动已圆满收官~小伙伴们提到的大部分问题已得到了修复,最新的版本崖山迁移平台YMP已挂网。(下载链接👉https://download.yashandb.com/download)
此外,新的征文活动已开启,可点击此处进行跳转,欢迎小伙伴们体验后继续提出宝贵的反馈和建议~

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

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

相关文章

让你的程序有记忆功能。

目录 环境 代码 环境 大语言模型: gpt-40-mini Mem0: Empower your AI applications with long-term memory and personalization OpenAPI-Key: Mem0-Key: 代码 import osfrom dotenv import load_dotenv from openai import OpenAI from m…

网络安全领域五大注入攻击类型介绍

在网络安全领域,注入攻击是一种常见的攻击方式,攻击者通过向应用程序发送恶意数据来操控应用程序的行为。以下跟随博主通过具体样例一起来掌握以下五种知名的注入攻击类型。 1. SQL注入(SQL Injection) 1.1. 概述 SQL注入是最常见…

OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式授权码模式

文章目录 认证的具体实现环境的搭建基础版授权服务搭建引入依赖创建数据表yml配置配置SpringSecurity定义认证授权的配置类授权服务器存储客户端信息修改授权服务配置,支持密码模式 基础版授权服务测试授权码模式测试密码模式测试**测试校验token接口** 整合JWT使用…

内网对抗-隧道技术篇防火墙组策略FRPNPSChiselSocks代理端口映射C2上线

知识点: 1、隧道技术篇-传输层-工具项目-Frp&Nps&Chisel 2、隧道技术篇-传输层-端口转发&Socks建立&C2上线Frp Frp是专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS等多种协议。可以将内网服务以安全、便捷的方式通过…

探索算法系列 - 滑动窗口

目录 长度最小的子数组(原题链接) 无重复字符的最长子串(原题链接) 最大连续1的个数 III(原题链接) 将 x 减到 0 的最小操作数(原题链接) 水果成篮(原题链接&#x…

首个卫星影像全球一张图发布

数据是GIS的血液! 我们在《如何加载卫星影像全国一张图》一文中,为你分享过加载卫星影像全国一张图的方法。 现在用该方法,你已经可以加载卫星影像全球一张图了! 如何查看全球卫星影像 为了一睹为快,你可以打开以下…

14 集合运算符和矩阵乘法运算符@

集合的交集、并集、对称差集等运算借助于位运算符来实现,而差集则使用减号运算符实现。 print({1, 2, 3} | {3, 4, 5}) # 并集,自动去除重复元素 print({1, 2, 3} & {3, 4, 5}) # 交集 print({1, 2, 3} - {3, 4, 5}) # 差集 print({1, 2, 4, 6, …

Pandas Series对象的创建和基本使用(Pandas Series Object)

pandas是Python的一个第三方数据分析库,其集成了大量的数据模型和分析工具,可以方便的处理和分析各类数据。Pandas中主要对象类型有Series,DataFrame和Index。本文介绍Series对象的创建和基本用法。 文章目录 一、Series对象的创建1.1 通过序…

使用netty编写syslog日志接收服务端

使用netty编写syslog日志接收服务端 1.添加netty依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.72.Final</version> <!-- 版本号可能需要根据实际情况更新 --></dependenc…

Docker Desktop安装(通俗易懂)

1、官网 https://www.docker.com/products/docker-desktop/ 2、阿里云镜像 docker-toolbox-windows-docker-for-windows安装包下载_开源镜像站-阿里云 1. 双击安装文件勾选选项 意思就是&#xff1a; Use WSL 2 instead of Hyper-V (recommended) : 启用虚拟化&#xff0c;…

重生之“我打数据结构,真的假的?”--4.二叉树

1.对称二叉树 . - 力扣&#xff08;LeetCode&#xff09; 思路 &#xff1a; 1.设置两个队列l&#xff0c;r&#xff0c;先将root的左节点入l&#xff0c;右节点入r。 2.分别出队&#xff0c;若出队元素相同 Queuepush(&l, front->left); Queuepush(&l, front->…

调度器——DolphinScheduler讲解及安装教程

调度器——DolphinScheduler讲解及安装教程 一&#xff1a;基本讲解 Dolphin Scheduler 1、开源的分布式任务调度系统 2、支持多种任务类型&#xff0c;包括Shell、Spark、Hive等 3、灵活的任务调度功能和友好的Web界面&#xff0c;方便管理和监控任务的执行情况 架构 操作系…

idea 自动生成pojo类

找到这个View>Tool Windows>Database配置数据库 配置好后刷新&#xff0c;查看是否连接上表 然后找到 点击后选择你将要生成的pojo需要保存到哪个文件&#xff0c;然后再次点击&#xff0c;就生成好了&#xff0c;然后自己稍作修改即可使用该pojo类了

Vue3可媲美Element Plus Tree组件实战之移除节点

Element Plus Tree自定义节点内容示例中介绍了移除节点的用法&#xff0c;个人觉得作为提供给用户API&#xff0c;应该遵循迪米特法则&#xff0c;把功能实现的细节封装在组件内部&#xff0c;而提供给用户最简单的操作方式&#xff0c;同时在此基础上支持用户的扩展。 因此&a…

【python学习】思考-如何在PyCharm中编写一个简单的Flask应用示例以及如何用cProfile来对Python代码进行性能分析

引言 Python中有两个流行的Web框架&#xff1a;Django和Flask。Django是一个高级的Python Web框架&#xff0c;它鼓励快速开发和干净、实用的设计&#xff1b;Flask是一个轻量级的Web应用框架&#xff0c;适用于小型到大型应用。以下是使用Flask创建一个简单应用的基本步骤cPro…

从工业到航空:旋转花键跨行业的多样用途解析!

旋转花键是一种新型的高效传动元件&#xff0c;主要由内花键和外花键组成。内花键和外花键之间放置着一排排滚珠&#xff0c;当内花键和外花键相对旋转时&#xff0c;滚珠在内、外花键之间滚动&#xff0c;从而实现动力的传递。 旋转花键的基本功能主要是用于连接轴和套的旋转部…

mmdetection训练后评估指标,验证Loss

项目场景&#xff1a; 对mmdetection框架下训练好的log.json文件进行评估。 问题描述 使用框架底下自带的评估文件&#xff0c;不能对loss进行评估。也就是文件&#xff1a;tools/analysis_tools/analyze_logs.py 解决方案&#xff1a; 自己做了评估loss的代码&#xff0c;目…

力扣94题(java语言)

题目 思路 使用一个栈来模拟递归的过程&#xff0c;以非递归的方式完成中序遍历(使用栈可以避免递归调用的空间消耗)。 遍历顺序步骤&#xff1a; 遍历左子树访问根节点遍历右子树 package algorithm_leetcode;import java.util.ArrayList; import java.util.List; import…

重磅发布:OpenAI宣布推出AI驱动的搜索引擎SearchGPT,将与Google和Perplexity展开竞争|TodayAI

OpenAI宣布推出其备受期待的AI驱动搜索引擎SearchGPT。该搜索引擎能够实时访问互联网信息&#xff0c;并将作为原型在有限范围内发布&#xff0c;计划最终将其功能整合到ChatGPT中。 SearchGPT的功能特点 SearchGPT是一个具有实时互联网信息访问能力的AI驱动搜索引擎。它的界面…

轨道式智能巡检机器人,助力综合管廊安全运维

1 引言 当前城市综合管廊建设已经成为世界范围内的发展趋势&#xff0c;2017年5月住建部、发改委联合发布《全国城市市政基础设施建设“十三五”规划》&#xff0c;截至2017年4月底国内地下综合管廊试点项目已开工建设687 km&#xff0c;建成廊体260 km&#xff0c;完成投资40…