写点什么

举重若轻,用 snowball 迁移数据库上云

  • 2019-10-10
  • 本文字数:9071 字

    阅读完需:约 30 分钟

举重若轻,用snowball迁移数据库上云

概述

随着企业上云渐渐形成“新常态”,越来越多的迁移方案和工具为大家所熟悉,但大部分的数据传输都是基于网络的,即使使用专线的解决方案,在海量数据迁移的场景下也依然可能力不从心。因此,AWS 针对这类场景推出了 AWS Snowball 服务,客户可通过物理存储设备 (绕过 Internet) 加快将海量数据传入和传出 AWS 的速度。Snowball 会通过加密和防篡改技术,保护静态数据和物理运送中的数据。您无需担心自己的数据泄露或丢失。 当然 snowball 并不是包治百病的偏方,是否使用 snowball 需要综合地考量数据量、成本、时间等因素,如果要在本地数据中心和 Amazon S3 之间传输 10 TB 以下的数据,则 Snowball 对您来说可能不是最优的选择。 本文希望通过一个使用 snowball 将 ORACLE 数据库备份传输上 AWS,进而搭建由本地 ORACLE 数据库和云端 EC2 上运行 ORACLE 数据库组成的 data guard 环境,最终通过切换完成最小停机时间数据库迁移上云的 DEMO,让读者对 snowball 的使用有一个直观的认识,大体的步骤如下:


  • 创建导入任务,申请 snowball 设备,接收 AWS Snowball 设备

  • 将 AWS Snowball 设备连接到本地网络,在工作站安装 snowball 客户端并激活设备

  • 对本地 ORACLE 数据库执行备份,将备份文件传输到 snowball

  • 寄回设备, snowball 里的备份文件自动导入 S3

  • 在 AWS EC2 上下载 S3 中的备份文件,使用备份文件搭建 data guard 环境

  • 通过切换完成最小停机窗口数据库迁移。

  • 请注意,本文中的 ORACLE 环境和您的实际环境会有差异,DEMO 中的步骤和各种参数的配置,仅供参考,当您需要完成实际迁移项目时,请和您的 DBA 团队商讨,根据实际情况进行调整。

1 环境准备

1.1 数据库准备

1.1.1 测试环境概述

身份  操作系统  数据库版本  主机名  端口  实例名主库  Linux  11.2.0.1.0  Primary  1521  orcl备库  Linux  11.2.0.1.0  Standby  1521  stby
复制代码


两台服务器网络已经调通,互相可以访问,并建立了 SSH 互信,具体步骤这里不展开。可以通过在主备库主机上分别执行 ssh <远程主机名> date 来测试

1.1.2 日志准备

1 在主库上开启归档,用以下命令检查,如果还没有开启归档,需要启动数据库到 mount,而后用 alter database archivelog; 开启归档,开启后用 Archive log list; 查看归档设置,输出如下图所示。


2 使用命令 alter database force logging; 对主库开启 force logging ,而后用 select force_logging from v$database; 查询设置结果,输出如下图所示。



3 在主库上用以下命令创建 standby logfile


alter database drop standby logfile group 4;
alter database drop standby logfile group 5;
alter database drop standby logfile group 6;
alter database drop standby logfile group 7;
alter database add standby logfile group 4 '/u01/app/oracle/oradata/orcl/stbredo04.log' size 50m;
alter database add standby logfile group 5 '/u01/app/oracle/oradata/orcl/stbredo05.log' size 50m;
alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/stbredo06.log' size 50m;
alter database add standby logfile group 7 '/u01/app/oracle/oradata/orcl/stbredo07.log' size 50m;
复制代码


设置后用以下语句查询设置结果:


set linesize 200;
select group#,dbid,thread#,sequence#,bytes/1024/1024,archived,status from v$standby_log;
col member format a50;
select member,type from v$logfile;
复制代码

1.1.3 参数文件修改

在主库上通过 spfile 生成 pfile,并进行编辑,添加 data guard 相关的参数,在本例中,主库 unique name 是 orcl,备库 unique name 是 stby,添加参数时注意不同角色数据库的名称,尤其是 log_file_name_convert 和 db_file_name_convert 两个参数,这两个参数用来指定数据文件和 redo 文件路径的转换,譬如源的数据文件是 /u01/app/oracle/oradata/stby/system01.dbf,我们希望将这个数据文件的路径转换到 /u01/app/oracle/oradata/orcl/,那么我们的 db_file_name_convert 就要配置为 ‘/u01/app/oracle/oradata/stby/ ‘,’/u01/app/oracle/oradata/orcl/ ‘,这两个参数十分重要且容易配错,请您务必注意。 以下的参数信息仅供参考,需要您的 DBA 按照实际情况配置。


create pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora'  from spfile;
orcl.__db_cache_size=385875968
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=553648128
orcl.__sga_target=1040187392
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=603979776
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=1588592640
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_unique_name='orcl'
*.fal_client='ORCL'
*.fal_server='STBY'
*.log_archive_config='DG_CONFIG=(orcl,stby)'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/flash_recovery_area/ORCL/archivelog/ valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=orcl'
*.log_archive_dest_2='SERVICE=stby valid_for=(online_logfiles,primary_role) db_unique_name=stby'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_max_processes=4
*.log_file_name_convert='/u01/app/oracle/oradata/stby/ ','/u01/app/oracle/oradata/orcl/ '
*.db_file_name_convert='/u01/app/oracle/oradata/stby/ ','/u01/app/oracle/oradata/orcl/ '
*.standby_file_management='AUTO'
复制代码



在主库服务器上通过 scp initorcl.ora standby:$ORACLE_HOME/dbs/initstby.ora 拷贝 pfile 到备库 initorcl.ora 100% 1599 1.4MB/s 00:00 在备库上编辑 initstby.ora,需要注意以下两点,同样地,以下参数仅供参考,需要 DBA 按实际情况修改


1 除了主库添加的参数,备库的 audit 文件目录以及 control file 的目录会有变化


2 对于主库添加的参数,要注意备库和主库涉及路径,名称的不同


orcl.__db_cache_size=385875968
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=553648128
orcl.__sga_target=1040187392
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=603979776
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/stby/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/stby/control01.ctl','/u01/app/oracle/flash_recovery_area/stby/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=1588592640
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_unique_name='stby'
*.fal_client='STBY'
*.fal_server='ORCL'
*.log_archive_config='DG_CONFIG=(orcl,stby)'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/flash_recovery_area/STBY/archivelog/ valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=stby'
*.log_archive_dest_2='SERVICE=orcl valid_for=(online_logfiles,primary_role) db_unique_name=orcl'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_max_processes=4
*.log_file_name_convert='/u01/app/oracle/oradata/orcl/ ','/u01/app/oracle/oradata/stby/ '
*.db_file_name_convert='/u01/app/oracle/oradata/orcl/ ','/u01/app/oracle/oradata/stby/ '
*.standby_file_management='AUTO'
复制代码

1.1.4 Listener 与 tnsnames 文件修改

主库上的 listener 配置文件应静态注册您的主库,可以参考以下配置


[oracle@primary dbs]$ cat $ORACLE_HOME/network/admin/listener.oraLISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))      (ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521))    )  )SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (SID_NAME = orcl)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)           (GLOBAL_DBNAME = orcl)     )     (SID_DESC =       (SID_NAME = orcl)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)       (GLOBAL_DBNAME = orcl_DGB)     )     (SID_DESC =       (SID_NAME = orcl)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)       (GLOBAL_DBNAME = orcl_DGMGRL)     )   )ADR_BASE_LISTENER = /u01/app/oracle
复制代码


在备库上的 listener 配置文件同样应静态注册您的备库,可以参考以下配置


LISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))      (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))    )  )SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (SID_NAME = stby)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)        (GLOBAL_DBNAME = stby)     )     (SID_DESC =       (SID_NAME = stby)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)       (GLOBAL_DBNAME = stby_DGMGRL)     )     (SID_DESC =       (SID_NAME = stby)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)       (GLOBAL_DBNAME = stby_DGB)     )   )ADR_BASE_LISTENER = /u01/app/oracle
复制代码


此外,在主备库主机上需要编写 tnsnames 文件,可以参考以下内容


[oracle@primary dbs]$ cat $ORACLE_HOME/network/admin/tnsnames.ora# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora# Generated by Oracle configuration tools.
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )stby = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = stby) ) )
复制代码

1.1.5 password 文件

为了让超级用户能远程登陆,需要创建 password 文件,参考以下命令创建 password 文件,再将其从主库上远程拷贝到备库上。


orapwd file='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl' password=Oracle123 entries=10  ignorecase=y scp orapworcl standby:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwstby
复制代码

1.1.6 备库主机创建目录

根据上述备库参数文件中设置的数据文件,redo 文件,control 文件,aduit 文件的路径,我们需要在备库上预先创建好相应目录


mkdir -p /u01/app/oracle/admin/stby/adumpmkdir -p /u01/app/oracle/oradata/stby/mkdir -p /u01/app/oracle/flash_recovery_area/stbymkdir -p /u01/app/oracle/flash_recovery_area/STBY/archivelogmkdir -p /u01/app/oracle/flash_recovery_area/STBY/onlinelog
复制代码

1.2 激活 Snowball

1.2.1 申请 Snowball

首先,我们需要申请 snowball,请打开 console 进入 snowball 的服务界面



点击 create job 按钮,选择 Import into Amazon S3 任务类型,可以通过 snowball 将数据上传到 AWS,或者通过 snowball 从 AWS 下发数据,这里我们选择“导入 Amazon S3” 任务类型



点击下一步,在下一个页面提供公司名称、地址、收货人姓名、电话等信息



点击下一步,请提供 job 的名称,并从下拉菜单中选择数据导入的 S3 bucket name,我们需要预先在自己的 AWS 账号中创建 S3 bucket



点击下一步,要提供相应的权限,点击 create/select IAM role,我们可以创建一个新的 IAM role 给 snowball,也可以选择已有的 IAM role。



点击下一步,这里我们可以设置 SNS topic,在您选定的 job 状态变化时通知您,譬如在向您发货或者货物到达时,给您发通知。这个页面设置好后,再点击下一步,就会进入 review 界面,显示我们之前所有的配置信息,如果一切正确,点击 create job 就可以最终创建任务,然后我们就可以等待快递公司将 snowball 送货上门了。


1.2.2 下载 snowball 客户端

在 snowball 传输过程中,我们可以先安装 Snowball 客户端,它 是一个您在本地工作站上运行以执行数据传输的独立终端应用程序。提供您传输数据时所需的所有功能,包括处理错误以及向本地工作站写入日志,以便进行故障排除和审计。请在 AWS 官网 snowball 服务主页或者 snowball 用户指南文档中根据您要运行 snowball 客户端程序的主机 OS 类型选择下载相应的程序。 由于工作站通常是在 Snowball 和数据源之间传输数据的瓶颈所在,我们强烈建议您使用性能强大的计算机作为工作站,而且您的工作站必须能够满足处理、内存和网络的高要求。针对工作规格,我们的官方文档有详细建议和说明https://docs.amazonaws.cn/zh_cn/snowball/latest/ug/specifications.html#workstationspecs,在实际案例中请注意避免工作站成为性能瓶颈,从而影响传输效率。本次 DEMO 中我们将用我的 windows 笔记本安装 snowball 客户端。 我们通过上述网页下载 windows 安装程序 snowball-client-win-1.0.1-281.msi,双击安装 snowball agent,默认安装。 安装后进入安装目录,执行 snowball help 测试


1.2.3 连接 snowball

当快递公司将 snowball 发送到您的公司后,您就可以将 snowball 连接到您刚才安装了客户端程序的工作站上, 到货时 snowball 的前后面板是关闭的,如下图所示



打开面板后,可以看到附带的线缆,每个 Snowball 均被设计为支持通过 RJ45、SFP+ 铜缆或 SFP+ 光纤 10 Gb 以太网传输数据。请连通电源和线缆




!


墨水屏会显示网络配置,这里 DHCP 已经自动分配了 IP,也可以手动完成网络配置


重要


为防止损坏您的数据,请勿在传输数据时,断开 Snowball 或更改其网络设置。




1.2.4 激活 snowball

在 AWS console 的 snowball 服务页面,选择我们之前创建的 job,展开该任务的 Job status 窗格,然后选择 View job details,在显示的详细信息窗格中,展开 Credentials。请记下解锁代码 (包括连字符),因为您需要提供全部 29 个字符才能传输数据。在对话框中选择 Download manifest,然后按照说明将任务清单文件下载到您的计算机上。清单文件名包括您的 Job ID。



在安装了 snowball 客户端的笔记本上,进入安装目录执行以下命令激活 snowball


snowball start -i [IP Address] -m [Path/to/manifest/file] -u [29 character unlock code]    
复制代码


2 迁移数据库

2.1 主库备份

通过 CONFIGURE CONTROLFILE AUTOBACKUP ON;更改 RMAN 设置,使之自动备份 control file



而后在主数据库进行 RMAN 备份,因为使用 snowball 迁移的数据库通常很大,所以我们可以考虑使用 BACKUP AS COMPRESSED BACKUPSET 对备份集进行压缩,此外,我们也可以使用多个 RMAN 通道,然后将数据文件分配到不同的通道,以此来调整备份的总吞吐量。以下脚本仅供参考,请读者根据实际情况进行修改。


rman target /  run{          allocate channel c1 type disk;  backup database plus archivelog tag='full';          release channel c1;}
复制代码



通过 list backup; 列出所需的备份文件,注意会有多个备份文件需要拷贝


2.2 用 Snowball 拷贝备份文件上云

2.2.1 将备份文件拷贝到 Snowball

我们将所有需要的备份文件拷贝到安装了 snowball 客户端的笔记本上的 C:\ orclbak 目录下,使用命令 snowball cp -r C:\orclbak s3://phoenixyy-test-bucket/orclbak/ 拷贝该目录下的所有备份文件到 snowball,拷贝速度和我们使用网络连接的类型以及安装 snowball 客户端的主机资源有关,我们还可以考虑多个客户端的并行复制。具体优化方式请遵循最佳实践,这里不再赘述 https://docs.amazonaws.cn/zh_cn/snowball/latest/ug/performance.html



拷贝成功后请用 snowball ls s3://phoenixyy-test-bucket/orclbak 命令验证上传结果



如果一切正确,可以用 snowball stop 停止从 当前安装 Snowball 客户端 的主机到 Snowball 的通信

2.2.2 拷贝备份文件到备库主机

接下来我们需要遵循文档https://docs.amazonaws.cn/zh_cn/snowball/latest/ug/shipping.html 将 snowball 寄回 AWS,我们上传的数据会自动上传到我们此前创建 snowball 任务时指定的 S3 bucket 里,而后我们就可以下载备份文件到要安装备库的 EC2 主机上了,该 EC2 主机上已经安装了 ORACLE 软件,这里,我们跳过了安装 ORACLE 软件和 snowball 运输的环节,直接进入从 S3 下载的环节 首先,我们将备份文件置于与主库完全相同的路径下,故而先在备库主机上创建备份文件一致的目录


mkdir -p /u01/app/oracle/flash_recovery_area/ORCL/backupset/2018_11_27mkdir -p /u01/app/oracle/flash_recovery_area/ORCL/autobackup/2018_11_27
复制代码


而后,我们将从 S3 下载备份文件到备库主机相同的目录下,在这里,我们遵循文档https://docs.amazonaws.cn/cli/latest/userguide/awscli-install-linux.html 预先安装并配置了 AWS Command Line Interface,我们可以用命令 aws s3 ls s3://phoenixyy-test-bucket/orclbak 列出上传的备份文件



再通过以下命令将备份文件逐一下载到备库主机,为了简化操作,保证备份文件在备库主机上所在的目录和主库主机的目录保持一致。这里的文件名称,路径以及 S3 bucket 名称都需要按照实际情况修改


aws s3 cp s3://phoenixyy-test-bucket/orclbak/o1_mf_annnn_FULL_fzskrbnv_.bkp /u01/app/oracle/flash_recovery_area/ORCL/backupset/2018_11_27/o1_mf_annnn_FULL_fzskrbnv_.bkpaws s3 cp s3://phoenixyy-test-bucket/orclbak/o1_mf_nnndf_TAG20181127T042407_fzskq7js_.bkp /u01/app/oracle/flash_recovery_area/ORCL/backupset/2018_11_27/o1_mf_nnndf_TAG20181127T042407_fzskq7js_.bkpaws s3 cp s3://phoenixyy-test-bucket/orclbak/o1_mf_s_993270283_fzskrcs1_.bkp /u01/app/oracle/flash_recovery_area/ORCL/autobackup/2018_11_27/o1_mf_s_993270283_fzskrcs1_.bkpaws s3 cp s3://phoenixyy-test-bucket/orclbak/o1_mf_annnn_FULL_fzskq6ct_.bkp /u01/app/oracle/flash_recovery_area/ORCL/backupset/2018_11_27/o1_mf_annnn_FULL_fzskq6ct_.bkp
复制代码


###2.3 创建 data guard 环境

2.3.1 还原备库

在备库上用之前准备的 pfile 启动备库实例到 nomount,并生成 spfile


startup nomount pfile=$ORACLE_HOME/dbs/initstby.oracreate spfile from pfile;shutdown immediatestartup nomount 
复制代码



使用 rman target sys/Oracle123@orcl auxiliary / 连接主库和备库,执行 duplicate target database for standby nofilenamecheck; 还原备库,其输出类似



2.3.2 恢复备库

用命令 alter database recover managed standby database using current logfile disconnect from session;在备库上开启 real-time apply redo data


用命令 select process,client_process,sequence#,status from v$managed_standby; 检查备库关键进程运行情况



在主库上执行如下语句创建测试表 test 并插入一条记录


create table test(id number);insert into test values(1);commit;
复制代码


在备库上将数据库只读打开,而后查询 test 验证复制成功


ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;alter database open;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE  USING CURRENT LOGFILE   DISCONNECT FROM SESSION;
复制代码


2.3.3 搭建 DG broker 环境

在主备库上修改参数 dg_broker_start


alter system set dg_broker_start=true scope=both;
复制代码


在主库上配置并开启 configuration


dgmgrl /create configuration 'orcl' as primary database is 'orcl' connect identifier is orcl;add database 'stby' as connect identifier is stby maintained as physical;enable configuration;show configuration verbose;
复制代码




####2.3.4 切换数据库


最后我们模拟一下将数据库从 IDC 机房切换到 AWS 上的过程,在备库主机上执行如下命令


dgmgrl connect sys/Oracle123@orcldisable fast_start failover;show configuration verbose;switchover to stby;
复制代码


在新备库上执行以下语句查看状态是否正确


set linesize 200select dbid,open_mode,database_role,switchover_status,flashback_on from v$database;select process,client_process,sequence#,status from v$managed_standby;
复制代码



在原来的备库,现在的主库 stby 中,向 test 表插入一条新记录, insert into test values(2); commit; 在原来的主库现在的备库 orcl 中查询 test 表,验证数据记录复制成功


set linesize 200select dbid,open_mode,database_role,switchover_status,flashback_on from v$database;select * from test;
复制代码


结语

希望通过本文,您能对 snowball 有所了解。以后当您面临海量数据需要迁移上云,灾备环境搭建,数据中心退役乃至内容分发的时候,尤其在网络传输成为瓶颈时,您能想到还有一个选择,可以使用 snowball 举重若轻地完成任务。


相关文章:


《AWS snowball 用户指南》


作者介绍:


吕琳


AWS 解决方案架构师,负责基于 AWS 的云计算方案的咨询与架构设计,同时致力于数据库和大数据方面的研究和推广。在加入 AWS 之前曾在 Oracle 担任高级讲师并在 Amazon 担任高级 DBA,在数据库设计运维调优、DR 解决方案、大数据以及企业应用等方面有丰富的经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/snoball-migration-to-cloud/


2019-10-10 15:27875
用户头像

发布了 1843 篇内容, 共 109.9 次阅读, 收获喜欢 77 次。

关注

评论

发布
暂无评论
发现更多内容

网易易盾流量多发反外挂落地实践

网易智企

安全 反外挂

黑客入门指南,学习黑客必须掌握的技术

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

2023年北京.NET线下技术沙龙圆满落幕!

MASA技术团队

.net DDD MASA

深圳智慧公厕推进智慧城市建设

光明源智慧厕所

智慧城市

PostgreSQL技术内幕(八)源码分析 ——投影算子和表达式计算

酷克数据HashData

直播预告 | 博睿学院:无监督知识图谱与故障根因分析

博睿数据

智能运维 博睿数据 博睿学院

【ITCP联盟高管访谈】近一步,更进一步,去哪儿与ITCP联盟的此呼彼应——孙斌专访

Qunar技术沙龙

访谈 去哪儿网

《苏丹的复仇》携手华为HMS生态,实现用户、收入双增长

HarmonyOS SDK

HMS Core

中国物流集团携手用友启动ERP暨财务共享建设项目

用友BIP

财务共享

皖投集团:财务共享,迈出“智慧企业”第一步

用友BIP

财务共享

以财务共享中心建设,打造数字化创新引擎

用友BIP

财务共享

Python从0到1丨带你认识图像平滑的三种线性滤波

华为云开发者联盟

Python 人工智能 华为云 华为云开发者联盟 企业号 5 月 PK 榜

什么是Scrum?Scrum的理论基石

顿顿顿

Scrum 敏捷 敏捷开发 敏捷开发管理 敏捷开发管理工具

最新报告:腾讯云获得多个单项冠军

科技热闻

数据高效转储,生产轻松支撑

鲸品堂

数据库 语言 & 开发 企业号 5 月 PK 榜

支撑企业未来10年高增长,用友资金管理平台助力新零售企业逆境破局

用友BIP

新零售 资金管理

云计算遇上电动车,跑出新模式的数智化转型

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

基于超级App构建视角,探索不同的软件应用架构模式

FinFish

小程序容器 超级app 小程序技术 软件应用架构

常听人说并发量高达多少多少,这个值是怎么测的?

为自己带盐

Jmeter 压力测试

【ITCP联盟高管访谈】近一步,更进一步,去哪儿技术品牌建设之路——张宇专访

Qunar技术沙龙

访谈 去哪儿网

RocketMQ 在小米的多场景灾备实践案例

阿里巴巴云原生

阿里云 RocketMQ 云原生

飞鹤乳业携手用友,引领数字化财务共享管理新时代

用友BIP

财务共享

软件测试/测试开发丨学习笔记之Selenium 常见控件定位方法

测试人

软件测试 自动化测试 测试开发 selenium

MobTech ShareSDK|口令分享

MobTech袤博科技

预搜优化,页面TTI时长缩减50%!去哪儿网酒店预订体验优化经验分享~

Qunar技术沙龙

前端 去哪儿网

阿里巴巴开源的Spring Cloud Alibaba手册在GitHub上火了!完整版开放下载

采菊东篱下

架构 微服务

清华开源图文对话大模型!表情包解读有一手,奇怪的benchmark增加了

Openlab_cosmoplat

开源项目 开源社区 ChatGPT

用友助力中核集团建设财务共享中心新华发电分中心,实现业财融合

用友BIP

财务共享

华为云应用运维管理平台获评中国信通院可观测性评估先进级

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

ChatGPT与低代码开发:危机四伏、技术暴走!

加入高科技仿生人

人工智能 低代码 AI技术 ChatGPT

网易易盾流量多发反外挂落地实践

网易云信

安全 反外挂

举重若轻,用snowball迁移数据库上云_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章