資料庫:系統設計的核心

qing_yun發表於2023-11-17

在系統設計中,理解資料庫的複雜性至關重要。如果你正在為這樣的設計做準備,而對資料庫感到困惑,那麼你來對地方了。

我將帶你瞭解資料庫的基本知識,從基礎知識到細節。

資料庫:系統設計的核心

在許多系統的核心,資料庫扮演著儲存、檢索和組織資料的關鍵角色。在系統設計的領域中,理解資料庫的各個方面,從它們的型別和特徵到擴充套件技術和效能最佳化,都能使你脫穎而出。

探索不同型別的資料庫

資料庫有各種不同的型別,每種都是為了解決獨特的問題而設計的。讓我們來剖析它們。

1. 關係型資料庫:

想象一下一個井然有序的檔案櫃,檔案被精心分類到不同的抽屜和資料夾中。這就是關係型資料庫。

例子:PostgreSQL、MySQL、SQLite。

特點:

•表是主要的資料儲存單元。

•SQL是查詢語言。

•適用於事務、複雜查詢和確保資料完整性。

•遵循ACID屬性(稍後詳細介紹)。

2. NoSQL資料庫:

想象一塊貼滿便籤的頭腦風暴板,隨時可以新增或重新排列。這種靈活的方法體現在NoSQL資料庫中。

例子:MongoDB、Cassandra、Redis。

特點:

•可以是鍵值、文件、寬列,甚至是基於圖的。

•不限制固定的模式。

•擅長處理非結構化資料。

•適用於可擴充套件性、快速變更和簡單查詢。

3. 記憶體資料庫:

想象一個用於快速計算和瞬時草圖的白板。快速而高效,這就是記憶體資料庫的本質。

例子:Redis、Memcached。

特點:

•資料訪問非常快速,因為一切都儲存在記憶體中。

•通常用於快取和儲存與會話相關的資料。

深入瞭解ACID屬性

ACID屬性——原子性、一致性、隔離性和永續性,在系統設計中至關重要,確保資料庫有效執行。

•原子性:事務是二進位制的;它們要麼完全完成,要麼根本不執行。

•一致性:任何事務之後,資料庫保持一致。

•隔離性:每個事務都是獨立執行的。

•永續性:一旦資料被提交,就會長時間存在。

有趣的是,一些NoSQL資料庫放棄了ACID中的一致性屬性。

擴充套件資料庫:實用指南

擴充套件是增強資料庫效能和容量的藝術。讓我們深入探討兩種主要策略:

1. 縱向擴充套件(“Scale Up”):

在縱向擴充套件中,你可以增強託管資料庫的單個伺服器的能力。

•新增更快或更多的處理器。

•增加RAM以減少磁碟IO。

•提高儲存以增強讀/寫速度。

•升級網路以實現快速資料傳輸。

然而,單臺機器的擴充套件是有限的。

2. 橫向擴充套件(“Scale Out”):

相反,橫向擴充套件透過引入更多的機器來擴充套件資源池。

資料庫分片:

這涉及將不同的資料段(或分片)分佈在多臺伺服器上,提高效能、可擴充套件性和管理的便利性。

1*pLCJWI-jHG4yMSNeddTuNw.png

策略包括:

•基於範圍的分片:基於特定鍵的範圍。•基於目錄的分片:查詢服務引導流量。•地理分片:基於位置的資料分佈。

複製:

這是在多臺伺服器之間複製資料以實現高可用性的全過程。

•主從複製:一個主資料庫有多個只讀副本。

•主-主複製:多個讀寫資料庫。

1*UnORlZhAk7TswJW7rqjtaA.png

提升資料庫效能

最佳化資料庫訪問和檢索與擴充套件同樣重要。以下是一些技術:

快取:

利用快取儲存頻繁查詢,使用像Redis這樣的記憶體資料庫,極大地提高效能。

索引:

類似於書的索引,資料庫上經常訪問的列上的索引可以極大地提高檢索時間。

查詢最佳化:

簡化你的查詢,最小化連線,而且永遠要遠離通用的SELECT *。

在資料庫設計中優先考慮安全性

•確保資料在靜態和傳輸過程中保持加密狀態。

•警惕SQL隱碼攻擊,利用預編譯語句。

•實施基於角色的訪問控制,實現精細的安全性。

CAP定理:資料庫決策的支柱

永遠記住CAP定理,它提出一致性、可用性和分割槽容忍性這三者中只能同時實現兩個。你的應用程式的需求應該決定你的選擇。

來自 “ 小技術君 ”, 原文作者:小技術君;原文連結:https://mp.weixin.qq.com/s/P_X6lI7fi3QPs7WHRfo0_Q,如有侵權,請聯絡管理員刪除。

相關文章