Twitter將開源其使用的MySQL
MySQL是被廣泛使用的一個數(shù)據(jù)庫,但是Web開發(fā)人員會在大規(guī)模訪問時的數(shù)據(jù)庫擴展以及性能方面遇到問題。這也是近年來NoSQL 數(shù)據(jù)庫開始出現(xiàn)并逐漸繁榮的一個原因。對于關注 MySQL 可擴展性的 DBA 人員來說,當然非常希望看到像Twitter這樣的網(wǎng)站是怎樣運用和優(yōu)化MySQL的。
Jeremy Cole和Davi Arnaut 是Twitter DBA和DB開發(fā)組的成員,他們表示,大部分Twitter 數(shù)據(jù)都采用了MySQL作為持久化存儲,包括發(fā)表的 Tweets、興趣圖、時間線,以及用戶數(shù)據(jù)。由于Twitter的數(shù)據(jù)規(guī)模和訪問規(guī)模, 他們不得不對MySQL源碼進行修改優(yōu)化以適應這種級別的應用。為了回饋社區(qū),他們決定在 BSD 許可證下開源他們對 MySQL 所做的貢獻。項目托管在 GitHub,主要的修改包括:
增加狀態(tài)變量,特別是在 InnoDB 引擎內。這樣能更有效地監(jiān)控系統(tǒng)負載和運行狀態(tài)。
在非一致性內存訪問系統(tǒng)中優(yōu)化內存分配。在初始化時就分配 InnoDB 的緩存池,如果內存不足則可迅速獲得錯誤報告,這樣在服務器面臨內存壓力時也能保證性能穩(wěn)定。
減少查詢超時中一些不必要的操作。這樣服務器可以在毫秒級別主動取消耗時過長的查詢。
以一種輕量的方式導入導出InnoDB的緩存池。這樣可以讓我們以最小的代價執(zhí)行回滾。
針對 SSD 固態(tài)硬盤進行優(yōu)化,包括page-flushing 以及減少寫操作以改善SSD硬盤壽命。
另外在4月12日,Twitter還將對Gizzard, 一個MySQL的分片復制框架進行詳細介紹。如果有任何問題,都可以在GitHub上向他們提 issue。