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

DM 的断点续传测试

作者: 大鱼海棠 原文来源: https://tidb.net/blog/4540ae34

一、概述

DM有all、full、incremental三种数据迁移同步方式(task-mode),在all同步模式下,因一些特殊情况,需要变更上游MySQL的数据源IP,一般有如下几种处理方式:

  1. 放弃已同步的数据,重新用all模式同步(适合数据量比较小的场景,操作简单)
  2. 记录同步到的位点信息,停掉task和数据源,将同步模式改为incremental并在task配置中指定MySQL示例的位点信息重新拉起任务

task中meta配置下游数据库的 checkpoint 不存在时 binlog 迁移开始的位置; 如果 checkpoint 存在,则以 checkpoint 为准。如果 meta 项和下游数据库的 checkpoint 都不存在,则从上游当前最新的 binlog 位置开始迁移

  1. 不修改task-mode的情况下,基于检查点断点续传, 本文主要基于该场景测试

二、MySQL环境准备

mysql

set global validate_password_mixed_case_count=0;
set global validate_password_policy='LOW'; 
set global validate_password_number_count=0; 
set global validate_password_special_char_count=0;
set global validate_password_length=4;
alter user root@'localhost' identified by 'dm_test'; 

配置文件

[mysqld]                                                                                                                                                                        
datadir=/mysql57/data                                                                                                                                                           
socket=/var/lib/mysql/mysql.sock                                                                                                                                                
symbolic-links=0                                                                                                                                                                
binlog_format=ROW                                                                                                                                                               
log_bin=/mysql57/logbin/logbin                                                                                                                                                  
log-error=/mysql57/log/mysqld.log                                                                                                                                               
pid-file=/var/run/mysqld/mysqld.pid                                                                                                                                             
gtid_mode=ON                                                                                                                                                                    
enforce_gtid_consistency=ON  
# 主从使用不同的server_id                                                                                                                                                   
server_id=2 
# 从库开启binlog记录                                                                                                                                                                 
log-slave-updates = 1

主从搭建

reset master;
change master to master_host='172.1.1.4', master_user='root', master_password='dm_test', master_port=3306, master_auto_position=1;
start slave;
show slave status\G

三、DM任务创建

1. 创建数据源

创建数据源配置文件

[tidb@vm10-2-103-112 ~]$ cat source-01.yaml                                                                                                                                     
source-id: "mysql-01"
enable-gtid: true                                                                                                                                                           from:                                                                                                                                                                           host: "172.1.1.2"                                                                                                                                                          port: 3306                                                                                                                                                                    user: "root"                                                                                                                                                                  password: "dm_test" 

上游数据源账户所需权限

上游数据源用户所需权限:

  1. information_schem和需要同步的表的select权限
  2. reload权限
  3. REPLICATION CLIENT、REPLICATION SLAVE

创建数据源

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create ./source-01.yaml

查看创建的数据源

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 config source mysql-01

2. 创建同步任务

task配置文件准备

vim task01.yamlname: test1                      
task-mode: all                  
shard-mode: "pessimistic"       meta-schema: "dm_meta1"          
# timezone: "Asia/Shanghai"     case-sensitive: false           
online-ddl: true               
clean-dump-file: true           # 是否清理 dump 阶段产生的文件,包括 metadata 文件、建库建表 SQL 文件以及数据导入 SQL 文件
collation_compatible: "loose"   # 同步 CREATE 语句中缺省 Collation 的方式,可选 "loose" 和 "strict",默认为 "loose"。"loose" 模式不会显式补充上游缺省的 Collation,"strict" 会显式补充上游缺省的 Collation。当使用 "strict" 模式,但下游不支持上游缺省的 Collation 时,下游可能会报错。
ignore-checking-items: []       target-database:host: "172.1.1.4"port: 4000user: "dm_test"password: "dm_test"  block-allow-list:                    bw-rule-1:                         do-dbs: ["dm_test.*"]mydumpers:                           global:                            threads: 4                       chunk-filesize: 64               extra-args: "--consistency auto" loaders:                             global:                            pool-size: 16dir: "./dumped_data"import-mode: "logical"on-duplicate-logical: "replace"syncers:                             global:                            worker-count: 16                 batch: 100                       safe-mode: falsesafe-mode-duration: "60s"compact: falsemultiple-rows: false
# ----------- 实例配置 -----------
mysql-instances:-source-id: "mysql-01"block-allow-list:  "bw-rule-1"mydumper-config-name: "global"loader-config-name: "global"syncer-config-name: "global"

下游tidb同步用户所需权限:

  1. 待同步库表的SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER、INDEX权限
  2. dm元数据库表的 ALL 权限

前置检查

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 check-task ./task01.yaml

创建task

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml

查看同步状态

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test1

四、单实例更换数据源IP

验证不修改task配置,直接更换数据源IP

1. 不修改source-id

Stop 任务和数据源

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 stop-task test1 
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source stop mysql-01

仅修改数据源IP

source-id: "mysql-01"                                                                                                                                                           
enable-gtid: true                                                                                                                                                               from:                                                                                                                                                                           host: "120.1.1.115"                                                                                                                                                         port: 3306                                                                                                                                                                    user: "root"                                                                                                                                                                  password: "dm_test"

创建数据源和task

tiup dmctl:v7.1.3 --master-addr 172.16.201.4:8261 operate-source create  ./source-01.yaml
tiup dmctl:v7.1.3 --master-addr 172.16.201.4:8261 start-task ./task01.yaml 
tiup dmctl:v7.1.3 --master-addr 172.16.201.4:8261 query-status test1

验证同步无异常

不改变source-id的情况下,dm会去元数据表中找到断点,进行断点续传,不会重新dump数据

2. 修改source-id

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 stop-task test1 
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source stop mysql-01

修改数据源IP和source-id

source-id: "mysql-02"                                                                                                                                                           
enable-gtid: true                                                                                                                                                               from:                                                                                                                                                                           host: "172.1.1.2"                                                                                                                                                          port: 3306                                                                                                                                                                    user: "root"                                                                                                                                                                  password: "dm_test"

创建数据源和task

需要修改task01.yaml的数据源

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create  ./source-01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml 
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test1

验证同步无异常

修改了source-id的情况下,会触发重新dump全量数据

3. 更换IP期间新增了表

在停掉task和数据源后,模拟MySQL增加表和数据(只修改数据源IP)

mysql> create table t3(id int primary key,b int);                                                                                                                               
Query OK, 0 rows affected (0.04 sec)                                                                                                                                            mysql> insert into t3 values (1,1);                                                                                                                                             
Query OK, 1 row affected (0.01 sec)                                                                                                                                             mysql> insert into t3 values (2,1);                                                                                                                                             
Query OK, 1 row affected (0.01 sec) 

修改数据源IP后,创建task

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create  ./source-01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test1 

同步无异常,未dump全量数据

检查点分为针对单表的同步位点和数据源的同步位点,如果存在当前表的位点,则基于位点继续同步,如不存在,基于数据源位点往后同步

五、分片集群修改数据源IP

环境准备

基于单实例的环境,新增MySQL节点来测试

数据源配置

source-id: "mysql-04"                                                                                                                                                           
enable-gtid: true                                                                                                                                                               from:                                                                                                                                                                           host: "172.1.1.4"                                                                                                                                                          port: 3306                                                                                                                                                                    user: "root"                                                                                                                                                                  password: "dm_test" 

task配置

name: test2                                                                                                                                                                     
task-mode: all                                                                                                                                                                  
shard-mode: "pessimistic"                                                                                                                                                       meta-schema: "dm_meta2"                                                                                                                                                         
# timezone: "Asia/Shanghai"                                                                                                                                                     case-sensitive: false                                                                                                                                                           
online-ddl: true                                                                                                                                                                
clean-dump-file: false           # 是否清理 dump 阶段产生的文件,包括 metadata 文件、建库建表 SQL 文件以及数据导入 SQL 文件                                                     
collation_compatible: "loose"   # 同步 CREATE 语句中缺省 Collation 的方式,可选 "loose" 和 "strict",默认为 "loose"。"loose" 模式不会显式补充上游缺省的 Collation,"strict" 会显
式补充上游缺省的 Collation。当使用 "strict" 模式,但下游不支持上游缺省的 Collation 时,下游可能会报错。                                                                         
ignore-checking-items: []                                                                                                                                                       target-database:                                                                                                                                                                host: "172.1.1.4"                                                                                                                                                          port: 4000                                                                                                                                                                    user: "dm_test"                                                                                                                                                               password: "dm_test"                                                                                                                                                           block-allow-list:                                                                                                                                                               bw-rule-1:                                                                                                                                                                    do-dbs: ["dm_test"]                                                                                                                                                      mydumpers:                                                                                                                                                                      global:                                                                                                                                                                       threads: 4                                                                                                                                                                  chunk-filesize: 64                                                                                                                                                          extra-args: "--consistency auto"                                                                                                                                            loaders:                                                                                                                                                                        global:                                                                                                                                                                       pool-size: 16                                                                                                                                                               dir: "./dumped_data"                                                                                                                                                        import-mode: "logical"                                                                                                                                                      on-duplicate-logical: "replace"                                                                                                                                             syncers:                                                                                                                                                                        global:                                                                                                                                                                       worker-count: 16                                                                                                                                                            batch: 100                                                                                                                                                                  safe-mode: false                                                                                                                                                            safe-mode-duration: "60s"                                                                                                                                                   compact: false                                                                                                                                                              multiple-rows: false                                                                                                                                                        
# ----------- 实例配置 -----------                                                                                                                                              
mysql-instances:                                                                                                                                                                -                                                                                                                                                                             source-id: "mysql-04"                                                                                                                                                       block-allow-list:  "bw-rule-1"                                                                                                                                              mydumper-config-name: "global"                                                                                                                                              loader-config-name: "global"                                                                                                                                                syncer-config-name: "global"  

创建数据源和任务

tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create  ./source-02.yaml                                                                                
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml                                                                                               
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test2 

重复单实例数据源IP修改过程,验证结果与单实例一致

六、总结

断点续传来源于dm元数据信息(dm_meta库的表记录信息),主要包含以下几点

  1. task.yaml的name的值
  2. task.yaml的meta-schema是否改变
  3. 数据源配置中source-id是否改变

如有其他变更项,可结合检查点进行分析,通过检查点信息是否改变来判断是否可以断点续传

前提:

  1. 使用 query-status 命令获取当前 binlog replication 处理单元已复制到下游的 binlog 对应的 GTID sets ( syncerBinlogGtid ),记为 gtid-S

  2. 在将要切换到的 MySQL 实例上使用 SELECT @@GLOBAL.gtid_purged; 获取已经被 purged 的 binlog 对应的 GTID sets,记为 gtid-P

  3. 在将要切换到的 MySQL 实例上使用 SELECT @@GLOBAL.gtid_executed; 获取所有已经执行成功的事务对应的 GTID sets,记为 gtid-E

  4. 确保满足以下关系,否则不支持将 DM-worker 连接切换到相应的 MySQL 实例:

    1. gtid-S 包含 gtid-P gtid-P 可以为空)
    2. gtid-E 包含 gtid-S

七、附加测试

1. 测试一

数据源的配置文件默认 enable-gtid: false ,现验证同步过程中,是否可修改该参数

验证修改后同步正常,在 enable-gtid: false 情况下,检查点会同时携带position信息和gitd信息,修改后可基于位点断点续传

2. 测试二

DM配置文件 extra-args: "--consistency none" 默认值为none,none的官网解释是不做一致性保障

none模式下

2024-06-21T08:23:44.159963Z     18511 Query     SELECT @@max_allowed_packet                                                                                                     
2024-06-21T08:23:44.160052Z     18511 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T08:23:44.160149Z     18511 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ                                                                         
2024-06-21T08:23:44.160242Z     18511 Query     START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */                                                                          
2024-06-21T08:23:44.160343Z     18511 Query     SHOW MASTER STATUS                                                                                                              
2024-06-21T08:23:44.160534Z     18511 Query     SHOW SLAVE STATUS                                                                                                               
2024-06-21T08:23:44.160731Z     18511 Query     SHOW DATABASES                                                                                                                  2024-06-21T08:23:44.161956Z     18511 Query     SELECT COUNT(1) as c FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='SEQUENCE'                                                 
2024-06-21T08:23:44.171027Z     18511 Query     SHOW TABLE STATUS FROM `dm_test`                                                                                             
2024-06-21T08:23:44.174675Z     18511 Query     SHOW MASTER STATUS                                                                                                              
2024-06-21T08:23:44.174826Z     18511 Query     SHOW CREATE DATABASE `dm_test`                                                                                               
2024-06-21T08:23:44.174981Z     18511 Query     SHOW COLUMNS FROM `dm_test`.`customer`                                                                                       
2024-06-21T08:23:44.175584Z     18511 Query     SELECT `c_id`,`c_d_id`,`c_w_id`,`c_first`,`c_middle`,`c_last`,`c_street_1`,`c_street_2`,`c_city`,`c_state`,`c_zip`,`c_phone`,`c_
since`,`c_credit`,`c_credit_lim`,`c_discount`,`c_balance`,`c_ytd_payment`,`c_payment_cnt`,`c_delivery_cnt`,`c_data` FROM `dm_test`.`customer` LIMIT 1                        
2024-06-21T08:23:44.178285Z     18511 Query     SHOW CREATE TABLE `dm_test`.`customer`                                                                                       
2024-06-21T08:23:44.178529Z     18511 Query     SHOW INDEX FROM `dm_test`.`customer`                                                                                         
2024-06-21T08:23:44.178805Z     18511 Query     EXPLAIN SELECT `c_w_id` FROM `dm_test`.`customer`                                                                            
2024-06-21T08:23:44.179002Z     18511 Query     SHOW INDEX FROM `dm_test`.`customer`                                                                                         
2024-06-21T08:23:44.179269Z     18511 Query     SHOW INDEX FROM `dm_test`.`customer`                                                                                         
2024-06-21T08:23:44.179510Z     18511 Query     EXPLAIN SELECT `c_w_id` FROM `dm_test`.`customer`                                                                            
2024-06-21T08:23:44.179748Z     18511 Query     SELECT MIN(`c_w_id`),MAX(`c_w_id`) FROM `dm_test`.`customer` 2024-06-21T08:23:44.173952Z     18512 Query     SELECT @@max_allowed_packet                                                                                                     
2024-06-21T08:23:44.174104Z     18512 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T08:23:44.174281Z     18512 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ                                                                         
2024-06-21T08:23:44.174546Z     18512 Query     START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */                                                                          
2024-06-21T08:23:44.182494Z     18512 Query     SELECT `c_id`,`c_d_id`,`c_w_id`,`c_first`,`c_middle`,`c_last`,`c_street_1`,`c_street_2`,`c_city`,`c_state`,`c_zip`,`c_phone`,`c_
2024-06-21T08:23:45.888538Z     18512 Query     SELECT `d_id`,`d_w_id`,`d_name`,`d_street_1`,`d_street_2`,`d_city`,`d_state`,`d_zip`,`d_tax`,`d_ytd`,`d_next_o_id` FROM `dm_test`.`district` ORDER BY `d_w_id`,`d_id`                                                                                                                                        
2024-06-21T08:23:45.889394Z     18512 Query     SELECT `h_c_id`,`h_c_d_id`,`h_c_w_id`,`h_d_id`,`h_w_id`,`h_date`,`h_amount`,`h_data` FROM `dm_test`.`history` WHERE `h_w_id` IS NULL OR (`h_w_id` >= 1 AND `h_w_id` < 11)                                                                                                                                    
2024-06-21T08:23:46.281664Z     18512 Query     SELECT `i_id`,`i_im_id`,`i_name`,`i_price`,`i_data` FROM `dm_test`.`item` ORDER BY `i_id`                                    
2024-06-21T08:23:46.352202Z     18512 Query     SELECT `no_o_id`,`no_d_id`,`no_w_id` FROM `dm_test`.`new_order` ORDER BY `no_w_id`,`no_d_id`,`no_o_id`                         

image.png

image.png

none模式使用 SESSION RR 隔离级别 和 START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */ 来构建一致性视图,不存在非事务引擎表的时候,操作比FTWRL轻量

注意:

  1. 备份期间有DDL的话,有几率触发锁等待,原因为DM开启了两个 START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */ SESSION ,一个用来看表结构、构造导出执行计划、查看索引等;另外一个用来dump数据,如果期间有DDL,有几率出现等MDL锁的情况(图一)
  2. 不开启FTWRL的话,那么backupmeta的gtid信息有可能是不准的(show master status获取的是当前值,不受 START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */ 限制)。备份文件 metadata 记录的位点可能比 dumped data 要早,可以开启safe-mode来规避(不能完全避免),DM会自行记录两次 show master status 位点信息来判断是否进入safe-mode,以及何时退出safe-mode。

auto模式下

2024-06-21T09:31:56.773773Z     18684 Connect   root@vm10-2-103-3 on  using SSL/TLS                                                                                             
2024-06-21T09:31:56.776319Z     18684 Query     SELECT version()                                                                                                                
2024-06-21T09:31:56.776529Z     18684 Query     FLUSH TABLES WITH READ LOCK                                                                                                     
2024-06-21T09:31:56.778052Z     18684 Query     UNLOCK TABLES                                                                                                                   
2024-06-21T09:31:56.778166Z     18684 Query     SET SESSION time_zone = '+08:00'                                                                                                
2024-06-21T09:31:56.778236Z     18684 Quit                                                                                                                                      
2024-06-21T09:31:56.780010Z     18685 Connect   root@vm10-2-103-3 on  using SSL/TLS                                                                                             
2024-06-21T09:31:56.780202Z     18685 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T09:31:56.780405Z     18685 Query     FLUSH TABLES WITH READ LOCK                                                                                                     
2024-06-21T09:31:56.783146Z     18686 Connect   root@vm10-2-103-3 on  using SSL/TLS                                                                                             
2024-06-21T09:31:56.783335Z     18686 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T09:31:56.783421Z     18686 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ                                                                         
2024-06-21T09:31:56.783518Z     18686 Query     START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */                                                                          
2024-06-21T09:31:56.783611Z     18686 Query     SHOW MASTER STATUS                                                                                                              
2024-06-21T09:31:56.783755Z     18686 Query     SHOW SLAVE STATUS                                                                                                               
2024-06-21T09:31:56.786107Z     18686 Query     SHOW DATABASES                                                                                                                  
2024-06-21T09:31:56.786563Z     18686 Query     SELECT COUNT(1) as c FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='SEQUENCE'                                                 
2024-06-21T09:31:56.916141Z     18686 Query     SHOW TABLE STATUS FROM `dm_test`                                                                                             
2024-06-21T09:31:56.919220Z     18687 Connect   root@vm10-2-103-3 on  using SSL/TLS                                                                                             
2024-06-21T09:31:56.919398Z     18687 Query     SET time_zone = '+08:00'                                                                                                        
2024-06-21T09:31:56.919483Z     18687 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ                                                                         
2024-06-21T09:31:56.919570Z     18687 Query     START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */                                                                          
2024-06-21T09:31:56.919726Z     18685 Query     UNLOCK TABLES                   

相对于mysqldump少了flush table的步骤(mysqldump在执行FTWRL前会执行flush tables),直接执行了FTWRL,第一次做权限探测,第二次执行备份

结论

结合业务应用情况综合考虑,选择auto/none模式

相关文章:

DM 的断点续传测试

作者&#xff1a; 大鱼海棠 原文来源&#xff1a; https://tidb.net/blog/4540ae34 一、概述 DM有all、full、incremental三种数据迁移同步方式&#xff08;task-mode&#xff09;&#xff0c;在all同步模式下&#xff0c;因一些特殊情况&#xff0c;需要变更上游MySQL的数…...

力扣每日一题 6/30 记忆化搜索/动态规划

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 494.目标和【中等】 题目&#xff1a; 给你一个非负整数数组 nums 和一个…...

图像基础知识入门【图像概念不同图像格式】

图像基础知识入门【图像概念&不同图像格式】 最近有在处理图像转换&#xff0c;因此稍微补足了一下图像相关知识&#xff0c;特在此记录。下面汇总是我根据自己理解和网上查阅资料而来。如有错误&#xff0c;欢迎大家指正。 1 基础概念 像素/分辨率 像素(Pixel)&#xff…...

HP服务器基于SNMP-ilo4的硬件监控指标解读

监控易是一款功能全面的IT基础设施监控软件&#xff0c;它通过SNMP协议与HP服务器内置的ilo4远程管理卡进行通信&#xff0c;实现对HP服务器硬件状态的实时监控。本文将针对监控易中基于SNMP-ilo4的HP服务器硬件监控指标进行解读&#xff0c;帮助运维团队更好地理解和应用这些监…...

Android13系统导航栏添加音量加减键按钮功能

不知道为什么拿到芯片原厂发布给我们的Android13系统源码编译后&#xff0c;导航栏没有音量加减键&#xff0c;客户有反馈这个问题&#xff0c;所以特意加了一下&#xff0c;修改记录如下&#xff1a;frameworks/base目录下 commit 9cb2244d61a237cab03c540bfcca6e4fac2bea2c …...

普及GIS知识,推动产业发展

915 GIS节&#xff1a;普及GIS知识&#xff0c;推动产业发展 自2008年起&#xff0c;每年的9月15日被定为“GIS节”&#xff0c;这一特殊的节日由超图首次发起倡议&#xff0c;旨在打造一个普及和传播GIS&#xff08;地理信息系统&#xff09;知识的平台&#xff0c;促进大众对…...

第2章-Python编程基础

#本章目标 1&#xff0c;了解什么是计算机程序 2&#xff0c;了解什么是编程语言 3&#xff0c;了解编程语言的分类 4&#xff0c;了解静态语言与脚本语言的区别 5&#xff0c;掌握IPO程序编写方法 6&#xff0c;熟练应用输出函数print与输入函数input 7&#xff0c;掌握Python…...

LDO产品的基础知识解析

低压降稳压器 (LDO)是一种用于调节较高电压输入产生的输出电压的简单方法。在大多数情况下&#xff0c;低压降稳压器都易于设计和使用。然而&#xff0c;如今的现代应用都包括各种各样的模拟和数字系统&#xff0c;而有些系统和工作条件将决定哪种LDO最适合相关电路&#xff0c…...

如何利用python画出AHP-SWOT的战略四边形(四象限图)

在企业或产业发展的相关论文分析中&#xff0c;常用到AHP-SWOT法进行定量分析&#xff0c;形成判断矩阵后&#xff0c;如何构造整洁的战略四边形是分析的最后一个环节&#xff0c;本文现将相关代码发布如下&#xff1a; import mpl_toolkits.axisartist as axisartist import …...

适用于智慧城市、智慧文旅等在线场景的轻量级3D数字人引擎MyAvatar简介

本人研发的国内首个纯面向web应用和小程序的轻量级3D虚拟人引擎MyAvatar。 功能简述 支持3D模型定制&#xff08;写实或卡通风格均可&#xff0c;人物模型需实现绑定和变形&#xff09;动画可以内置于模型中&#xff0c;也可以单独以glb或fbx格式导出并动态加载支持readyplay…...

Excel显示/隐藏批注按钮为什么是灰色?

在excel中&#xff0c;经常使用批注来加强数据信息的提示&#xff0c;有时候会把很多的批注显示出来&#xff0c;但是再想将它们隐藏起来&#xff0c;全选工作表后&#xff0c;“显示/隐藏批注”按钮是灰色的&#xff0c;不可用。 二、可操作方法 批注在excel、WPS表格中都是按…...

ArtTS系统能力-通知的学习(3.1)

上篇回顾&#xff1a; ArtTS语言基础类库-容器类库内容的学习(2.10.2&#xff09; 本篇内容&#xff1a; ArtTS系统能力-通知的学习&#xff08;3.1&#xff09; 一、 知识储备 1. 基础类型通知 按内容分成四类&#xff1a; 类型描述NOTIFICATION_CONTENT_BASIC_TEXT普通文…...

Apollo9.0 PNC源码学习之Planning模块(三)—— public_road_planner

前面文章: (1)Apollo9.0 PNC源码学习之Planning模块(一)—— 规划概览 (2)Apollo9.0 PNC源码学习之Planning模块(二)—— planning_component 1 planning_interface_base 规划接口基类: planning\planning_interface_base\planner_base\planner.h #pragma once#in…...

【Elasticsearch】linux使用supervisor常驻Elasticsearch,centos6.10安装 supervisor

背景&#xff1a; linux服务器&#xff0c;CentOS 6操作系统&#xff0c;默认版本python2.6.6&#xff0c;避免安装过多的依赖不升级python 在网上查的资料python2.6.6兼容supervisor版本 3.1.3 安装supervisor 手动在python官网下载supervisor&#xff0c;并上传到服务器 下…...

推荐系统三十六式学习笔记:原理篇.模型融合14|一网打尽协同过滤、矩阵分解和线性模型

目录 从特征组合说起FM模型1.原理2.模型训练3.预测阶段4.一网打尽其他模型5.FFM 总结 在上一篇文章中&#xff0c;我们讲到了使用逻辑回归和梯度提升决策树组合的模型融合办法&#xff0c;用于CTR预估&#xff0c;给这个组合起了个名字&#xff0c;叫“辑度组合”。这对组合中&…...

如何使用mapXplore将SQLMap数据转储到关系型数据库中

关于mapXplore mapXplore是一款功能强大的SQLMap数据转储与管理工具&#xff0c;该工具基于模块化的理念开发&#xff0c;可以帮助广大研究人员将SQLMap数据提取出来&#xff0c;并转储到类似PostgreSQL或SQLite等关系型数据库中。 功能介绍 当前版本的mapXplore支持下列功能…...

JAVA设计模式-大集合数据拆分

背景 我们在做软件开发时&#xff0c;经常会遇到把大集合的数据&#xff0c;拆分成子集合处理。例如批量数据插入数据库时&#xff0c;一次大约插入5000条数据比较合理&#xff0c;但是有时候待插入的数据远远大于5000条。这时候就需要进行数据拆分。数据拆分基本逻辑并不复杂&…...

如何使用sr2t将你的安全扫描报告转换为表格格式

关于sr2t sr2t是一款针对安全扫描报告的格式转换工具&#xff0c;全称为“Scanning reports to tabular”&#xff0c;该工具可以获取扫描工具的输出文件&#xff0c;并将文件数据转换为表格格式&#xff0c;例如CSV、XLSX或文本表格等&#xff0c;能够为广大研究人员提供一个…...

ansible自动化运维,(2)ansible-playbook

三种常见的数据格式&#xff1a; XML&#xff1a;可扩展标记语言&#xff0c;用于数据交换和配置 JSON&#xff1a;对象标记法&#xff0c;主要用来数据交换或配置&#xff0c;不支持注释 YAML&#xff1a;不是一种标记语言&#xff0c;主要用来配置&#xff0c;大小写敏感&…...

一分钟学习数据安全—自主管理身份SSI分布式标识DID介绍

SSI标准化的两大支柱&#xff0c;一个是VC&#xff0c;之前简单介绍过&#xff0c;另一个就是DID。基本层次上&#xff0c;DID就是一种新型的全局唯一标识符&#xff0c;跟浏览器的URL没有什么不同。深层次上&#xff0c;DID是互联网分布式数字身份和PKI新层级的原子构件。 一…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

Python的__call__ 方法

在 Python 中&#xff0c;__call__ 是一个特殊的魔术方法&#xff08;magic method&#xff09;&#xff0c;它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时&#xff08;例如 obj()&#xff09;&#xff0c;Python 会自动调用该对象的 __call__ 方法…...

HTML中各种标签的作用

一、HTML文件主要标签结构及说明 1. <&#xff01;DOCTYPE html> 作用&#xff1a;声明文档类型&#xff0c;告知浏览器这是 HTML5 文档。 必须&#xff1a;是。 2. <html lang“zh”>. </html> 作用&#xff1a;包裹整个网页内容&#xff0c;lang"z…...

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...