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