視圖函數(shù)(Controller)

視圖函數(shù)(Controller)
如何設(shè)計(jì)視圖函數(shù)
1.用戶的每個(gè)操作(用戶故事)對(duì)應(yīng)一個(gè)視圖函數(shù)。
數(shù)據(jù)的完整性:

  • 實(shí)體完整性 - 沒(méi)有冗余數(shù)據(jù) - 主鍵/唯一索引

  • 參照完整性 - 外鍵

  • 域完整性 - 數(shù)據(jù)類型 / 長(zhǎng)度 / 非空約束 / 默認(rèn)值約束 / 檢查約束
    2.每個(gè)視圖函數(shù)可以構(gòu)成一個(gè)事務(wù)邊界。

  • 事務(wù)的ACID特性。

    • 原子性(Atomicity):事務(wù)中各項(xiàng)的操作要么全做要么全不做;
    • 一致性(Consistentcy):事務(wù)前后系統(tǒng)的狀態(tài)是一致的;
    • 隔離性(Isolation):并發(fā)執(zhí)行的事務(wù)無(wú)法看到彼此的中間狀態(tài);
    • 持久性(Duration):事務(wù)完成后所做的改動(dòng)都會(huì)被持久化。
  • 事務(wù)隔離級(jí)別-設(shè)置事務(wù)隔離級(jí)別是為了數(shù)據(jù)庫(kù)底層依據(jù)事務(wù)隔離級(jí)別為數(shù)據(jù)加上適當(dāng)?shù)逆i。如果需要保證數(shù)據(jù)的強(qiáng)一致性,那么關(guān)系型數(shù)據(jù)庫(kù)仍然是唯一的也是最好的選擇,因?yàn)殛P(guān)系型數(shù)據(jù)庫(kù)可以通過(guò)鎖機(jī)制來(lái)保護(hù)數(shù)據(jù)。事務(wù)隔離級(jí)別從低到高依次是:Read Uncommitted(讀未提交)、Read Commited(讀提交)、Repeatable Read(可重復(fù)讀)、Searializable(串行化)。事務(wù)隔離級(jí)別越高,數(shù)據(jù)并發(fā)訪問(wèn)的問(wèn)題越少,但是性能越差;事務(wù)隔離級(jí)別越低,數(shù)據(jù)并發(fā)訪問(wèn)的問(wèn)題越多,但是性能越好。

  • 數(shù)據(jù)庫(kù)并發(fā)訪問(wèn)會(huì)產(chǎn)生的5種問(wèn)題:

  • 第1類丟失更新(A事務(wù)撤銷覆蓋B事務(wù)更新的數(shù)據(jù))和第2類丟失更新(A事務(wù)提交覆蓋B事務(wù)更新的數(shù)據(jù))。

  • 臟讀(讀臟數(shù)據(jù)):一個(gè)事務(wù)讀取到其他尚未提交的事務(wù)的數(shù)據(jù);

  • 不可重復(fù)讀:一個(gè)事務(wù)在讀取它的查詢結(jié)果時(shí),被另一個(gè)事務(wù)更新了他的查詢記錄導(dǎo)致無(wú)法讀到數(shù)據(jù)。

  • 幻讀:一個(gè)事務(wù)在讀取它的查詢結(jié)果時(shí),發(fā)現(xiàn)讀到了被另一個(gè)事務(wù)提交的新數(shù)據(jù)。
    set global transaction isolation level repeatable read;#設(shè)置全局默認(rèn)的事務(wù)隔離級(jí)別
    set session transaction isolation level committed#設(shè)置當(dāng)前會(huì)話的事務(wù)隔離級(jí)別
    select @@tx_isolation#查詢當(dāng)前會(huì)話的事務(wù)隔離級(jí)別

  • Django中的事務(wù)控制。

    • 給每個(gè)請(qǐng)求綁定事務(wù)環(huán)境(反模式)。
      ATOMIC_REQUESTS = True
    • 使用事務(wù)裝飾器(簡(jiǎn)單易用)-粗粒度(控制不夠精細(xì))。
      @transaction.non_atomic_requests @transaction.atomic
    • 使用上下文語(yǔ)法(細(xì)粒度-事務(wù)控制的范圍更加精確)。
with transaction.atomic()
  pass
  • 關(guān)閉自動(dòng)提交使用手動(dòng)提交。
    AUTOCOMMIT = False
    transaction.commit()
    transaction.rollback()

事務(wù) - 鎖進(jìn)制 - InnoDB - 表級(jí)鎖/行級(jí)鎖 - 共享鎖、排他鎖
我們通過(guò)設(shè)置事務(wù)隔離級(jí)別讓數(shù)據(jù)庫(kù)自動(dòng)選擇合適的鎖來(lái)保護(hù)數(shù)據(jù)
Authentication / Authorization
兩種方式:RBAC(基于角色的訪問(wèn)控制) / ACL(訪問(wèn)控制列表)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、事務(wù) 1、事務(wù)四要素:ACID 對(duì)于事務(wù),我之前的理解是很粗糙的,不就是為了保證操作的原子性么?一般訂單系統(tǒng)或...
    張偉科閱讀 1,497評(píng)論 0 5
  • 為了充分發(fā)揮MySQL的性能并順利地使用,就必須理解其設(shè)計(jì)。MySQL的靈活性體現(xiàn)在很多方面。例如,你可以通過(guò)配置...
    李文文丶閱讀 1,312評(píng)論 0 4
  • 當(dāng)一個(gè)系統(tǒng)訪問(wèn)量上來(lái)的時(shí)候,不只是數(shù)據(jù)庫(kù)性能瓶頸問(wèn)題了,數(shù)據(jù)庫(kù)數(shù)據(jù)安全也會(huì)浮現(xiàn),這時(shí)候合理使用數(shù)據(jù)庫(kù)鎖機(jī)制就顯得異...
    初來(lái)的雨天閱讀 3,692評(píng)論 0 22
  • 導(dǎo)語(yǔ):計(jì)算機(jī)硬件在飛速發(fā)展,數(shù)據(jù)規(guī)模在急速膨脹,但是數(shù)據(jù)庫(kù)仍然使用是十年以前的架構(gòu)體系,WiredTiger 嘗試...
    isgiker閱讀 3,563評(píng)論 0 7
  • MySQL 事務(wù)的四種隔離級(jí)別 1 事務(wù)的基本要素(ACID) 原子性(Atomicity):事務(wù)開始后所有操作,...
    4a873e424089閱讀 718評(píng)論 0 0

友情鏈接更多精彩內(nèi)容