事务管理

jdbc就是这么简单

匿名 (未验证) 提交于 2019-12-02 20:37:20
一、JDBC JAVA Database Connectivity java 数据库连接. JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。 SUN公司提供的一种数据库访问规则、规范, 由于数据库种类较多,并且java语言使用比较广泛,sun公司就提供了一种规范,让其他的数据库提供商去实现底层的访问规则。 我们的java程序只要使用sun公司提供的jdbc驱动即可。 我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。 1.Driver接口 Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如: 装载MySql驱动:Class.forName("com.mysql.jdbc.Driver"); 装载Oracle驱动

聊聊分布式事务

偶尔善良 提交于 2019-12-02 19:23:28
事务就是一个会话过程中,对上下文的影响是一致的,要么所有的更改都做了,要么所有的更变都撤销掉。就要么生,要么死。没有半死不死的中间不可预期状态。 参考下薛定谔的猫。 事务是为了保障业务数据的完整性和准确性的。 分布式事务,常见的两个处理办法就是两段式提交和补偿。 两段式提交典型的就是XA,有个事务协调器,告诉大家,来都准备好提交,大家回复,都准备好了,然后协调器告诉大家,一起提交,大家都提交了。 补偿比较好理解,先处理业务,然后定时或者回调里,检查状态是不是一致的,如果不一致采用某个策略,强制状态到某个结束状态(一般是失败状态),然后就世界太平了。典型的就是冲正操作。 准备好了以后,如果没有问题,收到提交,所有人都开始提交。 这个时候,比如对数据库来说,有redo日志的。 如果某个数据库这时候宕机了,那么它重启的时候,先执行检查,也会把上一次的这些操作都提交掉的。所以各个点的数据都是一致的。 问题 1:比如 一个业务要调用很多的服务都是写操作,如果有其中一个写的服务失败了,怎么办 ?假设 4个写的吧,有2个写失败了 。 kimmking:淘宝之类的网站一般的做法是,如果4个都成功才算成功,那么这次提交时4个写都设置成一个中间状态,先容许不一致。然后4个执行完成了以后,回调或是定时任务里检查这4个数据是不是一致的,如果一致就全部置为成功状态,如果不一致就全部置为失败。

分布式事务的2PC、3PC和TCC

妖精的绣舞 提交于 2019-12-02 18:59:18
1、2PC协议   2PC 是二阶段提交(Two-phase Commit)的缩写,顾名思义,这个协议分两阶段完成。第一个阶段是准备阶段,第二个阶段是提交阶段,准备阶段和提交阶段都是由事务管理器(协调者)发起的,协调的对象是资源管理器(参与者)。二阶段提交协议的概念来自 X/Open 组织提出的分布式事务的规范 XA 协议,协议主要定义了(全局)事务管理器和(局部)资源管理器之间的接口。XA 接口是双向的系统接口,在事务管理器以及一个或多个资源管理器之间形成通信桥梁。Java 平台上的事务规范 JTA(Java Transaction API)提供了对 XA 事务的支持,它要求所有需要被分布式事务管理的资源(由不同厂商实现)都必须实现规定接口(XAResource 中的 prepare、commit 和 rollback 等)。   两阶段如下: ① 准备阶段   协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,参与者会写 redo 和 undo 日志,然后锁定资源,执行操作,但是并不提交。 ② 提交阶段   如果每个参与者明确返回准备成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者明确返回准备失败,也就是预留资源或者执行操作失败,协调者向参与者发起中止指令

Mysql高手系列 - 第27篇:mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发设计及跨库转账问题

一笑奈何 提交于 2019-12-02 18:24:29
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能。 欢迎大家加我微信itsoku一起交流java、算法、数据库相关技术。 这是Mysql系列第27篇。 本篇文章我们先来看一下mysql是如何确保数据不丢失的,通过本文我们可以了解mysql内部确保数据不丢失的原理,学习里面优秀的设计要点,然后我们再借鉴这些优秀的设计要点进行实践应用,加深理解。 预备知识 mysql内部是使用b+树的结构将数据存储在磁盘中,b+树中节点对应mysql中的页,mysql和磁盘交互的最小单位为页,页默认情况下为16kb,表中的数据记录存储在b+树的叶子节点中,当我们需要修改、删除、插入数据时,都需要按照页来对磁盘进行操作。 磁盘顺序写比随机写效率要高很多,通常我们使用的是机械硬盘,机械硬盘写数据的时候涉及磁盘寻道、磁盘旋转寻址、数据写入的时间,耗时比较长,如果是顺序写,省去了寻道和磁盘旋转的时间,效率会高几个数量级。 内存中数据读写操作比磁盘中数据读写操作速度高好多个数量级。 mysql确保数据不丢失原理分析 我们来思考一下,下面这条语句的执行过程是什么样的: start transaction; update t_user set name = '路人甲Java' where user_id = 666; commit; 按照正常的思路,通常过程如下: 找到user_id

spring配置事务管理及事物传播行为介绍(@Transactional(propagation = Propagation.SUPPORTS))

落花浮王杯 提交于 2019-12-02 16:39:58
转载 Spring配置事务管理,service端通过@Transactional注解 使用步骤: 步骤一、在spring配置文件中引入<tx:>命名空间 <beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:tx=”http://www.springframework.org/schema/tx” xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd”> 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 <tx:annotation-driven transaction-manager=”transactionManager” proxy-target-class=

大白话关系型数据库:索引,事务,锁

て烟熏妆下的殇ゞ 提交于 2019-12-02 16:04:40
感谢阅读。也欢迎大家可以去看《MySQL技术内幕》和橘黄色的《算法》。 前言 数据库 是软件开发的核心,因为一个软件如果要有状态,也就是它记得你什么时候操作过什么,那么数据要持久化,总要存储在某些地方,这些地方也就是数据库。当然,计算机上面的文件夹,文件,你也可以把它当成数据库,也就是文件数据库,现在很火的hadoop大数据系统其实就是一个分布式文件数据库。 在没有计算机的年代,记账相关的财务都是用纸来记录的,叫账本。而现在,我们有了计算机,有了编程语言,有了数据库系统,所以我们可以编程,将数据插入数据库,查找出数据库中的数据。 历史的选择,关系型数据库因为很符合人的直觉,所以使用的范围最广。顾名思义,关系型数据库,就是数据之间是有关系约束。在这篇文章中, 关系型数据库 这个词指的是持久化的数据组织形式的综合体,而 关系型数据库管理系统 指的是操纵这些数据组织形式综合体的软件组合。一个是数据本身,一个是操纵数据软件本身。 大白话 关系型数据库,可以包含很多个二维化的数据结构,叫做表,有行列之分,就像棋盘一样。列是字段,比如性别,年龄,姓名,行是一行行记录: 表1: 人口登记表 编号 性别 年龄 姓名 1 男 22 大大 2 女 34 次奥 非常的直观。 每一行记录可以有个主键,不可重复,比如编号,用以区分这行记录。还可以多个表之间有关系约束,叫做外键: 表2: 资产表 编号

Ceph BlueStore 和双写问题

心已入冬 提交于 2019-12-02 14:53:20
论开源分布式存储,Ceph大名鼎鼎。用同一个存储池融合提供块存储、对象存储、集群文件系统。在国内有近年使用量迅速攀升,Ceph Day峰会也搬到北京来开了。 大型公司内部研发云虚拟化平台,常使用开源方案Openstack或者Kubernetes,配套的为虚机或容器提供块存储的开源方案,几乎为Ceph莫属。对象存储几年发展迅速,图像、视频、网站资源等皆可适用,有初创公司基于Ceph搭建存储服务方案。企业存储方面,国外有Redhat收购了Inktank,后者由Ceph初创作者Sage Weil创建;国内有XSky星辰天合,聚集了大量从早期就开始专注Ceph的专家。(P.S.关于国内谁在大规模使用Ceph,上Ceph Day看Slides可以知道。) 可以将Ceph理解为分布式管理层,加上每个存储节点(OSD)的存储后端。社区成熟的存储后端使用FileStore,用户数据被映射成对象,以文件的形式存储在文件系统上。文件系统可以是EXT4、BtrFS、XFS等。最近两年,因为FileStore的种种问题,由Sage Wei推动,Ceph社区合力推出了新的存储后端,BlueStore。 BlueStore有独特的架构,解决了Ceph社区一直烦恼的FileStore的日志双写问题,测试性能比FileStore提高了一倍。这让人非常想深入剖析BlueStore。另一方面

大白话关系型数据库:索引,事务,锁

瘦欲@ 提交于 2019-12-02 14:53:04
感谢阅读。也欢迎大家可以去看《MySQL技术内幕》和橘黄色的《算法》。 前言 数据库是软件开发的核心,因为一个软件如果要有状态,也就是它记得你什么时候操作过什么,那么数据要持久化,总要存储在某些地方,这些地方也就是数据库。当然,计算机上面的文件夹,文件,你也可以把它当成数据库,也就是文件数据库,现在很火的 hadoop 大数据系统其实就是一个分布式文件数据库。 在没有计算机的年代,记账相关的财务都是用纸来记录的,叫账本。而现在,我们有了计算机,有了编程语言,有了数据库系统,所以我们可以编程,将数据插入数据库,查找出数据库中的数据。 历史的选择,关系型数据库因为很符合人的直觉,所以使用的范围最广。顾名思义,关系型数据库,就是数据之间是有关系约束。在这篇文章中, 关系型数据库 这个词指的是持久化的数据组织形式的综合体,而 关系型数据库管理系统 指的是操纵这些数据组织形式综合体的软件组合。一个是数据本身,一个是操纵数据软件本身。 大白话 关系型数据库,可以包含很多个二维化的数据结构,叫做表,有行列之分,就像棋盘一样。列是字段,比如性别,年龄,姓名,行是一行行记录: 表1: 人口登记表 编号 性别 年龄 姓名 1 男 22 大大 2 女 34 次奥 非常的直观。 每一行记录可以有个主键,不可重复,比如编号,用以区分这行记录。还可以多个表之间有关系约束,叫做外键: 表2: 资产表 编号

面试必问:ACID/CAP

会有一股神秘感。 提交于 2019-12-02 14:51:57
转载: https://www.jdon.com/artichect/acid-cap.html ACID和CAP的详尽比较 事务机制ACID和CAP理论是数据管理和分布式系统中两个重要的概念,很不巧,这两个概念中都有相同的“C”代表 "Consistency" 一致性,但是实际上是完全不同的意义,下面是比较两个概念的不同之处。 什么是ACID? 事务的定义和实现一直随着数据管理的发展在演进,当计算机越来越强大,它们就能够被用来管理越来越多数据,最终,多个用户可以在一台计算机上共享数据,这就导致了一个问题,当一个用户修改了数据而另外一个还在使用旧数据进行计算过程中,这里就需要一些机制来保证这种情况不会发生。 ACID规则原来是在1970被Jim Gray定义,ACID事务解决了很多问题,但是仍然需要和性能做平衡协调,事务越强,性能可能越低,安全可靠性和高性能是一对矛盾。 一个事务是指对数据库状态进行改变的一系列操作变成一个单个序列逻辑元操作,数据库一般在启动时会提供事务机制,包括事务启动 停止 取消或回滚。 但是上述事务机制并不真的实现“事务”,一个真正事务应该遵循ACID属性,ACID事务才真正解决事务,包括并发用户访问同一个数据表记录的头疼问题。 ACID的定义: Atomic原子性: 一个事务的所有系列操作步骤被看成是一个动作,所有的步骤要么全部完成要么一个也不会完成

MySQL数据库-简单概念和数据库操作

非 Y 不嫁゛ 提交于 2019-12-02 11:45:22
数据库 什么是数据库:存储数据的仓库,按照一定的数据结构来组织,管理存储数据,还提供了增删改查的功能。 事务 什么是事务: 将一组有序的增删改操作,当做一个独立的执行单元,如果操作都成功,那么事务就执行成功,如果有一个操作执行失败,真个事务都失败,事务将会执行回滚,恢复到事务开始之前的状态。 事物的四大特性 原子性:将事务看做最小的执行单元,不可分割,要么都成功,要么都失败。 一致性:事务在执行前和执行后的状态都保持一致。 隔离性:当多用户并发访问数据库时,数据库会给每个用户开启一个事务,每个事务之间相互隔离,互补影响。 持久性:事务一旦执行成功,数据的变化将会永久性的作用于真个数据库,就算数据库出现故障也不会影响数据。 在不考虑隔离性的情况下会出现的问题 脏读:当一个未提交的事务,使用了另一个未提交事务的数据 不可重复度:A事务重复读取一条数据,在这期间B事务修改了这条数据,导致A事务两次读取的数据不一样 幻读:A事务读取一张表所有数据,并做了统计计算,B事务修改了这张表的某一条数据,导致A事务的结构和实际情况出现偏差,类似出现幻觉。 四种隔离级别 read uncommit 读未提交:最低的隔离级别,会出现以上三个问题的任意一种情况 read commit 读已提交:可以避免脏读 repeatable read 可重复读:可以避免脏读和不可重复读 serializable