Cassandra (7) 讀寫資料的流程

1. Writing:

從節點的角度看寫入的過程,多個 DC 會選出多個 coordinators 負責對該 DC 進行寫入的工作。 寫入時要滿足要求的一致性(即寫入數量必須達到一定的門檻)。

從節點的內部看寫入的過程,寫入的對象分成 jvm (memory) 和 disk。 memory 速度快但斷電資料會消失,disk 則是相反。

寫入分 5 個動作:

  1. 寫到 Commit Logs: Commit Logs 是紀錄在硬碟上。如果資料有問題時可以用 Commit Logs 進行重放
  2. 寫到 Memtables: Memtables 是紀錄在硬碟上,操作速度較快
  3. 更新 Row Caches: Row Caches 開啟的話會保存一些常用的 Rows,如果有舊資料被快取就會更新快取上的資料
  4. 寫到 SSTables: 當 Memtables 的大小超過某個門檻時,Memtables 會被寫到 SSTables,然後把 Commit Logs 中和 SSTables 重複的資料刪除
  5. 若資料無法寫入,則留下提示資料

2. Reading:

從節點的角度看讀取的過程,多個 DC 會選出多個 coordinators 負責對該 DC 進行讀取的工作。

由上圖可發現一個 DC 只有一次 full read (full read 的對象是 snitch 回報的最佳節點),其他副本回傳的是 digest 的 hash 用來確保資料的一致性。 若 full read 和 hash 不一致則考慮進行修復。

讀取也是分成 5 個動作:

  1. 查找 Row Caches: 如果該比資料有被快取就直接返回該比資料
  2. 查找 Key Caches: 看看有沒有索引的紀錄,有就直接使用該索引去取得資料
  3. 查找 Memtables
  4. 查找 SSTables
  5. 有開啟 Row 快取就將資料寫到快取

Reference:

[1] Cassandra: The Definitive Guide(2nd Edition), Jeff Carpenter and Eben Hewitt, O’Reilly Media(2016)

留言

熱門文章