并發(fā)事務(wù)的數(shù)據(jù)安全
目標(biāo)的提出:并發(fā)事務(wù)的數(shù)據(jù)安全
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。
馬克-to-win:在互聯(lián)網(wǎng)環(huán)境中,我們經(jīng)常遇到比如:1)春節(jié)搶票系統(tǒng)。2)淘寶中大家同時(shí)下單買最后的幾十個(gè)商品。3)你用你的工行賬號(hào)買東西,同時(shí)你的老婆給你這個(gè)賬號(hào)轉(zhuǎn)入錢或轉(zhuǎn)出錢。上述幾個(gè)問(wèn)題的計(jì)算機(jī)本質(zhì)就是:幾個(gè)用戶瀏覽器同時(shí)想修改數(shù)據(jù)庫(kù)中同一行數(shù)據(jù)。這就促成了一個(gè)著名的艱難話題形成:互聯(lián)網(wǎng)環(huán)境下并發(fā)甚至高并發(fā)下的數(shù)據(jù)安全。馬克-to-win:通常都是一個(gè)用戶瀏覽器的請(qǐng)求由服務(wù)器端單例的Servlet一個(gè)線程來(lái)應(yīng)答,即一個(gè)用戶瀏覽器對(duì)應(yīng)一個(gè)線程。一個(gè)線程又對(duì)應(yīng)一個(gè)事務(wù),結(jié)論就是:一個(gè)用戶瀏覽器對(duì)應(yīng)一個(gè)事務(wù)。這樣上面的諸多n個(gè)用戶瀏覽器同時(shí)想修改數(shù)據(jù)庫(kù)中同一行數(shù)據(jù)問(wèn)題,就轉(zhuǎn)化為n個(gè)事務(wù)同時(shí)操作(又看又改)同一行數(shù)據(jù)的安全問(wèn)題。所以解決了n個(gè)事務(wù)同時(shí)操作同一行數(shù)據(jù)的安全問(wèn)題,也就解決了互聯(lián)網(wǎng)環(huán)境下并發(fā)甚至高并發(fā)下的數(shù)據(jù)安全的核心問(wèn)題。所以本節(jié)要研究的目標(biāo)確定:并發(fā)事務(wù)的數(shù)據(jù)安全。
2)一個(gè)實(shí)際的案例引發(fā)的問(wèn)題:“網(wǎng)絡(luò)并發(fā)數(shù)據(jù)安全”
馬克-to-win:假設(shè)你賬戶有800元,你要在淘寶買衣服,衣服600元。同時(shí),你老婆要從你的賬上轉(zhuǎn)走600元到她自己的賬戶。假如這兩件事兒數(shù)據(jù)庫(kù)設(shè)計(jì)者開始時(shí)沒有預(yù)案的話,正常流程應(yīng)該是樣這的:你買淘寶的線程,想從賬上轉(zhuǎn)600,判斷一下賬上還有800,沒問(wèn)題,于是就轉(zhuǎn)了。當(dāng)你線程判斷時(shí),恰巧你老婆的線程也運(yùn)行到她程序的“判斷賬上還有800”這句程序,也認(rèn)為沒問(wèn)題,于是也轉(zhuǎn)了。最后的結(jié)果就是你買了衣服,你老婆也轉(zhuǎn)了錢,你的賬上還有兩百塊錢。這種情況肯定是不對(duì)的。馬克-to-win:這不符合數(shù)據(jù)的一致性規(guī)則,如果這個(gè)數(shù)據(jù)庫(kù)版本這樣就發(fā)布的話,這就是個(gè)殘次產(chǎn)品。問(wèn)題出在哪?并發(fā)修改同一個(gè)數(shù)據(jù)。所以并發(fā)訪問(wèn)的確存在安全問(wèn)題。