資料庫是一種結構化系統,用於儲存、管理及擷取資訊。
資料庫就像數位圖書館,圖書館員清楚知道每本書每一頁的位置。如果走進一間堆滿數百萬張散亂紙張的大房間,您永遠找不到所需要的資訊。您需要一個能整理這些紙張、清楚標示內容並幫助您在幾秒鐘內檢索資訊的系統,而這正是資料庫對應用程式所扮演的角色。它就像數位系統的可靠記憶體,安全地儲存網站、企業和重要服務每天運作所依賴的資訊。
大多數資料庫可分為兩大類:
當您在自己的電腦或伺服器上執行資料庫時,必須完成許多工作:要處理備份、安裝安全性更新,並確保伺服器不會耗盡記憶體。這種方式稱為「自行託管」。
代管資料庫服務能替您分擔這項工作。您付費給雲端服務供應商代為執行資料庫,他們會負責處理繁重的工作,例如設定基礎架構、更新軟體,以及確保系統保持連線。這樣一來,您就能專心編寫應用程式程式碼,不必擔心伺服器的基礎架構問題。
雖然 Google 試算表或 Excel 等這類的試算表很適合讓人快速瀏覽,但是如果有成千上萬的人同時使用時,就會變得緩慢且難以管理。資料庫的建構方式則完全不同,它們主要由三個部分組成:
選擇合適的資料庫取決於資料的結構特性。
類型 | 適用情境 | 主要特性 | 範例 |
關聯式 (SQL) | 關係明確的結構化資料 | 使用資料表、資料列和資料欄 | 銀行帳戶餘額系統 |
非關聯式 (NoSQL) | 彈性、快速且變動頻繁的資料 | 不使用資料表,而是以多種方式儲存資料 | 大型網頁應用程式的大數據分析 |
Key-Value | 簡單快速的查詢 | 資料以成對形式儲存,就像數位字典一樣 | 儲存用於登入的使用者工作階段資訊 |
文件 | 儲存複雜的巢狀資料 | 以文件 (例如 JSON 檔案) 形式儲存資料 | 管理電子商務產品目錄 |
向量 | AI 與機器學習 | 以數學向量的形式儲存資訊 | 根據使用者過去的行為尋找產品推薦 |
圖形 | 擁有深層連結的資料 | 著重於各個項目如何相互關聯 | 社群媒體「朋友的朋友」功能 |
時間序列 | 隨時間變動的資料 | 記錄具有特定時間戳記的資訊 | 監控工廠內的溫度感應器 |
類型
適用情境
主要特性
範例
關聯式 (SQL)
關係明確的結構化資料
使用資料表、資料列和資料欄
銀行帳戶餘額系統
非關聯式 (NoSQL)
彈性、快速且變動頻繁的資料
不使用資料表,而是以多種方式儲存資料
大型網頁應用程式的大數據分析
Key-Value
簡單快速的查詢
資料以成對形式儲存,就像數位字典一樣
儲存用於登入的使用者工作階段資訊
文件
儲存複雜的巢狀資料
以文件 (例如 JSON 檔案) 形式儲存資料
管理電子商務產品目錄
向量
AI 與機器學習
以數學向量的形式儲存資訊
根據使用者過去的行為尋找產品推薦
圖形
擁有深層連結的資料
著重於各個項目如何相互關聯
社群媒體「朋友的朋友」功能
時間序列
隨時間變動的資料
記錄具有特定時間戳記的資訊
監控工廠內的溫度感應器
關聯式資料庫通常也稱為 SQL 資料庫,會以結構化資料表呈現資料。如果需要確保銀行交易完全成功或完全失敗,您可能會決定使用關聯式資料庫,因為這類資料庫嚴格遵守 ACID (原子性、一致性、隔離性、持久性) 屬性。
NoSQL 資料庫的優點是彈性高,這類資料庫以文件、圖形或鍵/值組合的形式儲存資料。由於不需要嚴格的結構定義,NoSQL 通常非常適合用於變動快速的應用程式,例如行動應用程式、社群媒體動態消息或即時內容管理系統。
這是最簡單的 NoSQL 資料庫形式,這類資料庫會將資料儲存為不重複的索引鍵,並與值配對。由於這種方式既快速又簡單,開發人員可能會用來快取工作階段資料或儲存使用者偏好設定。
這些資料庫就像字典,有一個鍵 (例如使用者名稱) 和對應的值 (個人資料)。由於不必在複雜的資料表中搜尋,就能找到所需內容,因此速度非常快。
文件資料庫會以彈性格式 (通常是 JSON) 儲存資料。如果資料結構經常變動,這類資料庫非常實用,例如在內容管理系統中,不同的網誌文章可能會有不同的屬性。
向量資料庫會將資訊儲存為數學向量,讓電腦能更瞭解資料的「意義」,而不只是比對確切的關鍵字,這項技術是現代生成式 AI 和搜尋功能的基礎。
圖形資料庫著重於資料點之間的關係。這類資料庫不使用資料表,而是將資料儲存為節點和邊。以社群網路為例,「人」是節點,「追蹤」動作是邊。如果您正在建構一個依賴複雜連結的推薦引擎,圖形資料庫能以遠快於標準關聯式資料庫的速度來查詢這些連結。
時間序列資料庫專門儲存以時間編製索引的資料點,是專為處理大量、具有時間戳記的資料而打造,例如來自 IoT 裝置的感應器讀數、伺服器記錄或股市更新資訊。這類資料庫擅長「降採樣」,也就是將較舊的高頻率資料壓縮成更廣泛的摘要,以節省空間。
資料庫可以放在幾個不同位置:
地端部署:在您自家辦公室或資料中心的實體硬體上執行資料庫。這種做法可讓您完全掌控資料庫,但必須自行管理所有安全性和維護作業。
混合式:結合地端部署和雲端環境。您可以將機密資料保留在地端部署環境以確保安全,同時將公開應用程式資料儲存在雲端。
雲端:資料庫位於雲端服務供應商的伺服器。這通常是最受歡迎的選擇,因為如果應用程式突然爆紅,就能輕鬆擴充。雲端資料庫可帶來多項優勢:
在部署選項之間遷移,例如從地端部署設定轉移至代管雲端服務,或從混合式環境轉移至全雲端原生解決方案,重點應放在基礎架構變更,而不是單純的資料格式變更。請務必審慎規劃資料庫遷移作業,確保資料完整性、將停機時間減至最低,並管理連線變更。
過去,開發人員通常會將標準應用程式資料和 AI 資料分開儲存在不同的資料庫孤島。這迫使開發人員要在資料庫和獨立的 AI 引擎之間來回移動大量資料,導致應用程式速度變慢,也更難以維護。如今,整合已成為趨勢。我們希望資料庫能理解並處理資料,包括 AI 生成的資訊,而且在同一處完成。
概括來說,現代資料庫正藉由新增下列核心 AI 功能,變得更加「智慧」:
只要使用支援這些工具的資料庫,就能透過單一查詢,搜尋使用者的名稱、歷史記錄和偏好設定,簡化技術堆疊,讓應用程式提供更快速且智慧的體驗。
以下說明如何在 Python 中執行混合搜尋,結合特定關鍵字和語意概念:
在確定採用特定架構前,請先思考以下問題,判斷哪種資料庫類型最符合專案需求。
考量 | 推薦的資料庫類型 | 推論 |
我的資料是否具有嚴謹的結構,例如銀行記錄或使用者帳戶? | 關聯式 (SQL) | 資料表和資料列可確保資料準確率,並強制執行記錄之間的嚴格關係。 |
我需要儲存格式經常變動的資料嗎,例如使用者記錄或活動動態消息? | NoSQL | 由於沒有嚴格的結構定義,您可以儲存結構不斷演變或變化的資料。 |
是否需要盡快查詢簡易資料,例如使用者工作階段? | 鍵/值 | 資料庫會將單一鍵直接對應至值,避免複雜的搜尋作業。 |
資料是否與程式碼中的物件類似,例如具有不同功能的產品? | 文件 | 以 JSON 等格式儲存資料,可讓您輕鬆在應用程式程式碼中直接處理資料。 |
我建構的 AI 應用程式需要搜尋「意義」或相似性嗎? | 向量 | 這類資料庫經過最佳化,會根據數學相似度 (而非確切關鍵字) 儲存及比較資料。 |
資料點之間的關係與資料本身同樣重要嗎? | 圖表 | 這些系統的設計宗旨是快速掃遍複雜的關係,例如社群網路或詐欺偵測路徑。 |
我需要追蹤會隨時間不斷變化的資料,例如感應器讀數嗎? | 時間序列 | 這類資料庫經過最佳化,可記錄並查詢以時間為索引的資料點。 |
考量
推薦的資料庫類型
推論
我的資料是否具有嚴謹的結構,例如銀行記錄或使用者帳戶?
關聯式 (SQL)
資料表和資料列可確保資料準確率,並強制執行記錄之間的嚴格關係。
我需要儲存格式經常變動的資料嗎,例如使用者記錄或活動動態消息?
NoSQL
由於沒有嚴格的結構定義,您可以儲存結構不斷演變或變化的資料。
是否需要盡快查詢簡易資料,例如使用者工作階段?
鍵/值
資料庫會將單一鍵直接對應至值,避免複雜的搜尋作業。
資料是否與程式碼中的物件類似,例如具有不同功能的產品?
文件
以 JSON 等格式儲存資料,可讓您輕鬆在應用程式程式碼中直接處理資料。
我建構的 AI 應用程式需要搜尋「意義」或相似性嗎?
向量
這類資料庫經過最佳化,會根據數學相似度 (而非確切關鍵字) 儲存及比較資料。
資料點之間的關係與資料本身同樣重要嗎?
圖表
這些系統的設計宗旨是快速掃遍複雜的關係,例如社群網路或詐欺偵測路徑。
我需要追蹤會隨時間不斷變化的資料,例如感應器讀數嗎?
時間序列
這類資料庫經過最佳化,可記錄並查詢以時間為索引的資料點。
即使資料庫能順暢支援目前的應用程式,AI 仍會帶來新的需求。在開始建構下一個 AI 功能前,請先思考以下問題,確認目前的設定是否已準備就緒: