自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

刷盤,還是不刷盤,是一個(gè)問題 | 架構(gòu)師之路重啟

數(shù)據(jù)庫
本文我們一起來看數(shù)據(jù)庫中一個(gè)典型的讀寫事務(wù)的場(chǎng)景,并了解這里面可能涉及的技術(shù)問題。

前幾個(gè)有個(gè)朋友留言,問我說最近兩年公號(hào)發(fā)讀書感悟,職場(chǎng)感悟,AI實(shí)踐居多了,發(fā)架構(gòu)思路類的內(nèi)容少了。

最近準(zhǔn)備重啟架構(gòu)思路類的內(nèi)容,且會(huì)保持一如既往的風(fēng)格:

  • 希望引發(fā)大家思考,多討論,多互動(dòng);
  • 核心原理通俗化描述,目標(biāo)是讓所有人搞懂;
  • 思路,比結(jié)論重要;

本篇源自我去年看到的一篇關(guān)于ARIES算法的論文,作為重啟后的第一篇,算是一個(gè)引子,希望大伙多多支持。

畫外音:去掉了論文里復(fù)雜的概念、算法及公式,加入了相關(guān)概念的補(bǔ)充解釋說明與架構(gòu)思考與補(bǔ)充。

讓我們來看數(shù)據(jù)庫中一個(gè)典型的讀寫事務(wù)的場(chǎng)景。

事務(wù)T1:

  • 開始事務(wù)
  • 讀取記錄A的值(假設(shè)A=1)
  • 修改記錄A的值(假設(shè)修改為2)
  • 提交事務(wù)

這里面可能涉及哪些技術(shù)問題呢?

問題一,數(shù)據(jù)庫如何讀取記錄A的值?

相關(guān)技術(shù)點(diǎn):

  • 數(shù)據(jù)庫使用緩沖池(buffer pool)機(jī)制提升讀寫效率;
  • 數(shù)據(jù)庫以數(shù)據(jù)頁(page)為單位管理緩沖池;
  • 如果被讀取的數(shù)據(jù)在緩沖池中,直接從緩沖池中讀取數(shù)據(jù);
  • 否則,先將磁盤上的數(shù)據(jù)復(fù)制到緩沖池,再?gòu)木彌_池中讀取數(shù)據(jù);

此例中,假設(shè)記錄存儲(chǔ)在一個(gè)單頁上,且事先不在緩沖池中,故數(shù)據(jù)頁會(huì)被復(fù)制到緩沖池。

問題二,數(shù)據(jù)庫如何寫入記錄A的值?

相關(guān)技術(shù)點(diǎn):

  • 數(shù)據(jù)庫直接修改緩沖池中的數(shù)據(jù);
  • 緩沖池中的數(shù)據(jù)不能實(shí)時(shí)刷回磁盤,畢竟事務(wù)還沒有提交;

此例中,緩沖池中的數(shù)據(jù)被修改為2,磁盤上的數(shù)據(jù)仍是1(如上圖)。

那么,問題來了,如果緩沖池滿了,要將哪些數(shù)據(jù)刷回磁盤呢?

原則上,得做到:

  • 如果事務(wù)未提交,“臟”數(shù)據(jù)不會(huì)被刷回磁盤;
  • 如果事務(wù)已提交,數(shù)據(jù)會(huì)被刷回磁盤。

數(shù)據(jù)庫的故障恢復(fù)系統(tǒng)(crash recovery system)也會(huì)面臨類似的問題,在數(shù)據(jù)庫崩潰,內(nèi)存中數(shù)據(jù)丟失的時(shí)候,未提交的事務(wù)和已提交的事務(wù),如何保證ACID特性?

再來看一個(gè)并發(fā)的事務(wù)T1和T2的復(fù)雜場(chǎng)景:

T1.1. 開始事務(wù)

T1.2. 讀取記錄A的值(假設(shè)A=1)

T1.3. 修改記錄A的值(假設(shè)修改為2)

    T2.1開始事務(wù)

    T2.2讀取記錄B的值(假設(shè)B=3)

    T2.3修改記錄B的值(假設(shè)修改為7)

    T2.4提交事務(wù)

T1.4.回滾事務(wù)

假設(shè),記錄A和記錄B都在一個(gè)數(shù)據(jù)頁上。

事務(wù)T1讀取記錄A的值,會(huì)將磁盤上的數(shù)據(jù)頁復(fù)制到緩沖池,再進(jìn)行讀?。ㄈ缟蠄D)。

事務(wù)T1修改記錄A的值,會(huì)直接修改緩沖池中的數(shù)據(jù)(如上圖)。

好,這個(gè)時(shí)候,事務(wù)T2啟動(dòng)了。

事務(wù)T2先讀取記錄B的值,緩沖池中已經(jīng)存在記錄B所在的頁,所以無需進(jìn)行磁盤訪問。

畫外音:緩沖池的核心作用,提高讀寫性能。

接下來,事務(wù)T2修改記錄B的值,會(huì)直接修改緩沖池中的數(shù)據(jù)(如上圖)。

接下來,事務(wù)T2提交了。

這個(gè)時(shí)刻,我們面臨一個(gè)巨大的難題:在數(shù)據(jù)庫返回應(yīng)用程序事務(wù)成功之前,要不要將數(shù)據(jù)刷回磁盤?

如果不將數(shù)據(jù)刷回磁盤,就返回應(yīng)用程序事務(wù)成功,那么萬一數(shù)據(jù)庫故障,緩沖池中的數(shù)據(jù)丟失,事務(wù)T2的ACID特性就會(huì)被破壞。

反之,如果將數(shù)據(jù)刷回磁盤,但此時(shí)事務(wù)T1還沒有提交/回滾,事務(wù)T1的臟數(shù)據(jù)刷回磁盤,事務(wù)T1的ACID特性也會(huì)被破壞。

我們似乎陷入了一個(gè)兩難的境地。如果是你,你會(huì)考慮用什么思路解決這個(gè)問題呢?

總結(jié)與思考:

  • 數(shù)據(jù)庫使用緩沖池(buffer pool)機(jī)制提升讀寫效率;
  • 數(shù)據(jù)庫以數(shù)據(jù)頁(page)為單位管理緩沖池;
  • 數(shù)據(jù)庫直接讀寫緩沖池中的數(shù)據(jù);
  • 此情況,刷盤,還是不刷盤?
責(zé)任編輯:趙寧寧 來源: 架構(gòu)師之路
相關(guān)推薦

2019-11-06 11:31:26

刷臉支付支付寶互聯(lián)網(wǎng)

2022-04-07 07:30:47

InnoDBMySQL數(shù)據(jù)

2011-04-28 14:17:05

架構(gòu)設(shè)計(jì)

2012-04-16 17:00:58

金山快盤內(nèi)容備份

2025-01-22 08:00:00

架構(gòu)秒殺系統(tǒng)Java

2012-06-17 12:58:04

架構(gòu)師架構(gòu)

2019-07-23 18:15:26

技術(shù)大數(shù)據(jù)數(shù)據(jù)庫

2021-10-25 09:41:04

架構(gòu)運(yùn)維技術(shù)

2024-11-13 06:03:45

架構(gòu)設(shè)計(jì)架構(gòu)系統(tǒng)

2013-01-10 13:27:32

iOS刷榜Android

2017-10-18 15:19:23

架構(gòu)師技術(shù)開發(fā)

2022-06-06 08:42:04

spring-boo開發(fā)接口防盜刷

2018-07-03 15:46:24

Java架構(gòu)師源碼

2018-02-06 09:58:48

架構(gòu)師MVCiOS

2020-11-25 09:56:48

架構(gòu)運(yùn)維技術(shù)

2022-06-15 10:04:51

存儲(chǔ)選型MySQL

2019-07-31 07:36:12

架構(gòu)運(yùn)維技術(shù)

2023-02-09 09:56:32

架構(gòu)

2009-02-23 11:18:06

J2EE架構(gòu)師Java

2013-04-19 15:12:17

架構(gòu)師WEB架構(gòu)師
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)