Cassandra (7) 讀寫資料的流程
1. Writing:
從節點的角度看寫入的過程,多個 DC 會選出多個 coordinators 負責對該 DC 進行寫入的工作。 寫入時要滿足要求的一致性(即寫入數量必須達到一定的門檻)。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3RsOP2ypTaAmqqKrKNrE-kmoGRLADyu3oshSJGYygMGWjIFEHqfN6U73GWMoRsgPtgsywfu2IMJIhVUL0HPm_ogeEch_aQZThQG7rQYbvIupjw3wqoe9sgEBtlCxww1wB10vnU09zA1g/s640/2018-08-27+14-44-18+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
從節點的內部看寫入的過程,寫入的對象分成 jvm (memory) 和 disk。 memory 速度快但斷電資料會消失,disk 則是相反。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTfrMlHRvztQsSlqYExIXLzXtUS4TEBDAhAbzA45-yOZPZaLiFGnzjR3WEJ4QG7sEPkOiWmu2oXxhgKsQojAuY3ER3BBch-jfJ2onM_Y3yucQzTzGPzg7_3OwShWIbPGLqN2dtvD1e7dQ/s640/2018-08-27+14-45-05+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
寫入分 5 個動作:
- 寫到 Commit Logs: Commit Logs 是紀錄在硬碟上。如果資料有問題時可以用 Commit Logs 進行重放
- 寫到 Memtables: Memtables 是紀錄在硬碟上,操作速度較快
- 更新 Row Caches: Row Caches 開啟的話會保存一些常用的 Rows,如果有舊資料被快取就會更新快取上的資料
- 寫到 SSTables: 當 Memtables 的大小超過某個門檻時,Memtables 會被寫到 SSTables,然後把 Commit Logs 中和 SSTables 重複的資料刪除
- 若資料無法寫入,則留下提示資料
2. Reading:
從節點的角度看讀取的過程,多個 DC 會選出多個 coordinators 負責對該 DC 進行讀取的工作。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiDbbKlaoXuUI6HJp2r5BLxNUqenh_Ql-j8FMV5Dgk9Q06sXgP6Ry4FrQrTtCarHFu-8am7_vArx7ssAqmd_Nnr6tEhc5BVSxhTj4qKqtkARWjUIDKfjSs6k0cbO9xsk7I9UlbXZFOtfg/s640/2018-08-27+15-57-24+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
由上圖可發現一個 DC 只有一次 full read (full read 的對象是 snitch 回報的最佳節點),其他副本回傳的是 digest 的 hash 用來確保資料的一致性。 若 full read 和 hash 不一致則考慮進行修復。
讀取也是分成 5 個動作:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEierXEZFE0Rt1f_JVN1E6t-_D4WTFGj1AJVMXBaDyDXj2sh5S0f60b1Q2dNUYwzG99au72ctrs061ObuAK8HIf3Fq7ou3onM3X7RzAcKyJBkEBR9Q8Mp41SDSvZiPI7lkYVo4_xa1BIDOg/s640/2018-08-27+16-10-41+%25E7%259A%2584%25E8%259E%25A2%25E5%25B9%2595%25E6%2593%25B7%25E5%259C%2596.png)
- 查找 Row Caches: 如果該比資料有被快取就直接返回該比資料
- 查找 Key Caches: 看看有沒有索引的紀錄,有就直接使用該索引去取得資料
- 查找 Memtables
- 查找 SSTables
- 有開啟 Row 快取就將資料寫到快取
Reference:
[1] Cassandra: The Definitive Guide(2nd Edition), Jeff Carpenter and Eben Hewitt, O’Reilly Media(2016)
留言
張貼留言