事务

RockerMq之事务消息

倾然丶 夕夏残阳落幕 提交于 2020-01-28 18:09:59
本篇博客的RocketMq版本为4.3.0,首先附上RocketMq事务消息的流程图,以下的实践也都是基于此流程图 生产端项目 RocketMqConfig配置生产者 package com.yj.producer.config; import org.apache.rocketmq.client.producer.TransactionMQProducer; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.yj.producer.listener.MyTransactionListener; @Configuration public class RocketMqConfig { @Value("${rocketmq.producer.groupName}") private String producerGroupName; @Value("${rocketmq.namesrv.addr}") private String nameServerAddress;

Loadrunner Webservice接口性能测试脚本编写优化总结

早过忘川 提交于 2020-01-28 08:54:36
本文主要介绍使用Loadrunner调用Webservice接口进行性能测试时,相关脚本编写及优化方法总结。 1. Webservice协议脚本编写流程 下面介绍使用Loadrunner 11调用Webservice 接口通用的流程与方法 1.1 新建脚本,选择"Webservice"协议 1.2 选择Manage Services->Import,输入URL(注意需要在Webservice地址后面加上?wsdl),最后选择Impoort 1.3 点击脚本中Action脚本中return 0前,后选择Add Service Call 1.4 在打开的New Web Service Call窗口中,选择输入参数inputXML,勾选Include argument in,在Value中可以随便填写一些字符(接下来脚本中,我们会做一些 参数化设置) 1.5 同理,选择输出参数中SubmitNLSMSRequestResult,后选择Save returned value in param,最后选择OK 这样调用一次Webservice 接口就保存在Action脚本中 1.6 参数化 在脚本中用" <mobileno>13312345678</mobileno><smscontent>飞信</smscontent>"(此接口输入参数示例)替换"xxx" 选中"13312345678

简单聊聊事务补偿机制

こ雲淡風輕ζ 提交于 2020-01-28 02:25:05
假设有如下的业务流程,用户1给用户2转账100元: 转账服务需要执行如下操作: 第1步. 在数据库连接1上执行:update 用户表 set (用户1的余额) = (用户1的余额)- 100; 第2步. 在数据库连接2上执行:update 用户表 set (用户2的余额) = (用户2的余额)+ 100; 可能的问题: 1:第1步操作过程中,数据库1挂了,转账服务无法得知对用户1的扣款操作是否成功; 2:第1步操作成功,第2步操作失败,转账服务回滚第1步的操作时,数据库1挂了; 3:第1步操作成功,第2步操作过程中,数据库2挂了,转账服务无法得知是否成功给用户2加了钱; 基于上面的问题,产生了如下的数据库设计: 转账流程变成了如下步骤: 第1步: 转账服务生成一个事务号,全局唯一; 第2步:转账服务在数据库1上执行事务: 开始事务: update 用户表 set (用户1的余额) = (用户1的余额)- 100; insert 事务表 (事务号,成功) 结束事务: 第3步:转账服务在数据库2上执行事务: 开始事务: update 用户表 set (用户2的余额) = (用户2的余额)+ 100; insert 事务表 (事务号,成功) 结束事务: 这样做的好处 当操作用户1的账户失败时,转账服务可以通过再次查询数据库1的事务表来判断操作是否成功; 当操作用户2的账户失败时

数据库基础名词

拜拜、爱过 提交于 2020-01-28 02:03:48
写在正文前:内容涉及到一些数据库的基础名词和及其简单介绍 存储引擎 数据库通过存储引擎进行CURD,存储引擎主要有:MyLsam,InnoDB,Memary,Archive,Federated 索引 索引是对数据库种一列或者多列的值进行排序的一种结构。 常见的索引原则: 1.为经常需要排序、分组、联合操作的字段建立索引。 2.为经常需要查询的字段建立索引。 3.限制索引的数目(索引太多,写操作速度降低) 4.尽量使用数据量少的索引 5.索引字段值较长的时候,最好使用值的前缀来索引。 6.最左前缀匹配原则 7.尽量选择区分度高的列作为索引 8.索引列不要参与计算 数据库三范式 第一范式的目的是确保每列的原子性 第二范式每个表只描述一件事情 第三范式是满足第二范式,并且表中的列不存在对非主键列的传递依赖。 数据库ACID 原子性:事务各部分是一个完整的操作,要么全部执行、要么全部不执行。 一致性:当事务处理完成之后,数据必须是一致的。 隔离性:对数据修改的所有并发事务是彼此隔离的,事务必须是独立的,不影响或者依赖其他事务。 永久性:事务完成之后,数据被永久保存。事务日志能够保证事务的一致性。 存储过程 一组为了完成特定功能的sql语句集,存储在数据库中,编译之后再次调用不需要编译,只要指定名称和传入参数(如果有参数)就可调用。 触发器 触发器是一段能自动执行的程序,是特殊的存储过程。

MySql事务

▼魔方 西西 提交于 2020-01-28 01:29:04
当一个业务逻辑需要多个sql完成时,如果其中某条sql语句出错,则希望整个操作都退回 使用事务可以完成退回的功能,保证业务逻辑的正确性 事务四大特性(简称ACID) 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行 一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致 隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的 持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障 要求:表的类型必须是innodb或bdb类型,才可以对此表使用事务 使用事务的情况:当数据被修改时,包括insert、update、delete 查看表的类型(查询通过表的创建语句) show create table students; 修改表的类型 alter table '表名' engine=innodb; 事务语句 开启begin; 提交commit; 回滚rollback; begin与commit之间,所有对库修改的语句都临时在内存中保存。只要没执行commit。可以随时通过rollback回滚。 执行commit后,修改的内容固化到硬盘中。 示例1 步骤1:打开两个终端,连接mysql

MySQL 事务与锁详解

吃可爱长大的小学妹 提交于 2020-01-27 17:15:22
1 什么是数据库的事务? 1.1 事务的典型场景 比如下单,会操作订单表,资金表,物流表等等,这个时候我们需要让这些操作都 在一个事务里面完成。在金融的系统里面事务配置是很常见的,比如行内转账的这种操 作,如果我们把它简单地理解为一个账户的余额增加,另一个账户的余额减少的情况(当 然实际上要比这复杂),那么这两个动作一定是同时成功或者同时失败的。 1.2 事务的定义 维基百科的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由 一个有限的数据库操作序列构成。 这里面有两个关键点, 第一个,它是数据库最小的工作单元,是不可以再分的。 第二个,它可能包含了一个或者一系列的 DML 语句,包括 insert delete update。 1.3 哪些存储引擎支持事务 InnoDB 支持事务,这个也是它成为默认的存储引擎的一个重要原因: https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html 另一个是 NDB。 1.4 事务的四大特性 第一个,原子性,Atomicity,也就是我们刚才说的不可再分,也就意味着我们对数 据库的一系列的操作,要么都是成功,要么都是失败,不可能出现部分成功或者部分失 败的情况,以刚才提到的转账的场景为例,一个账户的余额减少,对应一个账户的增加, 这两个一定是同时成功或者同时失败的。

Lock wait timeout exceeded; try restarting transaction(mysql事务锁)

半世苍凉 提交于 2020-01-27 14:48:23
现场环境客户要求删数据(界面没法直接操作),于是直接在数据库进行查询删除了,删完发现界面依然能查到删除后的数据,又用sql语句进行删除,发现报了错:Lock wait timeout exceeded; try restarting transaction(锁等待超时)。上网查了一波发现是删除后没有提交事务造成的(当前事务在等待其它事务释放锁资源造成的)。所以在此纪录下解决方法: 方法一:在mysql查询中执行以下指令 select * from information_schema.innodb_trx ,会查询到正在运行的事务 kill trx_mysql_thread_id ,然后在查询中kill掉就行 方法二:修改配置文件(没尝试) innodb_lock_wait_timeout 锁定等待时间改大 my.ini文件: #innodb_lock_wait_timeout = 50 修改为 innodb_lock_wait_timeout = 500 来源: https://www.cnblogs.com/wjup/p/11041282.html

事务回滚 @Transactional

筅森魡賤 提交于 2020-01-27 04:04:15
@Override @Transactional public Response cancel ( String ids ) { if ( DataUtil . isNotEmpty ( ids ) ) { String [ ] vehicleIds = ids . split ( "," ) ; List < ResVehicleVerifyStatus > listStatus = new ArrayList < > ( ) ; List < ResVehicleVerifyRecord > listRecord = new ArrayList < > ( ) ; for ( int i = 0 ; i < vehicleIds . length ; i ++ ) { ResVehicleVerifyStatus status = new ResVehicleVerifyStatus ( ) ; ResVehicleVerifyRecord record = new ResVehicleVerifyRecord ( ) ; status . setVehicleId ( vehicleIds [ i ] ) ; record . setVehicleId ( vehicleIds [ i ] ) ; listStatus . add ( status ) ;

LoadRunner之VuGen事务

耗尽温柔 提交于 2020-01-26 21:11:55
一、为什么学习事务? 需求: 1. 统计订票网站登录业务需要的具体时间; 2. 登录账户不是jojo,则登录业务失败; 问题:统计时间有很多办法可以做到,但如何把登录业务标记成功或失败呢? 二、什么是事务? 概念:事务(Transaction)是用户在应用软件上操作的一个业务或多种业务集合(actions)的统称; 作用: 1. 通过事务可标记业务开始和结束,并且可统计相应业务的操作时间(事务时间)【重点】 2. 通过事务状态机制,可判断相应业务执行的成功与失败;【了解】 3. 通过事务来衡量服务器性能; 三、添加事务 说明:LR添加事务有两种方式: 1). 录制脚本的时候添加【了解】 2). 运行脚本的时候添加【推荐】 3.1 添加事务-录制时添加【了解】 3.2 添加事务-运行脚本时添加【重点】 提示: 1. 插入事务开始 lr_start_transaction("Name") 1. 插入方式: 1). Ctrl+T 2). 鼠标右键Insert->Start Transaction 3). 工具栏菜单(Insert)->Start Transaction 2. 参数 Name:事务名称 2. 插入事务结束 lr_end_transaction("Name", "status") 1. 插入方式:参考插入事务开始 2. 参数 Name:事务名称和开始事务名相同; status

MySQL 常见的两种存储引擎

纵然是瞬间 提交于 2020-01-26 14:26:46
  MySQL两种常见的存储引擎有:MyISAM 和 InnoDB,两者区别如下: 1、count运算:MyISAM 有缓存表的 meta-data 元数据,元数据包括行数等,因此其做 COUNT(*) 查询时不需要消耗多少资源。而 InnoDB 就没有这个缓存。 2、事务和崩溃后的安全恢复:MyISAM强调的是性能,每次查询具备原子性,执行速度比 InnoDB 更快,但是 MyISAM 不提供事务的支持。而 InnoDB 支持事务、外部键等高级数据库功能。具有事务提交(commit)、回滚(rollback)和崩溃修复(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。 3、支持外键:InnoDB支持,MyISAM 不支持。   MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。 一般来说,如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。如果你的数据量很大(MyISAM支持压缩特性可以减少磁盘的空间占用),而且不需要支持事务时,MyISAM是最好的选择。 来源: https://www.cnblogs