4 資料庫
關係型資料庫
關係型資料庫,或稱為 SQL 資料庫,是結構化的,具有預定義的模式,類似於儲存電話號碼和地址的電話簿。SQL 資料庫以行和列的形式儲存資料。每一行包含關於單個實體的所有資訊,每一列則儲存所有分開的資料點。常見的 SQL 資料庫包括:
- MySQL
- Oracle
- MS SQL Server
- SQLite
- PostgreSQL
- MariaDB
MySQL
開源關係型資料庫管理系統(RDBMS),透過表格和行儲存資料。它使用 SQL(結構化查詢語言)來傳輸和訪問資料,並透過[SQL 聯接]簡化查詢和資料關聯。它遵循客戶端-伺服器架構,並支援[多執行緒]。
PostgreSQL
也稱為 Postgres,開源 RDBMS,以擴充套件性和 SQL 合規性為重點。Postgres 使用 SQL 來訪問和運算元據庫,並採用自己的 SQL 版本——PL/pgSQL,能夠執行比 SQL 更復雜的查詢。Postgres 的事務遵循 ACID 原則。由於它具有關係型結構,因此整個模式需要在建立時設計和配置。Postgres 資料庫使用外來鍵,從而實現資料規範化。
SQL 聯接
使我們可以同時訪問兩個或更多表中的資訊。它們還能保持資料庫的規範化,從而確保資料冗餘較低。當資料冗餘較低時,我們在刪除或更新記錄時可以減少應用程式中的資料異常。
非關係型資料庫
非關係型資料庫,或稱為 NoSQL 資料庫,是非結構化的,具有動態模式,類似於資料夾,儲存從地址和電話號碼到 Facebook 點贊和線上購物偏好的資訊。NoSQL 的型別多種多樣,最常見的包括:
- 鍵值儲存,例如 [Redis]和 DynamoDB
- 文件型資料庫,例如 MongoDB 和 CouchDB
- 寬列型資料庫,例如 Cassandra 和 HBase
- 圖資料庫,例如 Neo4J 和 InfiniteGraph
MongoDB
MongoDB 是一種 NoSQL、非關係型資料庫管理系統(DBMS),使用文件而非表格或行來儲存資料。這種資料模型使得在單次資料庫操作中操縱相關資料成為可能。MongoDB 文件採用 JSON 類似的格式和受 JavaScript 支援的檔案。文件欄位可以變化,使得結構能夠隨著時間的推移輕鬆改變。
如何選擇資料庫
資料庫是軟體開發的基本組成部分,在構建各種規模和型別的專案時起到至關重要的作用。選擇資料庫結構時,需要考慮速度、可靠性和準確性。我們既可以選擇保證資料有效性的關係型資料庫,也可以選擇保證最終一致性的非關係型資料庫。在選擇資料庫結構時,應重點考慮以下資料庫基礎知識:
- ACID
- BASE
- SQL 聯接
- 規範化
- 永續性
- 等等
資料庫選擇是[系統設計面試]重要組成部分,因此需要熟悉根據具體用例進行決策的過程。您選擇的資料庫將取決於專案需求。
資料庫模式
表示資料庫中資料儲存的抽象設計。它描述了資料的組織形式以及表格之間的關係。資料庫模式需要提前規劃,以便明確所需的元件及其相互連線方式。資料庫模式本身不包含資料,而是描述資料的形狀及其與其他表或模型的關係。資料庫中的一個條目是資料庫模式的一個例項。
資料庫模式主要分為兩種型別,分別定義模式的不同部分:邏輯模式和物理模式。
資料庫模式包括:
- 所有重要或相關的資料
- 對所有資料條目的一致格式化
- 所有條目和資料庫物件的唯一鍵
- 表中每一列都有名稱和資料型別
資料庫模式的規模和複雜性取決於專案的大小。資料庫模式的視覺化樣式使您可以在編寫程式碼之前適當地構建資料庫及其關係。規劃[資料庫設計]的過程稱為資料建模。資料庫模式對於 DBMS 和 RDBMS 的設計至關重要。
資料庫查詢
訪問資料庫以操縱或檢索資料的請求。它與[CRUD 操作]密切相關。透過資料庫查詢,我們可以對獲取的資訊進行邏輯處理。查詢的方式多種多樣,包括使用查詢字串、使用查詢語言或透過類似 GraphQL 的示例查詢(QBE,Query by Example)等方法。
ACID 屬性
為了維護資料庫的完整性,所有事務必須遵守[ACID 屬性]。ACID 是原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和永續性(Durability)的縮寫。
- 原子性:事務是一個原子單位,事務中的所有指令要麼全部成功執行,要麼完全不執行。
- 一致性:資料庫初始處於一致狀態,經過每次事務後應保持一致狀態。
- 隔離性:如果多個事務併發執行,它們不應互相影響,即執行的結果應與順序執行的結果相同。
- 永續性:已提交到資料庫的更改應該在軟體或系統故障情況下仍然保留。
資料庫分片與分割槽
在[分片資料庫]時,資料被劃分成不同的小塊,稱為分片(shards)。每個分片可以是一個表、一個 Postgres 模式,或者一個儲存在獨立資料庫伺服器例項中的物理資料庫。一些資料在所有分片中都存在,而另一些資料則只出現在單個分片中。這種情況分別稱為垂直分片和水平分片。
為了分片資料,需要確定分片鍵以對資料進行劃分。分片鍵可以是集合中每個文件中存在的索引欄位或複合索引欄位。選擇分片鍵沒有通用規則,具體取決於您的應用程式。
分片使應用程式能夠減少查詢次數。當收到請求時,應用程式知道將請求路由到何處。這意味著它需要檢視的資料量更少,而不必遍歷整個資料庫。分片可以提高應用程式的整體效能和可擴充套件性。
資料分割槽是一種將大型資料庫拆分為較小部分的技術。此過程允許我們將資料庫分佈在多個機器上,從而提升應用程式的效能、可用性、負載均衡和可管理性。
資料庫索引
資料庫索引可以更快速、更輕鬆地搜尋表格中的行或列,從而找到您需要的資料。索引可以透過一個或多個表格列建立,為快速隨機查詢和有序資訊的高效訪問提供基礎。雖然索引極大地加快了資料檢索速度,但由於索引佔用空間,它通常會減慢資料插入和更新的速度。
關注我,緊跟本系列專欄文章,咱們下篇再續!
作者簡介:魔都架構師,多家大廠後端一線研發經驗,在分散式系統設計、資料平臺架構和AI應用開發等領域都有豐富實踐經驗。
各大技術社群頭部專家博主。具有豐富的引領團隊經驗,深厚業務架構和解決方案的積累。
負責:
- 中央/分銷預訂系統效能最佳化
- 活動&券等營銷中臺建設
- 交易平臺及資料中臺等架構和開發設計
- 車聯網核心平臺-物聯網連線平臺、大資料平臺架構設計及最佳化
- LLM Agent應用開發
- 區塊鏈應用開發
- 大資料開發挖掘經驗
- 推薦系統專案
目前主攻市級軟體專案設計、構建服務全社會的應用系統。
參考:
- 程式設計嚴選網
本文由部落格一文多發平臺 OpenWrite 釋出!