国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

事務Transaction

DirtyMind / 2733人閱讀

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

@[TOC]

為什么寫這系列的文章

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

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

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

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

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

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

事務概念

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

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

ACID

atomicity 原子性

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

consistency 一致性

一致性:事務的執行使數據從一個狀態轉換為另一個狀態,但是對于整個數據的完整性保持穩定。

isolation 隔離性

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

durability 持久性

持久性:當事務正確完成后,它對于數據的改變是永久性的。

并發事務導致的問題

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

臟讀(Dirty Read)

當一個事務讀取另一個事務尚未提交的修改時,產生臟讀。

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

非重復讀(Nonrepeatable Read)

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

幻讀(Phantom Reads)

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

當對某行執行插入或刪除操作,而該行屬于某個事務正在讀取的行的范圍時,會發生幻像讀問題。

丟失修改(Lost Update)

第一類:當兩個事務更新相同的數據源,如果第一個事務被提交,第二個卻被撤銷,那么連同第一個事務做的更新也被撤銷。

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

事務隔離

為了兼顧并發效率和異常控制,在標準SQL規范中,定義了4個事務隔離級別.

讀未提交(Read Uncommitted)

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

Read Uncommitted允許臟讀。

讀已提交(Read Committed)

直譯就是"讀提交",意思就是語句提交以后,即執行了 Commit 以后別的事務就能讀到這個改變,只能讀取到已經提交的數據。Oracle等多數數據庫默認都是該級別。

Read Commited 不允許臟讀,但會出現非重復讀。

可重復讀(Repeatable Read):

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

Repeatable Read 不允許臟讀,不允許非重復讀,但是會出現幻象讀。

串行讀(Serializable)

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

Serializable 不允許不一致現象的出現。

通過不同的隔離級別,可以防止一些并發事務問題,同時級別越高則相應性能越低,這個設置需要根據實際場景進行設置.

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72043.html

相關文章

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

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

    phpmatt 評論0 收藏0
  • 深入解析 PostgreSQL 系列之并發控制與事務機制

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

    JohnLui 評論0 收藏0
  • 深入解析 PostgreSQL 系列之并發控制與事務機制

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

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

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

    meislzhua 評論0 收藏0

發表評論

0條評論

DirtyMind

|高級講師

TA的文章

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