首页 文章 精选 留言 我的

精选列表

搜索[分代式],共10000篇文章
优秀的个人博客,低调大师

5分钟带您了解DRS录制回放

什么是DRS录制回放? DRS录制回放是将源数据库发生的真实业务流量,在目标数据库模拟执行,从而观察和检验目标数据库的功能和性能表现。录制回放主要分为录制、回放两个阶段,录制过程是从源数据库上将所需时间段内的全部SQL原语句(包括增、删、改、查)通过审计日志下载、录制代理等进行采集;回放是将采集到的全部SQL语句在目标数据库上进行执行(目标数据库需有源数据库的初始数据)。 DRS录制回放与DRS、UGO的关系 数据复制服务(Data Replication Service,简称DRS)是一种易用、稳定、高效,用于数据库实时迁移和数据库实时同步的云服务,着重于数据库毫秒级数据同步,支持同构异构数据库之间的数据传输/搬迁,降低数据库之间数据流通的复杂性,减少数据传输成本。 数据库和应用迁移 UGO(Database and Application Migration UGO,简称UGO)是专注于异构数据库结构迁移的云服务,可将源数据库中的DDL、DML和DCL一键自动转换为华为云GaussDB的SQL语法,最大化降低用户数据库的迁移成本。 录制回放是DRS提供的业务仿真特性,结合DRS+UGO,以及DRS提供的数据一致性对比能力,形成了华为云数据库迁移整体解决方案,以保障客户割接过程的平滑性以及割接后数据库的稳定可靠运行。 技术原理 1.初始数据生成 在录制回放开始前,需要为目标数据库创建初始数据,初始数据的来源是源数据库某一时刻的快照数据。一致性模式场景下需要构建两个目标数据库,以某商业数据库(以下简称X数据库)到GaussDB为例,一个是X数据库回放数据库,一个是GaussDB回放数据库,两个回放数据库的初始数据必须完全一致。X数据库回放数据库的初始数据可以通过X数据库的备份恢复机制生成,GaussDB回放库的初始数据可以通过DRS数据同步能力,把X数据库回放数据库的初始数据全量同步过来。两个回放数据库的初始数据生成之后,建议做一次数据对比,确保数据一致。 2.流量录制 公有云场景主要支持自建或其他云上的MySQL生态数据库到华为云RDS for MySQL、GaussDB(for MySQL)的录制回放,流量录制以源数据库提供的全量SQL、审计日志等技术为主。 具体流程如下: 1) 在源数据库上开启审计日志或者全量SQL,等待业务执行一段时间。 2) 将业务执行期间生成的审计日志或者全量SQL上传到华为云OBS。 3) 在DRS上创建录制回放任务,选择上传到OBS的审计日志或全量SQL文件,DRS录制回放任务会读取审计日志或全量SQL文件,根据任务配置的源数据库类型解析出数据文件中的SQL信息,包含SQL语句、SQL类型、SQL执行时间、Schema名称、Session ID、客户端IP等,根据SQL语句的执行时间进行分片存储在元数据库中,在目标数据库上进行回放。 HCS场景主要支持常用自建数据库到GaussDB等几条链路的录制回放能力,流量录制均基于网络旁路抓包与协议解析技术,通过部署抓包Agent,在服务器上对数据库端口进行TCP/IP网络数据包抓取,分析推测出业务执行的SQL信息,该技术对源数据库影响极小且SQL抓取率极高。具体流程如下: 1) 在源数据库上部署流量采集Agent包。 2) Agent采集服务器上对应数据库端口的TCP/IP网络包,通过UDP协议发给流量采集器,生成流量数据文件。 3) 流量解析模块读取流量数据文件,分析推测出业务执行的SQL信息,包含连接ID、客户端类型、SQL类型、SQL语句、绑定变量值、执行开始时间、执行结束时间、执行是否成功、存储过程参数等信息,根据SQL语句的执行时间进行分片存储在元数据库中,在目标数据库上进行回放。 3.仿真回放 将流量录制的SQL语句在目标上根据配置的回放模式进行回放,实现业务SQL的兼容性验证、执行性能评估、结果一致性验证等。具体原理如下: 1) 异构场景下,会对流量录制的SQL语句进行语法转换,转换成目标数据库支持的语法,避免因为SQL语法的差异导致在目标数据库回放时出现语法错误。 2) 语法转换成功后,通过流量控制器将待回放的SQL语句根据不同的回放模式进行调度控制,以便验证不同场景的回放结果。流量控制器支持三种回放模式: 仿真模式:完全模拟源数据库的流量和并发进行回放,以便验证相同压力下目标数据库的运行情况。 摸高模式:把源数据库流量等比例成倍增加压力,以便验证目标数据库可以承受的最大压力情况。 一致性模式:以单并发的方式在两个目标数据库回放,确保回放的顺序完全一致,以达到回放后的数据也是一致的目的。回放完成后可通过数据对比工具对比两个目标库的数据,在排除了幂等SQL的前提下,验证所有SQL是否在两个目标库上语义完全一致。 3) SQL回放器往目标数据库中并发回放SQL,场景不同,回放方式也不同。仿真和摸高模式,采用多并发回放,两个目标数据库是独立的,互不干扰。一致性模式,采用单并发回放,两个目标数据库回放是同步,即对于一条SQL,先回放同构目标数据库,成功之后再回放异构目标数据库,如果同构目标数据库回放失败,则该SQL就不再异构目标数据库上回放了。 4) 回放完成的SQL会经过回放分析器进行分析,将回放异常的结果以及根据配置的慢SQL标准分析得出的慢SQL结果存入回放记录表中。 应用场景 数据库兼容性和性能验证 互联网客户将云数据库搬迁到华为云数据库RDS for MySQL或GaussDB(for MySQL),以及金融客户使用华为云GaussDB数据库替代传统数据库,可以采用录制回放验证华为云数据库的稳定性和性能。 数据库重大问题复现定位 针对异构数据库搬迁,如某商业数据库搬迁到GaussDB,如内核做了该商业数据库类型的兼容性或者使用UGO进行对象迁移,可以采用录制回放验证存储过程、触发器等对象的执行成功率和结果的正确性。 数据库大版本间升级验证 RDS for MySQL、GaussDB(for MySQL)及GaussDB从各自的低版本升级到高版本,可以采用录制回放验证版本升级后是否存在功能变化或性能劣化。 DRS录制回放,通过业务仿真提前感知业务稳定性和性能,保障客户割接后数据库的稳定可靠运行。 点击关注,第一时间了解华为云新鲜技术~

优秀的个人博客,低调大师

五分钟了解什么是Mybatis(超详细)

MyBatis框架是什么? MyBatis 框架: MyBatis 本是apache 的一个开源项目 iBatis, 2010 年这个项目由apache software foundation 迁移到了google code,并且改名为 MyBatis 。2013 年 11 月迁移到Github。 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 通过本视频的学习,可以在最短的时间内学会使用持久层框架MyBatis,在该视频中没有废话,都是干货,该视频的讲解不是学术性研究,项目中用什么,这里就讲什么,如果您现在项目中马上要使用MyBatis框架,那么您只需要学习完,就可以顺利的使用MyBatis开发了。 在线观看:2020最新MyBatis教程【IDEA版】-MyBatis从入门到精通_哔哩哔哩_bilibili 资料下载:Mybatis视频教程全套免费下载【适合零基础入门学习】 - 动力节点 (bjpowernode.com) MyBatis解决的主要问题 减轻使用JDBC 的复杂性,不用编写重复的创建Connetion , Statement ; 不用编写关闭资源代码。 直接使用java 对象,表示结果数据。让开发者专注 SQL 的处理。 其他分心的工作由MyBatis 代劳。 MyBatis 可以完成: 1. 注册数据库的驱动,例如Class.forName(“com.mysql.jdbc.Driver”)) 2. 创建JDBC 中必须使用的 Connection , Statement, ResultSet 对象 3. 从xml 中获取sql,并执行sql 语句,把ResultSet 结果转换java 对象 List<Student> list = new ArrayLsit<>(); ResultSet rs = state.executeQuery(“select * from student”); while(rs.next){ Student student = new Student(); student.setName(rs.getString(“name”)); student.setAge(rs.getInt(“age”)); list.add(student); } 4. 关闭资源 ResultSet.close() , Statement.close() , Conenection.close() 入门案例 MyBatis 开发准备 搭建MyBatis 开发环境,实现第一个案例 使用Mybatis 准备 下载 mybatishttps://github.com/mybatis/mybatis-3/releases 搭建MyBatis 开发环境 (1) 创建 mysql 数据库和表 数据库名 ssm ;表名student CREATE TABLE `student` ( `id` int(11) NOT NULL , `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; (2) 创建 maven 工程 创建maven 工程,信息如下: 模板: 工程坐标: (3) 删除默认创建的 App 类文件 (4) 加入 maven 坐标 pom.xml 加入maven 坐标: (5) 加入 maven 插件 (6) 编写 Student 实体类 创建包 com.bjpowernode.domain, 包中创建Student 类 (7) 编写 Dao 接口 StudentDao (8) 编写 Dao 接口 Mapper 映射文件 StudentDao.xml 要求: 1. 在dao 包中创建文件StudentDao.xml 2. 要StudentDao.xml 文件名称和接口StudentDao 一样,区分大小写的一样。 (9) 创建 MyBatis 主配置文件 项目src/main 下创建 resources 目录,设置 resources 目录为 resources root 创建主配置文件:名称为mybatis.xml 说明:主配置文件名称是自定义的,内容如下: 支持中文的url jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8 (10) 创建测试类 MyBatisTest src/test/java/com/bjpowernode/ 创建MyBatisTest.java 文件 (11) 配置日志功能 mybatis.xml 文件加入日志配置,可以在控制台输出执行的sql 语句和参数 insert 操作 (1) StudentDao 接口中增加方法 int insertStudent(Student student); (2) StudentDao.xml 加入 sql 语句 (3) 增加测试方法 MyBatis 对象分析 对象使用 SqlSession , SqlSessionFactory 等 (1) Resources 类 Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析资源文件,返回不同类型的IO 流对象。 (2) SqlSessionFactoryBuilder 类 SqlSessionFactory 的创建,需要使用 SqlSessionFactoryBuilder 对象的build()方法。由于 SqlSessionFactoryBuilder 对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。所以,一般会将该 SqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁。 (3) SqlSessionFactory 接口 SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所以一个应用只需要一个该对象即可。创建 SqlSession 需要使用SqlSessionFactory 接口的的openSession()方法。 openSession(true):创建一个有自动提交功能的 SqlSession openSession(false):创建一个非自动提交功能的 SqlSession,需手动提交 openSession():同 openSession(false) (4) SqlSession 接口 SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,一次会话以 SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。 SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close()方法,将其关闭。再次需要会话,再次创建。 SqlSession 在方法内部创建,使用完毕后关闭。 创建工具类 (1) 创建 MyBatisUtil 类 package com.bjpowernode.common; (2) 使用 MyBatisUtil 类 MyBatis 使用传统 Dao 开发方式 使用Dao 的实现类,操作数据库 Dao 开发 (1) 创建 Dao 接口实现类 public class StudentDaoImpl implements StudentDao (2) 实现接口中 select 方法 测试查询操作: MyBatisTest 类中创建StudentDaoImpl 对象 (3) 实现接口中 insert 方法 测试insert 传统Dao 开发方式的分析 在前面例子中自定义Dao 接口实现类时发现一个问题:Dao 的实现类其实并没有干什么实质性的工作,它仅仅就是通过 SqlSession 的相关 API 定位到映射文件mapper 中相应 id 的 SQL 语句,真正对 DB 进行操作的工作其实是由框架通过mapper 中的 SQL 完成的。 所以,MyBatis 框架就抛开了Dao 的实现类,直接定位到映射文件mapper 中的相应 SQL 语句,对DB 进行操作。这种对Dao 的实现方式称为Mapper 的动态代理方式。 Mapper 动态代理方式无需程序员实现Dao 接口。接口是由 MyBatis 结合映射文件自动生成的动态代理实现的。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册