Instagram 說明用 PostgreSQL 的五個優(yōu)點(diǎn)
先不管 Instagram 最近的負(fù)成長以及反駁,剛剛在 Instagram Engineering 上看到對 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)…
***個是講 partial indexes,這與 MySQL community 常講的 partial index 是不同的東西。
MySQL 的 partial index 是指只 index 某個欄位的一部分,像是 VARCHAR(255) 里面只 index 前面的 10 chars;而 PostgreSQL 的 partial indexes 則是指符合某個條件的 row 才 index。
第二個是 functional indexes,可以針對欄位計(jì)算後再 index。MySQL 的 partial index 在 PostgreSQL 里可以用 functional indexes + substr()
達(dá)到相同的效果,而且還有其他 function 可以用,花樣更多。
兩個都是 MySQL 做不到 (或是做不好),但 PostgreSQL 做的不錯的。一般在 MySQL 要達(dá)到 PostgreSQL 的這兩個功能需要另外開一個欄位,在里面儲存去正規(guī)化后的值,再對這個欄位 index。
第三個是講 defrag 的事情,這部份 MySQL 也可以用第三方的工具 Percona Toolkit 搞定。第四個講 PostgreSQL 的 Write-Ahead Log,有點(diǎn)像是 MySQL 的 binlog。***一個講 Python上的psycopg2。
看來看去就是 index 那塊最明顯。可以直接減少去正規(guī)化的欄位…