本文為此視頻的學習筆記
關聯式資料庫的核心概念 – ACID
ACID 是一個用來描述資料庫事務正確性的術語,它代表了原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)四個關鍵特性:
- 原子性(Atomicity):保證事務中的所有操作要麼全部完成,要麼全部不完成,不會出現只執行了部分操作的情況。如果任何一部分的事務失敗,整個事務將被回滾,資料庫狀態不會改變。
- 一致性(Consistency):事務必須使資料庫從一個一致的狀態轉變到另一個一致的狀態。也就是說,事務完成後,所有的資料庫規則都必須應用,保證資料庫的正確性和完整性。
- 隔離性(Isolation):確保並行運行的事務彼此隔離,防止事務間的相互干擾。即使事務是同時執行的,每個事務也應該獨立於其他事務,就像它是系統中唯一運行的事務一樣。
- 持久性(Durability):一旦事務被提交,它對於資料庫的改變就是永久的,即使系統發生故障也不會丟失事務執行的結果。
ACID 特性是許多關係型資料庫管理系統(RDBMS)的基礎,是它們能夠提供可靠事務處理的關鍵所在。
NoSQL:資料庫技術的演進
以前,我們使用關係型數據庫管理系統(RDBMS)來存儲數據。這種方法雖然在當時是最先進的技術,但其存在許多缺點:
- 難以理解和查找數據:數據存儲的方式使得查找和理解數據變得困難。
- 難以索引和消除不一致性:儘管ACID特性保障了數據的一致性,但實現起來相當困難。
隨著技術的進步,我們開始在關係型資料庫中使用表格的形式來存儲數據。這些表格使得數據更容易被人類讀懂,但一旦為了去重和保持一致性而標準化數據,就會出現以下問題:
- 數據標準化帶來的挑戰:標準化數據涉及大量自動生成的數字外鍵,這讓數據變得難以理解和維護。
- 聯接查詢的複雜性:需要使用復雜的聯接查詢才能查找到所需的數據。
關係型資料庫的優勢與限制
關係型資料庫的一個顯著優勢是支持ACID特性,這保證了數據一旦提交,後續查詢都能訪問到這些數據。然而,這也帶來了一些挑戰:
- 高查找成本:為了加快查找速度,我們需要添加索引。但如果進行多次聯接操作,每次聯接都需要進行索引查找,尤其當涉及多個表格時(例如20個),查找成本會非常高。
- 數據量增加的挑戰:隨著數據量的增長,查找成本只會越來越高。
NoSQL技術的崛起
過去十年,雲計算的出現使情況變得更加複雜。數據量爆炸性增長,我們面臨的挑戰是如何存儲這些海量數據,並使其易於查詢。傳統的關係型資料庫已經難以應對這種規模的數據,這促使了NoSQL技術的革新。
NoSQL技術的發展目的是為了更快地查詢更多的數據,這其中需要做出一些權衡,比如放棄ACID的某些要求。畢竟,在處理數以百萬計的交易時,偶爾丟失一兩筆交易可能是可以接受的。
現代資料庫的用戶接口
為了提高開發者與大數據互動的便利性,我們需要發明或普及不同的用戶接口。其中最簡單的一種是鍵值接口:
鍵值接口:用一個鍵來存儲值,之後可以用這個鍵來獲取值,但這些值對資料庫來說是不透明的,毫無意義。
如果希望資料庫能根據內容來索引和查詢這些值,文檔資料庫就派上用場了:
文檔資料庫:讓你既可以用鍵來查找文檔,也可以基於文檔的內容來進行查找,這些內容都是為了快速檢索而被索引的。
圖形資料庫入門:掌握數據關係與提升查詢效率
1. 圖形資料庫的概念
圖形資料庫主要是用來存儲和操作由節點(實體)和邊(關係)組成的圖形結構數據。與傳統的關係型資料庫不同,圖形資料庫專注於實體之間的關係,這使得它們在處理複雜且相互連接的數據時更為有效。例如,社交網絡分析、推薦系統、欺詐檢測等場景,都能從圖形資料庫的結構中獲益。
2. 數據的存儲與查詢方式
圖形資料庫將數據以圖的形式存儲,其中每個節點表示一個實體,每條邊表示實體之間的某種關係。這種存儲方式不僅反映了真實世界的結構,而且使得查詢和分析數據關係變得直觀且高效。開發者可以直接利用這些關係來快速獲取複雜的查詢結果,而無需執行繁瑣的表連接操作。
3. ACID支持與數據完整性
雖然NoSQL資料庫在處理大量數據時提供了極大的靈活性和擴展性,但對於需要嚴格事務管理和數據完整性保證的應用,這可能是一個挑戰。圖形資料庫如Neo4j在這方面做出了調整,它提供了對ACID事務的支持,使得開發者在維護數據完整性的同時,也能享受NoSQL帶來的其他好處。
4. 從關係型資料庫到圖形資料庫的遷移
將現有的關係型資料庫數據遷移到圖形資料庫看似一個巨大的挑戰,但實際上這是一個直觀且簡單的過程。這種遷移不僅可以提供一個更直觀的數據模型,還能提高查詢的速度和數據處理的靈活性,特別是在業務需求迅速變化的今天,這一點尤為重要。
圖形資料庫的特性及應用案例
在評估資料庫時,開發者通常會考量以下三個主要目標:
1. 直觀性
直觀性意味著以邏輯方式創建和維護數據,減少從代碼到資料庫調用的轉換摩擦,以及業務人員描述應用需求與開發人員滿足這些需求之間的轉換。轉換減少等於提升生產力。在圖形資料庫中,白板模型即是物理模型。你在白板上繪製的數據模型將以完全相同的方式在磁盤上表示,這樣可以大大降低理解和實施上的難度。
2. 速度
速度不僅關乎開發速度,這是由於其更直觀而自然實現的,也關乎執行速度,以及你能多快為應用提供結果以實現實時決策。例如 eBay,他們的應用程式比之前使用 MySQL 解決方案快了數千倍。這支持了產品的實時交付,而 eBay 並不孤單,許多客戶主要因為我們能提供的性能優勢而選擇我們。過去無法實現的業務邏輯現在成為可能,過去需要批處理的流程現在可以實時進行。
3. 敏捷性
敏捷性是開發者在評估資料庫時考慮的第三個特性。敏捷性是速度的另一種衡量。你的代碼能多快、多容易適應業務變化?在 Neo4j 中,我們提供了一個自然適應的 schema optional 數據模型。你可以加入一些約束以維護數據完整性,但也具有隨時添加和刪除數據的靈活性。需要新的節點或關聯?你只需創建它們。需要在現有節點或關聯上存儲更多屬性?只需添加它們。就這麼簡單。不再有 schema 遷移讓你夜不能寐。