軟體開發工程師知識整理(資料庫)

2021-10-23 19:54:53 字數 3580 閱讀 9102

資料庫(db):長期儲存在計算機的儲存裝置上,按照一定規則組織起來,可以被用於或應用共享的資料集合。

資料庫管理系統(dbms):指一種操作和管理資料庫的大型軟體,用於建立、使用和維護資料庫,對資料庫進行統一管理和控制,以保證資料庫的安全性和完整性。使用者通過資料庫管理系統訪問資料庫中的資料。

資料庫系統(dbs):在計算機系統中引入資料庫後的系統,通常由計算機硬體、軟體、資料庫管理系統和資料庫管理員組成。

sql:結構化查詢語言

事務:資料庫事務是構成單一邏輯工作單元的操作集合。

事務的acid特性

隔離性(isolation):併發執行的事務不會相互影響,其對資料庫的影響和它們序列執行時一樣。比如多個使用者同時往乙個賬戶轉賬,最後賬戶的結果應該和他們按先後次序轉賬的結果一樣。

永續性(durability):事務一旦提交,其對資料庫的更新就是持久的。任何事務或系統故障都不會導致資料丟失。

資料庫事務的4種隔離級別(從低到高)

事務具有隔離性,理論上來說事務之間的執行不應該相互產生影響,其對資料庫的影響應該和它們序列執行時一樣。然而完全的隔離性會導致系統併發效能很低,降低對資源的利用率,因而實際上對隔離性的要求會有所放寬,這也會一定程度造成對資料庫一致性要求降低。事務的隔離級別越低,可能出現的併發異常越多,但是通常而言系統能提供的併發能力越強。

對應關係只是理論上的,對於特定的資料庫實現不一定準確,比如mysql的innodb儲存引擎通過next-key locking技術在可重複讀級別就消除了幻讀的可能。

所有事務隔離級別都不允許出現髒寫,而序列化可以避免所有可能出現的併發異常,但是會極大的降低系統的併發處理能力。

資料庫併發異常正規化:當設計關聯式資料庫時,需要遵從不同的規範和要求,設計出合理的關係型資料庫,這些不同的規範被稱為正規化,越高的正規化資料庫冗餘越小。一般來說,資料庫只需滿足第三正規化(3nf)就行了。

正規化的優點:

正規化的缺點:正規化越高,設計的表越可能越多,關係可能越複雜,但效能卻不一定越好。

反正規化的設計模式中,可以允許適當的資料冗餘,用這個冗餘可以縮短查詢獲取資料的時間。

優點:

缺點

常見的資料庫反正規化技術

索引:索引是對資料庫表中一列或多列的值進行排序的一種結構。

為什麼資料要用索引?

提公升檢索速度、加速表與表之間的連線。

索引的種類有哪些?分別的特點是什麼?

索引的使用原則儲存過程是使用者定義的一系列sql語句的集合,涉及特定表或其他物件的任務,使用者可以呼叫儲存過程。

儲存過程用於執行特定操作,可以接受輸入引數、輸出引數、返回單個或多個結果集。

儲存過程的優點

儲存過程的缺點函式通常是資料庫已定義的方法,它接收引數並返回某種型別的值並且不涉及特定使用者表。

函式和儲存過程的區別

函式和儲存過程都可以有輸入引數,都是由一系列sql語句組成的。

觸發器(trigger)是資料庫提供給程式設計師和dba 用來保證資料完整性的一種方法,它是與表事件相關的特殊的儲存過程,是使用者定義在表上的一類由事件驅動的特殊過程。觸發器的執行不是由程式呼叫,也不是由手工啟動,而是由事件來觸發的。其中,事件是指使用者對錶的增(insert)、刪(delete)、改(即更新update)等操作。觸發器經常被用於加強資料的完整性約束和業務規則等。

觸發器和儲存過程的區別

觸發器的作用

觸發器的優點

觸發器的缺點檢視是由資料庫的基本表中選取處理的資料組成的邏輯視窗,它不同於基本表,它是乙個虛擬表,其內容有查詢定義。

資料庫只儲存檢視的定義,不儲存檢視的資料。

只有在使用檢視時,才會執行檢視的定義,從基本表中查詢資料。

檢視的作用

檢視的優點

檢視的缺點sql注入:通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意sql命令的目的。

永遠不要信任使用者的輸入,必須認定使用者的輸入的資料是不安全的,對使用者輸入的資料都必須進行過濾處理。

注意

:鎖機制用於對共享資源的併發訪問,用於多使用者環境下,可以保證資料庫的完整性和一致性。

表級鎖

表級別的鎖定是mysql各儲存引擎中最大顆粒度的鎖定機制。該鎖定機制最大的特點是實現邏輯非常簡單,帶來的系統負面影響最小。所以獲取鎖和釋放鎖的速度很快。由於表級鎖一次會將整個表鎖定,所以可以很好的避免困擾我們的死鎖問題。當然,鎖定顆粒度大所帶來最大的負面影響就是出現鎖定資源爭用的概率也會最高,致使並大度大打折扣。

行級鎖

行級鎖定最大的特點就是鎖定物件的顆粒度很小,也是目前各大資料庫管理軟體所實現的鎖定顆粒度最小的。由於鎖定顆粒度很小,所以發生鎖定資源爭用的概率也最小,能夠給予應用程式盡可能大的併發處理能力而提高一些需要高併發應用系統的整體效能。雖然能夠在併發處理能力上面有較大的優勢,但是行級鎖定也因此帶來了不少弊端。由於鎖定資源的顆粒度很小,所以每次獲取鎖和釋放鎖需要做的事情也更多,帶來的消耗自然也就更大了。此外,行級鎖定也最容易發生死鎖。

頁面鎖

頁級鎖定是mysql中比較獨特的一種鎖定級別,在其他資料庫管理軟體中也並不是太常見。頁級鎖定的特點是鎖定顆粒度介於行級鎖定與表級鎖之間,所以獲取鎖定所需要的資源開銷,以及所能提供的併發處理能力也同樣是介於上面二者之間。另外,頁級鎖定和行級鎖定一樣,會發生死鎖。在資料庫實現資源鎖定的過程中,隨著鎖定資源顆粒度的減小,鎖定相同資料量的資料所需要消耗的記憶體數量是越來越多的,實現演算法也會越來越複雜。不過,隨著鎖定資源顆粒度的減小,應用程式的訪問請求遇到鎖等待的可能性也會隨之降低,系統整體併發度也隨之提公升。

悲觀鎖總是假設最壞的情況,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會阻塞直到它拿到鎖(共享資源每次只給乙個執行緒使用,其它執行緒阻塞,用完後再把資源轉讓給其它執行緒)。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。

樂觀鎖總是假設最好的情況,每次去拿資料的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個資料,可以使用版本號機制和cas演算法實現。樂觀鎖適用於多讀的應用型別,這樣可以提高吞吐量,像資料庫提供的類似於write_condition機制,其實都是提供的樂觀鎖。

軟體開發工程師知識整理(演算法)

演算法 演算法是為了解決某類問題而規定的乙個有限長的操作序列。有窮性。乙個演算法必須總是在執行有窮步後結束,且每一步都必須在有窮時間內完成。確定性。對千每種情況下所應執行的操作,在演算法中都有確切的規定,不會產生二義性,使演算法的執行者或閱讀者都能明確其含義及如何執行。可行性。演算法中的所有操作都可...

開發工程師的自我評價 C 軟體開發工程師簡歷范文

工作描述1 主要負責跨域共享效能優化專案的專案管理及開發工作,主導了前期的框架和業務邏輯的設計工作。該專案針對特定業務,新建了分布式交付軟 件,通過重新設計了優化流程,高效的資料結構和演算法,使業務速度優化10倍,業務量擴容5倍。工作描述2 參與基礎平台效能優化專案的開發工作,負責資料庫快取的設計與...

資料庫工程師

資料庫工程師 1.掌握資料庫技術的基本概念 原理 方法和技術 2.能夠使用sql語言實現資料庫操作 3.具備資料庫系統安裝 配置及資料庫管理與維護的基本技能 4.掌握資料庫管理與維護的基本方法 5.掌握資料庫效能優化的基本方法 6.了解資料庫應用系統的生命週期及其設計 開發過程 7.熟悉常用的資料庫...