成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

事務(wù)Transaction

DirtyMind / 2740人閱讀

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

@[TOC]

為什么寫這系列的文章

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

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

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

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

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

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

事務(wù)概念

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

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

ACID

atomicity 原子性

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

consistency 一致性

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

isolation 隔離性

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

durability 持久性

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

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

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

臟讀(Dirty Read)

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

同一事務(wù)內(nèi)不是臟讀。 一個事務(wù)開始讀取了某行數(shù)據(jù),但是另外一個事務(wù)已經(jīng)更新了此數(shù)據(jù)但沒有能夠及時提交。這是相當(dāng)危險的,因為很可能所有的操作都被回滾,也就是說讀取出的數(shù)據(jù)其實是錯誤的。

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

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

幻讀(Phantom Reads)

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

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

丟失修改(Lost Update)

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

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

事務(wù)隔離

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

讀未提交(Read Uncommitted)

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

Read Uncommitted允許臟讀。

讀已提交(Read Committed)

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

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

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

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

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

串行讀(Serializable)

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

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72043.html

相關(guān)文章

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

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

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

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

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

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

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

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

    meislzhua 評論0 收藏0

發(fā)表評論

0條評論

DirtyMind

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<