首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

NoSQL 三大儲存模型深度解析:鍵值/文檔/列式

     編輯:Oracle 資料庫相關知識

NoSQL 核心分類

模型代表產品核心特點適用場景
鍵值存儲Redis, Memcached, Tokyo Tyrant, ROMA, Flare極速讀寫、單鍵查詢、結構無感知快取、Session、排行榜、計數器
文檔數據庫MongoDB, CouchDB無結構、嵌套文檔、豐富查詢、無 Join內容管理、日誌分析、產品目錄
列式數據庫Cassandra, HBase, Hypertable列族儲存、海量寫入、壓縮率高時序數據、物聯網、大規模日誌

一、鍵值存儲 三種持久化策略

1. 臨時性:Memcached

  • 純記憶體儲存,重啟即失效
  • 讀寫微秒級,但容量受限於記憶體
  • 適合:可重建的快取層 (DB 前端快取、頁面片段快取)

2. 永久性:Tokyo Tyrant, ROMA, Flare

  • 資料落盤,重啟不丟失
  • 性能遜於 Memcached (需磁碟 I/O),但可支援超大資料集
  • 適合:需持久化的簡單鍵值業務 (用戶設定、Token 存儲)

3. 混合型:Redis (獨特優勢)

  • 記憶體為主,非同步持久化到磁碟 (RDB 快照 + AOF 日誌)
  • 觸發條件:預設 15 分鐘 1 次變更、5 分鐘 10 次、1 分鐘 10000 次
  • 支援豐富資料結構:String, Hash, List, Set, Sorted Set, Bitmap, HyperLogLog, Stream
  • 適合:高性能 + 持久化 + 複雜結構 (排行榜、佇列、分布式鎖、速率限制)

二、面向文檔數據庫 (MongoDB, CouchDB)

核心優勢

  1. 無 Schema:同一集合文檔結構可異,新增欄位無需 ALTER,敏捷開發友善。
  2. 豐富查詢:支援篩選、投影、排序、聚合管道、地理空間、全文搜索;雖無跨集合 Join 與多文檔 ACID 事務 (MongoDB 4.0+ 支援副本集事務),但覆蓋 90%+ 應用需求。
  3. 水平擴展:Sharding 自動分片,Replica Set 高可用。

文檔結構範例 (MongoDB)

{
  _id: ObjectId("..."),
  title: "Oracle 觸發器教學",
  tags: ["Oracle", "PL/SQL", "Trigger"],
  author: { name: "John", email: "john@example.com" },
  stats: { views: 1234, likes: 56 },
  comments: [
    { user: "Alice", text: "Great!", date: ISODate("2024-01-15") },
    { user: "Bob", text: "Thanks", date: ISODate("2024-01-16") }
  ]
}

三、面向列數據庫 (Cassandra, HBase, Hypertable)

行式 vs 列式 儲存對比

維度行式 (傳統 RDBMS)列式 (NoSQL 列式)
儲存單位行列
讀取模式整行讀取 (OLTP)按需讀取特定列 (OLAP)
壓縮率低 (不同類型混存)極高 (同類型列連續、編碼壓縮)
寫入性能中等 (索引維護)極高 (LSM Tree 追寫)
Schema 變更ALTER TABLE (鎖表)動態新增列族/列
典型查詢點查詢、範圍掃描大範圍列聚合、時間序列

Cassandra 資料模型

Keyspace (≈ Database)
  └── Table (Column Family)
        ├── Partition Key (決定分片)
        ├── Clustering Columns (決定分區內排序)
        └── Columns (動態、稀疏)
        
-- 範例:時序感測器數據
CREATE TABLE sensor_data (
  sensor_id UUID,
  event_time TIMESTAMP,
  temperature DOUBLE,
  humidity DOUBLE,
  PRIMARY KEY (sensor_id, event_time)
) WITH CLUSTERING ORDER BY (event_time DESC);

選型決策樹

需要 ACID 事務、複雜 Join、強一致性?
  ├─ 是 → 關係型資料庫
  └─ 否 →
       數據結構簡單、極致讀寫速度、可容忍遺失?
       ├─ 是 → Memcached / Redis (快取)
       ├─ 否 →
            需持久化鍵值、支援複雜結構 (List/Set/Sorted Set)?
            ├─ 是 → Redis
            ├─ 否 →
                 文檔結構多變、需豐富查詢、無 Join?
                 ├─ 是 → MongoDB / CouchDB
                 ├─ 否 →
                      海量寫入、時間序列、列聚合分析、需水平擴展?
                      ├─ 是 → Cassandra / HBase
                      └─ 否 → 重新評估需求
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved