事务管理

PHP PDO 事务与自动提交

旧街凉风 提交于 2019-12-01 19:03:38
现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的。 事务支持四大特性(ACID): 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 通俗地讲,在一个事务中执行的任何操作,即使是分阶段执行的,也能保证安全地应用于数据库,并在提交时不会受到来自其他连接的干扰。 事务操作也可以根据请求自动撤销(假设还没有提交),这使得在脚本中处理错误更加容易。 事务通常是通过把一批更改"积蓄"起来然后使之同时生效而实现的;这样做的好处是可以大大地提供这些更改的效率。 换句话说,事务可以使脚本更快,而且可能更健壮(不过需要正确地使用事务才能获得这样的好处)。 不幸的是,并非每种数据库都支持事务,因此当第一次打开连接时,PDO 需要在所谓的"自动提交"模式下运行。 自动提交模式意味着,如果数据库支持,运行的每个查询都有它自己的隐式事务,如果数据库不支持事务,则没有。 如果需要一个事务,则必须用 PDO::beginTransaction() 方法来启动。如果底层驱动不支持事务,则抛出一个 PDOException 异常(不管错误处理设置是怎样的,这都是一个严重的错误状态)。 一旦开始了事务,可用 PDO::commit() 或 PDO::rollBack()来完成,这取决于事务中的代码是否运行成功

MySQL事务

▼魔方 西西 提交于 2019-12-01 18:53:00
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! (1)在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 (2)事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。 (3)事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 (1)原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 (2)一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 (3)隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力

MySQL事务

☆樱花仙子☆ 提交于 2019-12-01 18:39:06
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! (1)在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 (2)事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。 (3)事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 (1)原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 (2)一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 (3)隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力

终于有人把分布式事务说清楚了!

↘锁芯ラ 提交于 2019-12-01 17:07:13
前言 这篇文章将给大家介绍一下对分布式事务的一些见解,并讲解分布式事务处理框架 TX-LCN 的执行原理,错误之处望各位不吝指正。 1. 什么情况下需要使用分布式事务? 使用的场景很多,先举一个常见的:在微服务系统中,如果一个业务需要使用到不同的微服务,并且不同的微服务对应不同的数据库。 打个比方:电商平台有一个客户下订单的业务逻辑,这个业务逻辑涉及到两个微服务,一个是库存服务(库存减一),另一个是订单服务(订单数加一),示意图如下: 如果在执行这个业务逻辑时没有使用分布式事务,当库存与订单其中一个出现故障时,就很可能出现这样的情况:库存数据库的值减少了 1,但是订单数据库没有变化;或是库存没变化,多了一个订单,也就是出现了数据不一致现象。 所以在类似的场合下我们要使用分布式事务,保证数据的一致性。 2. 分布式事务的解决思路 2.1引入:MySQL 中的两阶段提交策略 在谈分布式事务的解决思路之前,我们先来看看单一数据源是如何做事务处理的,我们可以从中获取一些启发。 我们以 MySQL 的 InnoDB 引擎为例,由于 MySQL 中有两套日志机制,一套是存储层的 redo log,另一套是 server 层的 binlog,每次更新数据都要对两个日志进行更新。为了防止写日志时只写了其中一个而没有写另外一个,MySQL 使用了一个叫 两阶段提交 的方式保证事务的一致性

MySQL运行机制原理&架构

谁说胖子不能爱 提交于 2019-12-01 16:48:42
1.MySQL知识普及: MySQL是一个开放源代码的关系数据库管理系统。 MySQL架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。 2.MySQL逻辑架构: 1).Connectors MySQL首先是一个网络程序,其在TCP之上定义了自己的 应用层协议 。所以要使用MySQL,我们可以编写代码,跟MySQL Server建立TCP连接,之后按照其定义好的协议进行交互。当然这样比较麻烦,比较方便的办法是调用SDK,比如Native C API、JDBC、PHP等各语言MySQL Connector,或者通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP连接上通过MySQL协议跟MySQL进行交互。 2).Connection Management 每一个基于TCP的网络服务都需要管理客户端链接,MySQL也不例外。MySQL会为每一个连接绑定一个线程,之后这个连接上的所有查询都在这个线程中执行。为了避免频繁创建和销毁线程带来开销,MySQL通常会缓存线程或者使用线程池,从而避免频繁的创建和销毁线程。 客户端连接到MySQL后,在使用MySQL的功能之前,需要进行认证,认证基于用户名、主机名、密码。如果用了SSL或者TLS的方式进行连接,还会进行证书认证。 3).SQL

微服务下分布式事务解决方案

让人想犯罪 __ 提交于 2019-12-01 16:24:30
摘抄并学习 1. 微服务的发展   微服务倡导将复杂的单体应用拆分成若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性。便于敏捷开发。当前微服务的开发框架非常多,比较著名的有 Dubbo、SpringCloud、thrift、grpc 等。 2. 微服务落地存在的问题   虽然现在微服务如火如荼,但对其实践仍处于探索阶段。很多中小型互联网公司鉴于经验技术实力等问题,微服务落地比较困难。主要有以下几个方面:   1)单体应用拆分为分布式系统后,进程间的通讯机制和故障处理措施变得更加复杂。   2)系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题非常突出。   3)微服务数量众多,其测试、部署、监控等都变得更加困难   随着 RPC(远程过程调用 Remote Procedure Call) 框架的成熟,第一个问题已经逐渐得到解决。例如 dubbo 可以支持多种通讯协议,springcloud 可以非常好的支持 restful 调用。对于第二个问题,现在还没有通用方案很好的解决微服务产生的事务问题。分布式事务已经成为微服务落地最大的阻碍,也是最具挑战性的一个技术难题。   以下介绍分布式事务的各种解决方案,重点解读阿里巴巴提出的分布式事务解决方案 —— GTS。 3. SOA分布式事务解决方案 3.1 基于 XA

MongoDB

為{幸葍}努か 提交于 2019-12-01 13:42:14
MongoDB简介 MongoDB是一个基于分布式文件存储的数据库。在高负载的情况下,添加更多的节点,可以保证服务器性能。由C++语言编写,旨在为web应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系型和非关系数据库之间的产品,是非关系数据库当中功能最丰富、最像关系数据库的。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。 MongoDB主要特点 一个面向文档存储的数据库,操作起来比较简单和容易 在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。 通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。 支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。 Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。 Map和Reduce。Map函数调用emit(key,value

IndexedDB

☆樱花仙子☆ 提交于 2019-12-01 13:18:38
一、IndexedDB 1、简介   随着浏览器功能增强,许多网站开始将大量数据保存在客户端,从而减少从服务器获取数据的操作,提高了响应速度。   cookie 由于大小不超过 4kb,肯定不合适。   LocalStorage 大小在 2.5 - 10 M间(不同浏览器不同,比如Chrome为 5M),且不提供索引、查找慢,也不合适。   IndexedDB 就比较合适了,是浏览器提供的本地数据库,它可以被网页脚本创建和操作。IndexedDB 允许储存大量数据,提供查找接口,还能建立索引提高查询效率。 2、特点 (1)采用键值对存储。   IndexedDB 内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括 JavaScript 对象。对象仓库中,数据以"键值对"的形式保存。 (2)异步处理。   IndexedDB 操作时采用异步处理,用户可以进行其它操作。 (3)支持事务。   IndexedDB 支持事务,即要么完成、要么失败,不会出现完成一半的状态。 (4)存储空间大、且支持二进制存储。 3、相关概念 (1)数据库(IDBDatabase 对象)   管理、存储数据的仓库。IndexedDB 数据库有版本的概念。同一个时刻,只能有一个版本的数据库存在。如果要修改数据库结构(新增或删除表、索引或者主键),只能通过升级数据库版本完成。

数据库分库分表思路

时光怂恿深爱的人放手 提交于 2019-12-01 13:17:39
转自: https://www.cnblogs.com/butterfly100/p/9034281.html 一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。 数据库分布式核心内容无非就是数据切分(Sharding),以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个数据库中,使得单一数据库中的数据量变小,通过扩充主机的数量缓解单一数据库的性能问题,从而达到提升数据库操作性能的目的。 数据切分根据其切分类型,可以分为两种方式:垂直(纵向)切分和水平(横向)切分 1、垂直(纵向)切分 垂直切分常见有垂直分库和垂直分表两种。 垂直分库就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与"微服务治理"的做法相似,每个微服务使用单独的一个数据库。如图: 垂直分表是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。在字段很多的情况下(例如一个大表有100多个字段),通过"大表拆小表",更便于开发与维护,也能避免跨页问题

分布式架构知识体系

馋奶兔 提交于 2019-12-01 12:21:15
作者 | 晓土 阿里巴巴高级工程师 姊妹篇阅读推荐 : 《 云原生时代,分布式系统设计必备知识图谱(内含22个知识点) 》 导读: 本文力求从分布式基础理论、架构设计模式、工程应用、部署运维、业界方案这几大方面,介绍基于 MSA(微服务架构)的分布式知识体系大纲,从而对 SOA 到 MSA 进化有着立体的认识;从概念上和工具应用上更近一步了解微服务分布式的本质,身临其境的感受如何搭建全套微服务架构的过程。 关注“阿里巴巴云原生”公众号,回复“ 分布 ”,即可下载分布式系统及其知识体系清晰大图! 随着移动互联网的发展和智能终端的普及,计算机系统早就从单机独立工作过渡到多机器协作,集群按照分布式理论构建出庞大复杂的应用服务,在分布式的基础上正进行一场云原生的技术革命,彻底打破传统的开发方式,解放了新一代的生产力。 分布式系统知识体系大图 关注“阿里巴巴云原生”公众号,回复“ 分布 ”,即可下载分布式系统及其知识体系清晰大图! 基础理论 SOA 到 MSA 的进化 SOA 面向服务架构 由于业务发展到一定程度后,需要对服务进行解耦,进而把一个单一的大系统按逻辑拆分成不同的子系统,通过服务接口来通讯。面向服务的设计模式,最终需要总线集成服务,而且大部分时候还共享数据库,出现单点故障时会导致总线层面的故障,更进一步可能会把数据库拖垮,所以才有了更加独立的设计方案的出现。 MSA 微服务架构