月度歸檔:2019年01月

打破WiredTiger的Logjam(下篇):無等待解決方案

本文的上篇探討了WiredTiger中WAL的原始算法,該算法用于合并寫操作以達到最小化I/O的目的。它沒有使用耗時的鎖,而是分兩個階段使用CAS原子操作來實現。只要每個核運行的線程不太多,這個算法就可以非常好地工作。但當線程數超過該限制時,它為了避免鎖而依賴于忙等待的機制會導致logjam——鑒于[......]

閱讀全文

打破WiredTiger的Logjam(上篇):預寫式日志(The Write-Ahead Log)

你無法優化代碼;優化是針對特定的條件來實現的。當條件改變時,你的優化反而可能會變為瓶頸。這時仔細審查你對這些條件的假設,其中也許就蘊藏著解決方案的關鍵。

WiredTiger的WAL(write-ahead log)正說明了這一原則。它是高性能存儲引擎中的一個關鍵代碼路徑,我曾經對其進行了大量優化[......]

閱讀全文

MongoDB從事務到復制

本文將針對MongoDB數據庫,對這些問題進行更加深入的探討。事務和復制對于很多數據庫來說是共性,但每一種數據庫在這兩個問題的細節之處都會有各自的考量,帶來了各自的特性;圍繞著對共性和特性的討論,我們將得以還原設計的權衡與思量。[......]

閱讀全文