Instagram 說明用 PostgreSQL 的五個(gè)優(yōu)點(diǎn)
先不管 Instagram 最近的負(fù)成長以及反駁,剛剛在 Instagram Engineering 上看到對(duì) PostgreSQL 的稱贊:「Handling Growth with Postgres: 5 Tips From Instagram」
Facebook在MySQL的領(lǐng)域里的實(shí)力以及貢獻(xiàn)度可是數(shù)一數(shù)二,但 Instagram 在被 Facebook 買下後仍然繼續(xù)使用 PostgreSQL,總是有些原因存在… 雖然真正的原因不一定是技術(shù),但這篇試著用技術(shù)解釋的內(nèi)容還是可以看一看,了解 PostgreSQL 有哪些特點(diǎn)…
***個(gè)是講 partial indexes,這與 MySQL community 常講的 partial index 是不同的東西。
MySQL 的 partial index 是指只 index 某個(gè)欄位的一部分,像是 VARCHAR(255) 里面只 index 前面的 10 chars;而 PostgreSQL 的 partial indexes 則是指符合某個(gè)條件的 row 才 index。
第二個(gè)是 functional indexes,可以針對(duì)欄位計(jì)算後再 index。MySQL 的 partial index 在 PostgreSQL 里可以用 functional indexes + substr()
達(dá)到相同的效果,而且還有其他 function 可以用,花樣更多。
兩個(gè)都是 MySQL 做不到 (或是做不好),但 PostgreSQL 做的不錯(cuò)的。一般在 MySQL 要達(dá)到 PostgreSQL 的這兩個(gè)功能需要另外開一個(gè)欄位,在里面儲(chǔ)存去正規(guī)化后的值,再對(duì)這個(gè)欄位 index。
第三個(gè)是講 defrag 的事情,這部份 MySQL 也可以用第三方的工具 Percona Toolkit 搞定。第四個(gè)講 PostgreSQL 的 Write-Ahead Log,有點(diǎn)像是 MySQL 的 binlog。***一個(gè)講 Python上的psycopg2。
看來看去就是 index 那塊最明顯??梢灾苯訙p少去正規(guī)化的欄位…