亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

事務(wù)Transaction

DirtyMind / 2790人閱讀

摘要:只有在事務(wù)確定正確提交之后,才會(huì)顯示該事務(wù)對(duì)數(shù)據(jù)的改變。不允許不一致現(xiàn)象的出現(xiàn)。

@[TOC]

為什么寫這系列的文章

在日常的工作和開發(fā)中,接觸最多的便是與數(shù)據(jù)庫打交道,無論你使用什么框架進(jìn)行開發(fā)都繞不開事務(wù)的管理. 在Java開發(fā)中你可能會(huì)接觸很多ORM框架,無論是Hibernate、MyBatis、還是Spring Jdbc 都會(huì)遇到事務(wù)的相關(guān)操作,再到中大型項(xiàng)目,你還會(huì)遇到單一數(shù)據(jù)源本地事務(wù)、多數(shù)據(jù)源本地事務(wù)、分布式事務(wù)、分布式多數(shù)據(jù)源事務(wù)等各種奇葩環(huán)境,數(shù)據(jù)的一致性也會(huì)面臨各種挑戰(zhàn),在這時(shí)如何游刃有余的處理數(shù)據(jù)一致性就考驗(yàn)?zāi)銓?duì)事務(wù)的理解,也正是這系列文章寫作的真正原因.

由于我換工作原因,先后在峰鳥科技、人人網(wǎng)、國家電網(wǎng)待過一段時(shí)間,先后接觸了不同的ORM框架

峰鳥科技
在這里由于SQL比較靈活,同時(shí)考慮到性能問題,這里直接使用的Spring JDBC,為了提高開發(fā)效率,我也開發(fā)了一個(gè)簡單ORM框架,用來將javabean 和 數(shù)據(jù)庫表信息進(jìn)行關(guān)聯(lián),提供了簡單的增刪改查和分頁功能,這時(shí)候也是我初步接觸框架的開發(fā),接觸反射、代理等功能

人人網(wǎng)
在這里先后使用 Python 和 Java 進(jìn)行開發(fā),用過MyBatis、Django-orm、sqlalchemy、JPA、Jade等ORM框架。其中Jade是人人網(wǎng)自行開發(fā)的ORM框架,使用簡單,支持條件化語句、支持多數(shù)據(jù)源切換和多數(shù)據(jù)源事務(wù)功能,相對(duì)MyBatis來說,使用方式和功能更加友好,強(qiáng)大。

國家電網(wǎng)
在這里主要使用的MyBaits,第一次看見Spring事務(wù)注解可以添加到類上而不是方法上,這也說明你懂的還是不多

通過不同的經(jīng)歷,也先后接觸到了JDBC事務(wù)、Spring事務(wù)、Hibernate事務(wù)、MyBaits事務(wù)、多數(shù)據(jù)源事務(wù)、分布式事務(wù)的使用和解決方案,這里總結(jié)一下

事務(wù)概念

事務(wù)(Transaction):一般是指要做的或所做的事情。在計(jì)算機(jī)術(shù)語中是指訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit)。

數(shù)據(jù)庫事務(wù)(Database Transaction):是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作,要么完全地執(zhí)行,要么完全地不執(zhí)行。 事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會(huì)永久更新面向數(shù)據(jù)的資源。通過將一組相關(guān)操作組合為一個(gè)要么全部成功要么全部失敗的單元,可以簡化錯(cuò)誤恢復(fù)并使應(yīng)用程序更加可靠。一個(gè)邏輯工作單元要成為事務(wù),必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。事務(wù)是數(shù)據(jù)庫運(yùn)行中的邏輯工作單位,由DBMS中的事務(wù)管理子系統(tǒng)負(fù)責(zé)事務(wù)的處理。

ACID

atomicity 原子性

原子性:操作這些指令時(shí),要么全部執(zhí)行成功,要么全部不執(zhí)行。只要其中一個(gè)指令執(zhí)行失敗,所有的指令都執(zhí)行失敗,數(shù)據(jù)進(jìn)行回滾,回到執(zhí)行指令前的數(shù)據(jù)狀態(tài)。

consistency 一致性

一致性:事務(wù)的執(zhí)行使數(shù)據(jù)從一個(gè)狀態(tài)轉(zhuǎn)換為另一個(gè)狀態(tài),但是對(duì)于整個(gè)數(shù)據(jù)的完整性保持穩(wěn)定。

isolation 隔離性

隔離性:在該事務(wù)執(zhí)行的過程中,無論發(fā)生的任何數(shù)據(jù)的改變都應(yīng)該只存在于該事務(wù)之中,對(duì)外界不存在任何影響。只有在事務(wù)確定正確提交之后,才會(huì)顯示該事務(wù)對(duì)數(shù)據(jù)的改變。其他事務(wù)才能獲取到這些改變后的數(shù)據(jù)。

durability 持久性

持久性:當(dāng)事務(wù)正確完成后,它對(duì)于數(shù)據(jù)的改變是永久性的。

并發(fā)事務(wù)導(dǎo)致的問題

在許多事務(wù)處理同一個(gè)數(shù)據(jù)時(shí),如果沒有采取有效的隔離機(jī)制,那么并發(fā)處理數(shù)據(jù)時(shí),會(huì)帶來一些的問題。

臟讀(Dirty Read)

當(dāng)一個(gè)事務(wù)讀取另一個(gè)事務(wù)尚未提交的修改時(shí),產(chǎn)生臟讀。

同一事務(wù)內(nèi)不是臟讀。 一個(gè)事務(wù)開始讀取了某行數(shù)據(jù),但是另外一個(gè)事務(wù)已經(jīng)更新了此數(shù)據(jù)但沒有能夠及時(shí)提交。這是相當(dāng)危險(xiǎn)的,因?yàn)楹芸赡芩械牟僮鞫急换貪L,也就是說讀取出的數(shù)據(jù)其實(shí)是錯(cuò)誤的。

非重復(fù)讀(Nonrepeatable Read)

一個(gè)事務(wù)對(duì)同一行數(shù)據(jù)重復(fù)讀取兩次,但是卻得到了不同的結(jié)果。同一查詢?cè)谕皇聞?wù)中多次進(jìn)行,由于其他提交事務(wù)所做的修改或刪除,每次返回不同的結(jié)果集,此時(shí)發(fā)生非重復(fù)讀。

幻讀(Phantom Reads)

事務(wù)在操作過程中進(jìn)行兩次查詢,第二次查詢的結(jié)果包含了第一次查詢中未出現(xiàn)的數(shù)據(jù)(這里并不要求兩次查詢的SQL語句相同)。這是因?yàn)樵趦纱尾樵冞^程中有另外一個(gè)事務(wù)插入數(shù)據(jù)造成的。

當(dāng)對(duì)某行執(zhí)行插入或刪除操作,而該行屬于某個(gè)事務(wù)正在讀取的行的范圍時(shí),會(huì)發(fā)生幻像讀問題。

丟失修改(Lost Update)

第一類:當(dāng)兩個(gè)事務(wù)更新相同的數(shù)據(jù)源,如果第一個(gè)事務(wù)被提交,第二個(gè)卻被撤銷,那么連同第一個(gè)事務(wù)做的更新也被撤銷。

第二類:有兩個(gè)并發(fā)事務(wù)同時(shí)讀取同一行數(shù)據(jù),然后其中一個(gè)對(duì)它進(jìn)行修改提交,而另一個(gè)也進(jìn)行了修改提交。這就會(huì)造成第一次寫操作失效。

事務(wù)隔離

為了兼顧并發(fā)效率和異??刂?,在標(biāo)準(zhǔn)SQL規(guī)范中,定義了4個(gè)事務(wù)隔離級(jí)別.

讀未提交(Read Uncommitted)

直譯就是"讀未提交",意思就是即使一個(gè)更新語句沒有提交,但是別的事務(wù)可以讀到這個(gè)改變。

Read Uncommitted允許臟讀。

讀已提交(Read Committed)

直譯就是"讀提交",意思就是語句提交以后,即執(zhí)行了 Commit 以后別的事務(wù)就能讀到這個(gè)改變,只能讀取到已經(jīng)提交的數(shù)據(jù)。Oracle等多數(shù)數(shù)據(jù)庫默認(rèn)都是該級(jí)別。

Read Commited 不允許臟讀,但會(huì)出現(xiàn)非重復(fù)讀。

可重復(fù)讀(Repeatable Read):

直譯就是"可以重復(fù)讀",這是說在同一個(gè)事務(wù)里面先后執(zhí)行同一個(gè)查詢語句的時(shí)候,得到的結(jié)果是一樣的。

Repeatable Read 不允許臟讀,不允許非重復(fù)讀,但是會(huì)出現(xiàn)幻象讀。

串行讀(Serializable)

直譯就是"序列化",意思是說這個(gè)事務(wù)執(zhí)行的時(shí)候不允許別的事務(wù)并發(fā)執(zhí)行。完全串行化的讀,每次讀都需要獲得表級(jí)共享鎖,讀寫相互都會(huì)阻塞。

Serializable 不允許不一致現(xiàn)象的出現(xiàn)。

通過不同的隔離級(jí)別,可以防止一些并發(fā)事務(wù)問題,同時(shí)級(jí)別越高則相應(yīng)性能越低,這個(gè)設(shè)置需要根據(jù)實(shí)際場景進(jìn)行設(shè)置.

下一篇:MySQL數(shù)據(jù)庫事務(wù)以及存儲(chǔ)引擎
系列文章:
事務(wù)Transaction
Spring Cloud 分布式事務(wù)管理
Spring Cloud 分布式事務(wù)管理(二)2pc/3pc

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/72043.html

相關(guān)文章

  • 聊聊JDBC事務(wù)隔離級(jí)別(修正)

    摘要:在相關(guān)數(shù)據(jù)庫中,所有規(guī)則都必須應(yīng)用于事務(wù)的修改,以保持所有數(shù)據(jù)的完整性。隔離性一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)所影響。比如,事務(wù)在事務(wù)提交前讀到的結(jié)果,和提交后讀到的結(jié)果可能不同。 重要 由于之前代碼的不嚴(yán)謹(jǐn),導(dǎo)致結(jié)果和結(jié)論的錯(cuò)誤,深表歉意,現(xiàn)在對(duì)其進(jìn)行修正 摘要 事務(wù)在日常開發(fā)中是不可避免碰到的問題,JDBC中的事務(wù)隔離級(jí)別到底會(huì)如何影響事務(wù)的并發(fā),臟讀(dirty reads), 不可...

    phpmatt 評(píng)論0 收藏0
  • 深入解析 PostgreSQL 系列之并發(fā)控制與事務(wù)機(jī)制

    摘要:深入解析系列之并發(fā)控制與事務(wù)機(jī)制并發(fā)控制旨在針對(duì)數(shù)據(jù)庫中對(duì)事務(wù)并行的場景,保證中的一致性與隔離。啟動(dòng)并執(zhí)行第一個(gè)命令。事務(wù)管理器分配,并返回事務(wù)快照,因?yàn)檎谶M(jìn)行中。意味著該行由另一個(gè)并發(fā)事務(wù)更新,并且其事務(wù)尚未終止。 showImg(https://segmentfault.com/img/remote/1460000018081793); 深入解析 PostgreSQL 系列整理...

    JohnLui 評(píng)論0 收藏0
  • 深入解析 PostgreSQL 系列之并發(fā)控制與事務(wù)機(jī)制

    摘要:深入解析系列之并發(fā)控制與事務(wù)機(jī)制并發(fā)控制旨在針對(duì)數(shù)據(jù)庫中對(duì)事務(wù)并行的場景,保證中的一致性與隔離。啟動(dòng)并執(zhí)行第一個(gè)命令。事務(wù)管理器分配,并返回事務(wù)快照,因?yàn)檎谶M(jìn)行中。意味著該行由另一個(gè)并發(fā)事務(wù)更新,并且其事務(wù)尚未終止。 showImg(https://segmentfault.com/img/remote/1460000018081793); 深入解析 PostgreSQL 系列整理...

    leone 評(píng)論0 收藏0
  • PostgreSQL9.6:新增加“idle in transaction”超時(shí)空閑事務(wù)自動(dòng)查殺功能

    摘要:以上出自發(fā)行說明,這段指出版本支持自動(dòng)查殺超過指定時(shí)間的空閑事務(wù)連接,下面演示下。修改以下參數(shù)備注參數(shù)單位為毫秒,這里設(shè)置超時(shí)空閑事務(wù)時(shí)間為秒。數(shù)據(jù)庫日志備注數(shù)據(jù)庫日志里清晰地記錄了進(jìn)程的連接由于空閑事務(wù)超時(shí)被斷開連接。 熟悉 PostgreSQL 的朋友應(yīng)該知道 idle in transaction 進(jìn)程,引發(fā) idle in transaction 的原因很多,例如應(yīng)用代碼中忘記...

    meislzhua 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

DirtyMind

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<