DM数据库学习之路(十八)DMHS数据实时同步软件部署及迁移测试

​​​​​

  1. DMDRS介绍

    1. 产品介绍

达梦数据实时同步软件(以下简称 DMDRS)是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术,不依赖主机上源数据库的触发器或者规则,对主机源数据库系统几乎无影响,能以极少的系统开销实现秒级数据实时同步复制。

DMDRS基于成熟的关系数据模型和标准接口,支持多种软硬件平台,能够灵活的配置出一对一、一对多、多对一、多对多以及级联等多种形式的复制拓扑结构,可以广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发、多业务中心等业务领域。

    1. DMDRS原理

DMDRS的组成原理框图中包含源端数据库、目标端数据库、源端DMDRS服务以及目标端 DMDRS 服务,其中源端DMDRS服务主要由装载模块(LOAD)、日志捕获分析模块(CPT)、传输模块(NET)以及管理服务模块(MGR)组成;

目标端DMDRS服务则由执行模块(EXEC)和管理服务模块(MGR)组成。

在源端DMDRS的CPT模块采用优化的日志扫描算法实现增量日志数据的快速捕获分析,并将分析完成后的日志数据转换为内部的消息格式,然后通过网络将消息发送至目标端DMDRS服务;

在目标端DMDRS服务接收到源端的日志消息后,对消息进行处理,通过多线程并行执行的方式将同步数据应用至目标端数据库,实现数据实时同步。

    1. 模块介绍

DMDRS 同步服务主要包括四个模块,分别是捕获模块(CPT)、装载模块(LOAD)、传输模块(NET)以及执行模块(EXEC),这些模块统一由管理模块(MGR)进行管理执行。

管理模块(MGR):MGR模块可以解析配置参数,根据配置参数启动DMDRS的捕获器功能、执行器功能、转发器功能或路由功能。当MGR启动捕获器功能时,MGR会调度CPT模块和NET模块(发送子模块);当启动执行器功能时,会调度NET模块(接收子模块)和EXEC模块;当启动转发器或路由器功能时,会调度NET模块(接收子模块和发送子模块)。

捕获模块(CPT): 对源数据库增量日志进行捕获并完成解析,结合数据字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),然后将这些操作及数据转换为内部的消息格式投递给网络(NET)模块。

装载模块(LOAD):DMDRS 在进行增量数据同步之前,需完成同步表的字典装载和表数据的初始装载。表字典装载将所有同步表的数据字典信息从源库中抽取出来,保存为本地的数据字典文件,用于数据同步过程中提供准确表定义信息。数据初始装载用于将源端数据库的初始数据同步至目标数据库,使得源库和目标库的初始数据保持一致。

传输模块(NET): 传输模块NET应用于捕获器CPT、路由器ROUTE、转发器 TRANSFER、执行器 EXEC,分为接收子模块(RECV)与发送子模块(SEND),在同步中承担节点之间数据的收发任务。

1) 日志捕获 CPT 模块需要通过 NET 模块来发送数据。

2) EXEC 模块则需要通过 NET 模块接收数据。

3) ROUTE 通过 NET 模块进行消息转发。

4) TRANSFER 通过 NET 模块进行消息转发。

同步链路中多对一、一对多和多对多的数据传输都是通过 NET 模块来实现的。RECV子模块与 SEND 子模块在 DMDRS 配置文件中的位置如下所示:

执行模块(EXEC) EXEC 模块主要的功能是对 CPT 捕获的增量数据进行入库,它目前采用符合 SQL92 标准的 SQL 语句,通过 ODBC 接口和目标端数据库交互(在初始化装载时如果选择快装功能,它需要加载快装模块,快装模块使用了 OCI 接口),所以它可以部署在能够和目标端数据库连通的任意一个节点上。在整个同步链路中,EXEC 模块对整个同步的性能起着决定性的作用,需要根据相应的同步场景配置好 EXEC 模块参数,方可达到最优的同步性能。

  1. DMDRS安装准备

    1. DMDRS部署规划

节点

操作系统

IP地址

数据库类型

源端

麒麟v10SP3

84.0.191.2

DM8单机

目标端

麒麟v10SP3

84.0.191.3

DM8单机

    1. 源目标端DMDRS部署

      1. 查看系统信息

#获取系统位数

# getconf LONG_BIT

64

#查询系统内核

# uname -a

Linux dm8db01 4.19.90-52.22.v2207.ky10.x86_64 #1 SMP Tue Mar 14 12:19:10 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

#检查内存

为了保证 DMDRS 的正确安装和运行,要尽量保证操作系统至少 1GB 的可用内存(RAM)。如果可用内存过少,可能导致 DMDRS 安装或启动失败.

# grep MemTotal /proc/meminfo

MemTotal:       15077112 kB

#获取交换分区大小

# grep SwapTotal /proc/meminfo

SwapTotal:             0 kB

#获取内存使用详情

# free -g

              total        used        free      shared  buff/cache   available

Mem:             15           1          10           0           3          13

Swap:             0           0           0

检查存储空间

# df -h

Filesystem             Size  Used Avail Use% Mounted on

devtmpfs               7.2G     0  7.2G   0% /dev

tmpfs                  7.2G     0  7.2G   0% /dev/shm

tmpfs                  7.2G  9.2M  7.2G   1% /run

tmpfs                  7.2G     0  7.2G   0% /sys/fs/cgroup

/dev/mapper/klas-root   52G   21G   32G  39% /

tmpfs                  7.2G     0  7.2G   0% /tmp

/dev/sda1              295M  155M  141M  53% /boot

tmpfs                  1.5G     0  1.5G   0% /run/user/0

检查临时空间

# df -h /tmp

Filesystem                Size  Used Avail Use% Mounted on

/dev/mapper/h3linux-root  292G  158G  135G  55% /

      1. DMDRS安装

源端和目标端都要安装DMDRS,上传DMDRS的安装包到Linux,使用dmdba用户进行安装包:DMDRS_V4.3.22_dm8_rev141932_rh6_64_20231016.bin

# su - dmdba

$ chmod +x DMDRS_V4.3.22_dm8_rev141932_rh6_64_20231016.bin

$ export DISPLAY=84.0.191.1:0.0

$ ./DMDRS_V4.3.22_dm8_rev141932_rh6_64_20231016.bin

      1. 查看服务状态

通过服务查看器 hsservice 查看已安装的服务

$ /home/dmdba/dmhs/tool/hsservice

    1. 源目标端ODBC部署

全部在root用户下操作

      1. 解压

# tar -zxvf unixODBC-2.3.0.tar.gz

      1. 源码编译安装

# cd /soft/odbc/unixODBC-2.3.0/

# ./configure

# make && make install

      1. 配置 odbc.ini

配置 odbc.ini 数据源信息和 odbcinst.ini 驱动信息

# vi /usr/local/etc/odbc.ini

[DM8]

Description = DM ODBC DSN

Driver = DM8 ODBC DRIVER

SERVER = localhost

UID = SYSDBA

PWD = SYSDBA

TCP_PORT = 5236

      1. 配置 odbcinst.ini

# vi /usr/local/etc/odbcinst.ini

[DM8 ODBC DRIVER]

Description = ODBC DRIVER FOR DM8

Driver = /dm8/bin/libdodbc.so

注:这里根据实际安装路径填写,要不然找不到libdodbc.so

      1. 验证

使用dmdba用户执行命令

# su – dmdba

$ isql dm8 -v

或者

$ isql dm8

  1. 源端数据库准备

    1. 开启归档

$ mkdir -p /dm8/data/DAMENG/arch

$ disql SYSDBA/SYSDBA@127.0.0.1:5236

SQL> alter database mount;//切换数据库到配置状态

SQL> alter database add ARCHIVELOG 'type=local,dest=/dm8/data/DAMENG/arch,file_size=1024,space_limit=0';

SQL> alter database ARCHIVELOG;

SQL> alter database open;

SQL> select arch_mode from v$database;

LINEID     ARCH_MODE

---------- ---------

Y

SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL'

AND ARCH_IS_VALID='Y';

行号     ARCH_DEST             ARCH_FILE_SIZE

---------- --------------------- --------------

1          /dm8/data/DAMENG/arch 1024

    1. 逻辑日志

vi /dm8/data/DAMENG/dm.ini

ARCH_INI = 1

RLOG_APPEND_LOGIC = 1

SQL> SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';

行号     PARA_VALUE

---------- ----------

  1. 1

检查在线日志

SQL> SELECT PATH FROM SYS.V$RLOGFILE;

行号     PATH                        

---------- -----------------------------

1          /dm8/data/DAMENG/DAMENG01.log

2          /dm8/data/DAMENG/DAMENG02.log

检查 FAST_COMMIT 参数是否为 0

SQL> select PARA_NAME,para_value from v$dm_ini where para_name = 'FAST_COMMIT';

行号     PARA_NAME   PARA_VALUE

---------- ----------- ----------

1          FAST_COMMIT 0

    1. 配置DDL辅助表和触发器

      1. 方式一(执行ddl_sql_dm8.sql)

如果要求 DDL 同步,那么需要创建DDL触发器和辅助表,使用SYSDBA连接登录数据库执行DMDRS安装目录下script子目录的“ddl_sql_dm8.sql”脚本。

$ disql SYSDBA/SYSDBA@127.0.0.1:5236

SQL> start /home/dmdba/DMHS/scripts/ddl_sql_dm8.sql

执行完成后,使用以下SQL语句查询辅助表是否创建成功

select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMDRS%' and status = 'VALID';

行号 OWNER TABLE_NAME

---------- ----------- ----------------

1 SYSDBA DMDRS_DDL_COL

2 SYSDBA DMDRS_DDL_SQL

3 SYSDBA DMDRS_DDL_CONS

4 SYSDBA DMDRS_DDL_IDX

5 SYSDBA DMDRS_DDL_RENAME

6 SYSDBA DMDRS_DDL_SEQ

7 SYSDBA DMDRS_DDL_PART

8 SYSDBA DMDRS_DDL_COMMENT

9 SYSDBA DMDRS_DDL_LOG

执行以下SQL语句查询触发器是否创建成功:

select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMDRS%' and status = 'Y';

行号 OWNER TRIGGER_NAME

---------- ------ -----------------------

1 SYSDBA DMDRS_DDL_TRIGGER_AFTER

2 SYSDBA DMDRS_DDL_TRIGGER_BEFORE

3 SYSDBA DMDRS_DDL_TRIGGER_GRANT

4 SYSDBA DMDRS_DDL_TRIGGER_REVOKE

      1. 方式二系统表日志方式(视需求启用)

另外一种方式同步 DDL:系统表附加日志的方式同步 DDL,该方式同步 DDL 时,只能同步常规对象,如:table、index、constraint、trigger、procedure、function、view、sequence;对应的操作类型:create、drop、alter、truncate。同时,不支持分区表。系统表附加日志方式同步 DDL 的配置方法为:将 DM8 数据库的配置文件“dm.ini”中的“RLOG_APPEND_SYSTAB_LOGIC”设置为 1,再重启数据库实例即可。

$ vi /dm8/data/DAMENG/dm.ini

RLOG_APPEND_SYSTAB_LOGIC     = 1

$ ./DmServiceDMSERVER restart

Stopping DmServiceDMSERVER:                                [ OK ]

Starting DmServiceDMSERVER:                                [ OK ]

  1. DMDRS配置

    1. 目标端配置

      1. 目标端dmhs.hs配置

在DMDRS安装目录下的bin子目录,新建dmhs.hs配置文件

$ cd /home/dmdba/dmhs/bin

$ vi dmhs.hs

<?xml version="1.0" encoding="GB2312"?>

<DMDRS>

 <base>    <!-- 管理模块的基本配置 -->

    <lang>en</lang>    <!-- 语言选项,ch 为中文,en 为英文 -->

    <mgr_port>5345</mgr_port>    <!-- 管理端口号,默认为5345-->

    <ckpt_interval>60</ckpt_interval>    <!-- 检查点间隔,默认60 -->

    <siteid>2</siteid>    <!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->

    <version>2.0</version>

</base>

<exec>    <!-- 执行模块的基本配置 -->

  <recv>

    <data_port>5346</data_port>    <!-- 当数据传递采用网络直连时,需要配置该参数,表明同步数据从该端口号获取。 -->

  </recv>

  <db_type>dm8</db_type>    <!-- 目标端数据库类型 -->

  <db_server>84.0.191.3</db_server>    <!-- 目标端IP即当前IP -->

  <db_user>SYSDBA</db_user>    <!-- 目标端数据库用户 -->

  <db_pwd>SYSDBA2023</db_pwd>    <!-- 用户的密码 -->

  <db_port>5236</db_port>    <!-- 目标端数据库端口 -->

  <db_name>CUGDB</db_name>    <!-- 默认数据库名,默认为空串(只针对dm6有用)-->

  <char_code>PG_GB18030</char_code>

  <exec_thr>4</exec_thr>    <!-- 执行线程个数,只有当 exec_mode 为 1 时才会生效!默认为1 -->

  <exec_sql>1024</exec_sql>    <!-- SQL 缓存大小,默认为 512M -->

  <exec_trx> 5000 </exec_trx>    <!-- 事务缓存个数,默认为 5000 -->

  <exec_rows>1000</exec_rows>    <!-- 批量绑定行数,默认为 250 -->

 </exec>

</DMDRS>

      1. 启动目标端MGR

$/home/dmdba/dmhs/bin/dmhs_server dmhs.hs

      1. 启动目标端执行器

start exec

或者

控制台DMDRS_console 控制台管理工具启动

$ /home/dmdba/dmhs/tool/DMDRS_console

DMDRS console tool: V4.3.22-Build(2023.10.13-141932trunc)_64_2310

Copyright (c) 2020, DMDRS. All rights reserved.

Type ? or "help" for help, type "quit" to quit console.

Connected to DMDRS: 127.0.0.1:5345

execute success

Dameng HS Server V4.3.22-Build(2023.10.13-141932trunc)_64_2310

DMDRS> start exec

execute success

    1. 源端配置

      1. 配置源端Dmhs.hs

在DMDRS安装目录下的bin子目录,新建Dmhs.hs配置文件

$ vi /home/dmdba/dmhs/bin/dmhs.hs

<?xml version="1.0" encoding="GB2312"?>

<DMDRS>

 <base>

<lang>ch</lang>

 <mgr_port>5345</mgr_port>

 <ckpt_interval>60</ckpt_interval>

 <siteid>1</siteid>

<version>2.0</version>

 </base>

 <cpt>

 <db_type>dm8</db_type>

 <db_server>127.0.0.1</db_server>

 <db_user>SYSDBA</db_user>

 <db_pwd>SYSDBA</db_pwd>

 <db_port>5236</db_port>

 <db_ssl_path></db_ssl_path>

 <db_ssl_pwd></db_ssl_pwd>

 <parse_thr>1</parse_thr>

 <ddl_mask>op:obj:TABLESPACE </ddl_mask> <!--DDL配置项,如果不需要DDL同步,配置为空-->

 <arch><!--归档清理配置项-->

 <clear_interval>600</clear_interval>

 <clear_flag>0</clear_flag>

 </arch>

 <send><!-- 发送模块配置 -->

 <ip>84.0.191.2</ip><!—执行端 IP-->

 <mgr_port>5345</mgr_port><!—执行端 mgr_port -->

 <data_port>5346</data_port> <!—执行端 data_port -->

 <trigger>1</trigger><!-- 是否忽略触发器,默认为 0,限定值 0,1 -->

 <constraint>1</constraint><!-- 是否忽略约束,默认为 0,限定值 0,1 -->

 <identity>1</identity>

 <net_turns>0</net_turns>

 <filter><!--过滤配置项-->

 <enable><!-- 白名单,所有允许同步的表 -->

<item>OMP.*</item>

 </enable>

 </filter>

 <map><!--映射配置项-->

 <item>OMP.*==OMP.*</item><!--*.*是抽取整个库-->

 </map>

 </send>

 </cpt>

</DMDRS>

配置说明:

1) siteid全局唯一,即 DMDRS 同步系统涉及的所有节点的 siteid 必须全局唯一,不允许有重复值。

2) DDL配置项 , 如果不需要DDL同步 , 那么就配置为空 , 即<ddl_mask></ddl_mask>,相应地DMDRS DDL触发器和辅助表也不需要创建。

3) 归档清理配置项,clear_flag为1表示清除,即DMDRS将同步完成的归档文件删除;为 2,表示将同步完成的归档移到bak_dir目录下;为 0,表示不作任何操作。

4) 过滤配置项,本示例配置了白名单,即 enable,也可以配置黑名单,详见 DMDRS

用户手册。其过滤的规则是:先判断白名单,然后判断黑名单。如果存在重叠的情况,那么也是会被过滤的。

5) 映射配置项,表示存在不同模式之间的表同步,例如本示例中源端的 SYSDBA 模式下的表映射成目的端的 DMDRS 模式下同名的表。

      1. 启动源端MGR

$/home/dmdba/dmhs/bin/dmhs_server dmhs.hs

clear exec lsn #为了初始化日志的起始位置。

      1. 初始化装载

初始装载是将源端数据库中的初始数据装载到目的端数据库,使 DMDRS 同步的时刻源和目的端的同步表数据一致。装载前源端DMDRS服务和目的端DMDRS服务都需要开启。

初始装载:

$/home/dmdba/dmhs/tool/dmhs_console

DMDRS >copy 0 "sch.name='OMP'" DICT|LSN|CREATE|INSERT|INDEX

      1. 启动捕获器

DMDRS_server 控制台启动(本地)

start cpt

显示如上界面表示启动成功

或者

控制台DMDRS_console 控制台管理工具启动

[dmdba@dm8db01 tool]$ /home/dmdba/DMHS/tool/DMDRS_console

DMDRS console tool: V4.3.22-Build(2023.10.13-141932trunc)_64_2310

Copyright (c) 2020, DMDRS. All rights reserved.

Type ? or "help" for help, type "quit" to quit console.

Connected to DMDRS: 127.0.0.1:5345

execute success

Dameng HS Server V4.3.22-Build(2023.10.13-141932trunc)_64_2310

DMDRS> start cpt

execute success

DM到DM的DMDRS部署完成!

  1. DMDRS测试

    1. 表数量比对

结论:源端和目标端表名称及表数量一致。

    1. 存量表行数比对

结论:源端和目标端存量数据表行数一致。

    1. 新增表行数比对

begin

for i in 101000..102000 loop

insert into omp.year_2001 values(i, 'cisco-'||i,'3306','10000','router-'||i,to_date('2021-06-20 18:31:34','YYYY-MM-DD HH24:MI:SS'));

end loop;

commit;

end;

/

结论:源端和目标端表新增数据行数一致。

    1. 建新表及表行数比对

create table omp.year_6688(

ID            number(10) primary key not null,            

name       varchar(30),

port    VARCHAR(255),

speed    VARCHAR(255),

type    VARCHAR(255),

create_time     date

);

begin

for i in 1..5000 loop

insert into omp.year_6688 values(i, 'cisco-'||i,'3306','10000','router-'||i,to_date('2021-06-20 18:31:34','YYYY-MM-DD HH24:MI:SS'));

end loop;

commit;

end;

/

结论:源端和目标端新增表及表行数一致。

    1. 全库抽取测试

修改源端配置文件

$ vi /home/dmdba/dmhs/bin/dmhs.hs

<map><!--映射配置项-->

<item>*.*==*.*</item><!--*.*是抽取整个库-->

</map>

    1. schema抽取测试

$ vi /home/dmdba/dmhs/bin/dmhs.hs

<map><!--映射配置项-->

<item>FMS.*==FMS.*</item><!—用户名.*-->

</map>

    1. 指定表抽取测试

$ vi /home/dmdba/dmhs/bin/dmhs.hs

<map><!--映射配置项-->

<item>DWD.YEAR_2001==DWD.YEAR_2001</item><!—用户.表名-->

<item>DWD.YEAR_2002==DWD.YEAR_2002</item><!—用户.表名-->

<item>DWD.YEAR_2003==DWD.YEAR_2003</item><!—用户.表名-->

</map>

    1. 表空间抽取测试

$ vi /home/dmdba/dmhs/bin/dmhs.hs

<map><!--映射配置项-->

 <item>TS.OMPDB==TS.FMSDB</item><!--源端表空间OMPDB映射到目的端FMSDB表空间-->

 </map>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringCloudAlibaba系列--nacos配置中心】

Nacos做注册中心以及使用docker部署nacos集群的博客在这&#xff1a; 容器化部署Nacos&#xff1a;从环境准备到启动 容器化nacos部署并实现服务发现(gradle) 使用docker部署nacos分布式集群 下面介绍如何使用nacos做配置中心 首先要进行nacos-config的引入&#xff0c;引入…

【前端素材】推荐优质后台管理系统Modernize平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理和控制网站、应用程序或系统后台操作的软件工具&#xff0c;通常由授权用户&#xff08;如管理员、编辑人员等&#xff09;使用。它提供了一种用户友好的方式来管理网站或应用程序的内容、用户、数据等方面的操作&#xff0c;并且通常…

kafka为什么性能这么高?

Kafka系统架构 Kafka是一个分布式流处理平台&#xff0c;具有高性能和可伸缩性的特点。它使用了一些关键的设计原则和技术&#xff0c;以实现其高性能。 上图是Kafka的架构图&#xff0c;Producer生产消息&#xff0c;以Partition的维度&#xff0c;按照一定的路由策略&#x…

康威生命游戏

康威生命游戏 康威生命游戏(Conway’s Game of Life)是康威发明的细胞自动机。 生命游戏有几个简单的规则&#xff1a; 细胞有两种状态&#xff0c;存活或死亡&#xff0c;每个细胞以自身为中心与周围的八格细胞互动。 对于存活的细胞&#xff1a; 当周围的细胞过少(<2)或…

【vue】如何打开别人编译后的vue项目

文件结构如下&#xff0c;编译后的文件放在dist中。 dist的文件结构大约如下&#xff0c;文件名称随项目 1.新建app.js文件 const express require(express);const app express();const port 8080;app.use(express.static(dist));app.listen(port, () > console.log); …

密评技术要求实施详解:每一步都关键

密评简介 密评定义&#xff1a;全称商用密码应用安全性评估, 是对采用商用密码技术、产品和服务集成建设的网络和信息系统密码应用的合规性、正确性、有效性进行评估的活动。 评测依据&#xff1a;GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》。 密评对象&…

智能高压森林应急消防泵|保障森林安全|深圳恒峰

随着科技的不断发展&#xff0c;我们的生活质量得到了显著提升。在森林保护领域&#xff0c;一项创新技术正在发挥着关键作用——智能高压森林应急消防泵。这种设备不仅提高了灭火效率&#xff0c;更为森林资源的安全保驾护航。 在过去&#xff0c;面对森林火灾&#xff0c;消防…

鸿蒙DevEco Service开发准备与使用

DevEco低代码是一个基于Serverless和ArkUI的端云一体化低代码开发平台&#xff0c;可通过拖拽式开发&#xff0c;可视化配置构建元服务。打通HarmonyOS云侧与端侧能力&#xff0c;轻松实现HMS Core和AGC Serverless能力的调用。通过与元服务生态、HMS Core、AGC Serverless平台…

python统计分析——线性模型的预测和评估

参考资料&#xff1a;用python动手学统计学 1、导入库 # 导入库 # 导入数据处理的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 导入绘图的库 from matplotlib import pyplot as plt import seaborn as sns sns.set() # 导入估计…

亚马逊,速卖通,国际站测评补单的必要性与方法

亚马逊平台的规则与某宝有所不同。亚马逊平台没有产品推广引流和直通车等功能。而且&#xff0c;与某宝不同的是&#xff0c;亚马逊平台没有广告位和卖家客服。在某宝上&#xff0c;当我们选择款式和颜色时&#xff0c;通常会与卖家客服进行沟通。但在亚马逊上&#xff0c;没有…

【Docker】免费使用的腾讯云容器镜像服务

需要云服务器等云产品来学习Linux可以移步/-->腾讯云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 1、设置密码 2、登录实例&#xff08;sudo docker login xxxxxx&#xff09; 3、新建命名空间&#xff08;每个命名空…

day40打卡

day40打卡 343. 整数拆分 状态表示 ​ dp[i] 表示将正整数i拆分成至少两个正整数的和之后&#xff0c;这些正整数的最大乘积 状态转移方程 ​ i > 2 时&#xff0c;对正整数i拆出的第一个正整数是j&#xff0c;则有&#xff1a; 将i拆分为 j 和 i-j&#xff0c;且 i-j…

初探Web客户端追踪技术

前言 案例1 当我们首次浏览网站时&#xff0c;在网页的下方位置经常会出现提示&#xff0c;询问是否允许使用 Cookie 来提供服务和流量。为了不被挡住浏览的内容&#xff0c;我们经常会下意识地点击“接受”&#xff0c;然后继续浏览。看似无害而有害增强你在这个网站上的体验…

MATLAB | 超多样式聚类分析树状图任你选择~~

这几天写了一个代码很长的聚类分析树状图绘图工具函数&#xff08;上一期文章立的flag总算实现了&#xff09;&#xff0c;能够比较轻松的绘制以下图形&#xff1a; 工具基本已经成型了&#xff0c;未来有需求未来有空再加哈哈哈&#xff0c;要求MATLAB至少需要17b版本&#xf…

微服务篇之分布式事务

一、Seata架构 Seata事务管理中有三个重要的角色&#xff1a; TC (Transaction Coordinator) - 事务协调者&#xff1a;维护全局和分支事务的状态&#xff0c;协调全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器&#xff1a;定义全局事务的范围、开始全局事务、…

Leetcode日记 2583. 二叉树中的第 K 大层和

Leetcode日记 2583. 二叉树中的第 K 大层和 题目&#xff1a;解题思路&#xff1a;代码实现制作不易&#xff0c;感谢三连&#xff0c;谢谢啦 题目&#xff1a; 给你一棵二叉树的根节点 root 和一个正整数 k 。 树中的 层和 是指 同一层 上节点值的总和。 返回树中第 k 大的层和…

欢迎 Gemma: Google 最新推出开源大语言模型

今天&#xff0c;Google 发布了一系列最新的开放式大型语言模型 —— Gemma&#xff01;Google 正在加强其对开源人工智能的支持&#xff0c;我们也非常有幸能够帮助全力支持这次发布&#xff0c;并与 Hugging Face 生态完美集成。 Gemma 提供两种规模的模型&#xff1a;7B 参数…

idea配置javafx

一、下载sdk 在jdk8之后&#xff0c;需要下载sdk包 &#x1f4ce;javafx-sdk-18.zip 这里适用的jkd版本如图 二、配置 创建一个项目之后&#xff0c;进行如下配置&#xff0c;将sdk导入到项目中 配置启动参数 可以使用-号将之前的去掉&#xff0c;创建一个新的 打开下面的V…

MyBatisPlus条件构造器和常用接口

前置配置文章 一、wapper介绍 wrapper的继承体系&#xff1a; Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装UpdateWrapper &#x…