深入瞭解 NoSQL 資料庫的特點與應用

閱讀時間約 7 分鐘

其實不是所有的資料都像 Excel 表格一樣,每一列都要一模一樣的欄位?事實上,並不是所有的資料都適合這種規矩的方式!這就是 NoSQL 登場的原因啦! 😎


NoSQL 是什麼?

先想像一下:

  • 如果 SQL 資料庫像是一本教科書,每一頁的排版都很固定,章節、標題、內容全都不能亂來。
  • 那麼 NoSQL 就像一本手繪筆記,你可以隨意畫圖、記重點、畫心智圖樹,甚至有的頁面只寫兩行字,完全不用拘泥於固定的格式!✨

用更正式的說法,NoSQL 是一種不用 SQL 語法的資料庫模型,結構超級靈活。它特別適合那些「資料結構多變、成長快速」的場景,比如:社交媒體、電商網站。


為什麼要用 NoSQL?

簡單來說,有三大理由讓人愛上 NoSQL:

1. 結構超級自由

傳統 SQL 資料庫就像一張正規的表格,必須先設好欄位:名字、年齡、電話......沒設好的話,資料根本塞不進去。

而 NoSQL 呢?完全不受限制,比如商品資料:

  • A 商品有「顏色」和「尺寸」。
  • B 商品只有「價格」和「品牌」。

可以透過 NoSQL 支援結構不固定的資料模型(例如 JSON 文件),允許同一表中每筆資料的欄位不同。

2. 跑得快,資料太多加伺服器就好

有沒有想過 IG 那種每天幾百萬次的「按讚」「留言」怎麼處理的?NoSQL 最擅長的就是水平擴展(Horizontal Scaling):需要更大儲存量?沒關係,多加幾台伺服器就好了!輕鬆撐起超大規模的用戶流量。💪


3. 多變的資料結構,你想怎麼存就怎麼存

舉個例子,NoSQL 支援多種模型:

  • 文件型(Document-based): 使用 JSON 一樣,適用於電商網站(如商品資訊)。
  • 鍵值型(Key-Value Store): 使用唯一鍵(Key)對應一個值(Value),可用在即時金融交易。
  • 圖型資料庫(Graph-based): 儲存節點和邊之間的關係,用於分析和查詢關聯性強的數據。像是 Facebook 好友,你可能認識的朋友。

NoSQL 適合誰?

  • 你的資料結構多變,像社群媒體、電商平台那樣,每一條貼文都不一樣。
  • 你的用戶量爆發式增長,需要快速擴展。
  • 你想處理的數據是非結構化的,例如圖片、影片。

NoSQL 的餐廳評價 APP 範例

圖片截圖自

What is a NoSQL Database? How is Cloud Firestore structured? | Get to know Cloud Firestore #1

有一個 APP 使用 NoSQL 存餐廳所有的評價,首先先把餐廳放在一個資料庫,而評價放在另外一個資料庫。每筆評價會標記餐廳代號。使用者也可以編輯自己的個人資料、大頭照。

raw-image

But ! 因為這個不是 SQL 資料庫,沒有 JOIN 的功能,當使用者更新大頭照時就需要把資料「複製」到 Reviews,還有可能不小心漏掉 。

raw-image

天啊!怎麼會用那麼笨的方法?用關聯式資料庫就好了啊。但這個好處是,搜尋 reviews 的速度非常快,不需要用 JOIN 再把資料串起來,而且使用者換照片的次數不頻繁,所以當更換時再一個一個複製也無傷大雅。

另外,前面提到 NoSQL 的好處是擴展資料庫非常方便,只要加伺服器就好。

raw-image

CAP 理論:魚與熊掌的抉擇 🐟

延續 NoSQL 的討論,很多人會問:「為什麼 NoSQL 不像 SQL 那樣,保證所有東西都『完美』?」這就涉及到 CAP 理論,也被稱為分散式系統的「鐵三角」原則。

CAP 理論告訴我們,在分散式系統中,你只能同時滿足三個特性中的兩個,而無法三者兼得。這就是「魚與熊掌不可兼得」的真實寫照。

圖片來源:Sumit Kar's LinkedIn Post, CAP Theorem

圖片來源:Sumit Kar's LinkedIn Post, CAP Theorem

什麼是 CAP 理論?

CAP 理論的三個特性分別是:

  1. 一致性(Consistency,C)
    • 每次讀取的資料都一致,即使分散式系統中有多個節點,所有節點的數據狀態都相同。
    • 例子: 你在 A 伺服器上更新資料後,立刻去 B 伺服器查詢,看到的結果必須和 A 一樣。
  2. 可用性(Availability,A)
    • 系統總是能夠回應請求,即使部分節點發生故障。
    • 例子: 不管伺服器某一部分是否掛掉,使用者仍然能讀取數據(哪怕是舊的數據)。
  3. 分區容錯性(Partition Tolerance,P)
    • 系統能在節點之間的網路斷開(分區)時繼續運行。
    • 例子: 在伺服器分散在世界各地的情況下,網路可能斷開,但系統仍需保持某種程度的功能運作。

為什麼不能三者兼得?

在分散式系統中,網路的不穩定是不可避免的(P會變基礎要求)CAP 理論的三種取捨:

1. CA(一致性 + 可用性,但無法容忍分區網路斷開)

  • 系統在分區(如網路斷開)時會完全停擺,因為它無法同時保證一致性和可用性。
  • 適用場景: 分區很少發生的情況,例如公司內網。
  • 缺點: 無法應對分散式系統的網路問題。

2. CP(一致性 + 分區容錯性,但犧牲可用性)

  • 在網路分區發生時,系統選擇犧牲「可用性」,即暫停部分操作,關掉一些服務以維持數據一致性。
  • 適用場景: 金融系統、銀行交易等對數據一致性要求極高的場景。
  • 缺點: 在網路問題發生時,用戶可能無法存取系統。

3. AP(可用性 + 分區容錯性,但犧牲一致性)

  • 在網路分區發生時,系統選擇保證「可用性」,允許不同節點的數據短暫不一致(最終一致性)。
  • 適用場景: 社群媒體,對一致性要求較低的場景。
  • 缺點: 用戶在短時間內可能看到舊數據。

簡單比喻

想像你和朋友一起開了三個分店,分別賣同樣的商品,你們面臨三個選擇:

  1. 一致性(C): 所有分店的商品庫存必須完全相同,哪怕網路斷開也不能有差異。
    • 缺點:如果連線中斷,暫停營業。
  2. 可用性(A): 確保每個分店都能正常營業,即使庫存資料不完全正確。
    • 缺點:用戶可能會看到過期或錯誤的庫存。
  3. 分區容錯性(P): 確保即使分店之間的網路不穩定,系統仍能繼續運行。

要選擇哪一項?

沒有絕對,要看業務需求。

  • 如果資料一致性極為重要:
    選擇 CP,例如銀行系統,寧可暫時不能操作,也要保證交易數據不會錯亂。
  • 如果高可用性更重要:
    選擇 AP,例如社交媒體,寧可一部分數據稍有延遲,也要保證服務不中斷。





留言0
查看全部
avatar-img
發表第一個留言支持創作者!
本文探討 SQL 注入(SQL Injection)的攻擊原理及其防護措施。透過具體範例,解釋駭客如何利用應用程式漏洞進行資料庫攻擊,並提供有效的防範方法,包括使用參數化查詢、ORM 框架和輸入驗證等技術,確保應用程式的安全性。最後還簡介資料庫分區與分片的概念,讓讀者更全面理解如何管理和保護資料庫。
本文介紹了資料庫索引的基本原理、類型以及其在資料查詢中的重要性。索引類似於書的目錄,不僅可以提高查詢效率,還有助於組織資料。文章詳細說明瞭主索引、密集索引、稀疏索引、叢索引和非叢索引的定義與特點,並提供了實際的比喻和例子。透過深入瞭解索引的運作,讀者可以更好地設計和優化資料庫,並提升查詢效能。
本篇文章是作者自學 SQL 的筆記,詳述資料庫中的四種主要語言類別:DDL、DML、TCL 及 DCL,每類別對應的功能與常見操作一一列舉,並深入探討交易的特性及其 ACID 原則。此外,文章還解釋了資料庫的正規化及反正規化的必要性,對於學習 SQL 的讀者有很大的幫助。
本文將逐步拆解如何將 ER 圖轉換為 Schema,深入瞭解 ER 圖的意義以及其對於資料庫設計的重要性。透過影片內容,我們可以學習如何清晰地描述實體關係,並將複雜的資料結構轉化為易於管理的 Schema 形式。無論是初學者或有經驗的資料庫管理者,都能從中獲得實用的技巧和知識。
本文探討資料庫設計的基本概念,區別了 Flat-file 和 Database,並詳細介紹了資料庫設計的流程,包括需求分析、ER 圖概念設計、邏輯資料模型和物理模型的轉換。還介紹了關聯式資料庫的基本組成、五大鍵以及各種限制,希望對自學者理解資料庫設計有所幫助。
前一篇提到B樹和B+樹,這篇介紹AVL 樹和經典的紅黑樹。 在開始之前,可以看個輕鬆的影片,對於紅黑樹在真實商業案例的應用更有印象 學習資料結構、演算法在工作上真的有用嗎? 實際工作經歷不藏私! | 二元樹 | 雜湊 | 計算機概論 | 工程師 Nic
本文探討 SQL 注入(SQL Injection)的攻擊原理及其防護措施。透過具體範例,解釋駭客如何利用應用程式漏洞進行資料庫攻擊,並提供有效的防範方法,包括使用參數化查詢、ORM 框架和輸入驗證等技術,確保應用程式的安全性。最後還簡介資料庫分區與分片的概念,讓讀者更全面理解如何管理和保護資料庫。
本文介紹了資料庫索引的基本原理、類型以及其在資料查詢中的重要性。索引類似於書的目錄,不僅可以提高查詢效率,還有助於組織資料。文章詳細說明瞭主索引、密集索引、稀疏索引、叢索引和非叢索引的定義與特點,並提供了實際的比喻和例子。透過深入瞭解索引的運作,讀者可以更好地設計和優化資料庫,並提升查詢效能。
本篇文章是作者自學 SQL 的筆記,詳述資料庫中的四種主要語言類別:DDL、DML、TCL 及 DCL,每類別對應的功能與常見操作一一列舉,並深入探討交易的特性及其 ACID 原則。此外,文章還解釋了資料庫的正規化及反正規化的必要性,對於學習 SQL 的讀者有很大的幫助。
本文將逐步拆解如何將 ER 圖轉換為 Schema,深入瞭解 ER 圖的意義以及其對於資料庫設計的重要性。透過影片內容,我們可以學習如何清晰地描述實體關係,並將複雜的資料結構轉化為易於管理的 Schema 形式。無論是初學者或有經驗的資料庫管理者,都能從中獲得實用的技巧和知識。
本文探討資料庫設計的基本概念,區別了 Flat-file 和 Database,並詳細介紹了資料庫設計的流程,包括需求分析、ER 圖概念設計、邏輯資料模型和物理模型的轉換。還介紹了關聯式資料庫的基本組成、五大鍵以及各種限制,希望對自學者理解資料庫設計有所幫助。
前一篇提到B樹和B+樹,這篇介紹AVL 樹和經典的紅黑樹。 在開始之前,可以看個輕鬆的影片,對於紅黑樹在真實商業案例的應用更有印象 學習資料結構、演算法在工作上真的有用嗎? 實際工作經歷不藏私! | 二元樹 | 雜湊 | 計算機概論 | 工程師 Nic
你可能也想看
Google News 追蹤
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
在過去兩年中,我持續運用 Notion 進行個人管理,個人管理的模板也逐漸定型,藉此分享個人管理模板的使用心得。
Thumbnail
我發現很多人在使用 Notion 的一個煩惱跟痛點是因為自由度太高, 所以很容易找不到建立的頁面隨著新增功能側邊欄越來越長 其實 Notion 根本可以不用手動整理他呀! 你只需要在每個頁面新增一個快速跨頁面自動目錄
Thumbnail
KSQL引擎, 串流形式的SQL? 聽了應該霧煞煞吧! 想像一下傳統的SQL, 是不是一個指令一個動作, 每發送一個指令之後就必須等到查詢/寫入…動作皆完成之後才回應, 然而在Streaming的應用上這顯然不太可行, 每分每秒都有資料流入的情境下, 資料的狀態都在變化, 假設我們一個指令一個動作,
Thumbnail
它解決了以上我在各種軟體中碰到的疑難雜症,並整合Notion、Obsidian、Figma等多個軟體的優點功能。
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
在前一篇「教你如何用ChatGPT來製作Notion Quotes」中,我們學到了如何運用ChatGPT創建個人語錄庫,以豐富Notion數位空間。今天,我們與大家分享已完成的Notion Quotes模板,可供免費下載,輕鬆建立屬於自己的個人語錄庫,為Notion空間增添更多層次與深度。
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
在過去兩年中,我持續運用 Notion 進行個人管理,個人管理的模板也逐漸定型,藉此分享個人管理模板的使用心得。
Thumbnail
我發現很多人在使用 Notion 的一個煩惱跟痛點是因為自由度太高, 所以很容易找不到建立的頁面隨著新增功能側邊欄越來越長 其實 Notion 根本可以不用手動整理他呀! 你只需要在每個頁面新增一個快速跨頁面自動目錄
Thumbnail
KSQL引擎, 串流形式的SQL? 聽了應該霧煞煞吧! 想像一下傳統的SQL, 是不是一個指令一個動作, 每發送一個指令之後就必須等到查詢/寫入…動作皆完成之後才回應, 然而在Streaming的應用上這顯然不太可行, 每分每秒都有資料流入的情境下, 資料的狀態都在變化, 假設我們一個指令一個動作,
Thumbnail
它解決了以上我在各種軟體中碰到的疑難雜症,並整合Notion、Obsidian、Figma等多個軟體的優點功能。
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
在前一篇「教你如何用ChatGPT來製作Notion Quotes」中,我們學到了如何運用ChatGPT創建個人語錄庫,以豐富Notion數位空間。今天,我們與大家分享已完成的Notion Quotes模板,可供免費下載,輕鬆建立屬於自己的個人語錄庫,為Notion空間增添更多層次與深度。