PostgreSQL 對 NoSQL 的看法...

二月的時候 PostgreSQL 的人在 FOSDEM PGDay 2013 上發表了對 NoSQL 的看法 (PDF 投影片):「PostgreSQL as a Schemaless Database.」。

先說明,這投影片相當酸 XD

不過這份投影片說明了大多數人的問題:

  • 其實大多用 NoSQL 的人不知道在用什麼...
  • 就算你知道你在用什麼,你用得很爽的功能其實在「傳統的」「SQL 架構」下效能通常都會更好...

另外我建議可以看看維基百科上的 Entity-attribute-value model,大多數你想用 NoSQL 的情況在這個 case 下就可以解決,而且效能相當好。

PostgreSQL 對 security update 的極端作法...

Hacker News 文摘上看到,PostgreSQL 決定對這次的 security update 採取最極端的作法:「Extra security measures for next week's releases」。

包括全面管制 Git repository 公開資訊:官方的 Git repository 將會在正式釋出修正前限制只有 committer 可以存取,並且暫停 GitHub 以及其他 git mirror 權限。

另外 mailing list 也受到管制,包括了 src commit log 以及 document commit log。

信件開頭就提到這次安全性漏洞足以說服 PostgreSQL 的人採取最極端的作法,避免在有修正方案前造成漏洞洩漏出來被使用:

The core committee has decided that one of the security issues due to be fixed next week is sufficiently bad that we need to take extra measures to prevent it from becoming public before packages containing the fix are available. (This is a scenario we've discussed before, but never had to actually implement.)

不過這反而讓人更關注,甚至上了 Hacker News 熱門榜...

在 PostgreSQL 裡分析 PostgreSQL mailing list 行為...

在「Analyzing PostgreSQL Email Archives with PostgreSQL」這篇文章看到的,用 PostgreSQL 所提供的功能找出一些資訊... (像是 full text search 的功能)

於是就產生出這樣的圖:(應該不用解釋?)

還有「Probability that a new thread gets a response」或是與 Competitors 相關的統計 XD

Stripe 發表了將 MongoDB 資料倒到 PostgreSQL 的工具:MoSQL

Stripe 是家電子付款的新創公司,相較於既有的電子付款機制 (像是 PayPal),Stripe 所提供的工具與介面對開發者與使用者非常友善。

昨天 Stripe 推出了即時將 MongoDB 的資料倒到 PostgreSQL 的工具 MoSQL:「Announcing MoSQL」。

據官方說法,要撈資料的時候用 SQL 比較方便,而且每個人都懂 SQL,所以他們開發了 MoSQL:

The thing is, we also love SQL. We love the ease of doing ad-hoc data analysis over small-to-mid-size datasets in SQL. We love doing JOINs to pull together reports summarizing properties across multiple datasets. We love the fact that virtually every employee we hire already knows SQL and is comfortable using it to ask and answer questions about data.

由於 PostgreSQL 9.2 支援 JSON 資料結構,感覺很像是要逃離 MongoDB 的工具啊... 雖然官方都不承認 XD

Instagram 說明用 PostgreSQL 的五個優點...

先不管 Instagram 最近的負成長以及反駁,剛剛在 Instagram Engineering 上看到對 PostgreSQL 的稱讚:「Handling Growth with Postgres: 5 Tips From Instagram

FacebookMySQL 的領域裡的實力以及貢獻度可是數一數二,但 Instagram 在被 Facebook 買下後仍然繼續使用 PostgreSQL,總是有些原因存在... 雖然真正的原因不一定是技術,但這篇試著用技術解釋的內容還是可以看一看,了解 PostgreSQL 有哪些特點...

第一個是講 partial indexes,這與 MySQL community 常講的 partial index 是不同的東西。

MySQL 的 partial index 是指只 index 某個欄位的一部分,像是 VARCHAR(255) 裡面只 index 前面的 10 chars;而 PostgreSQL 的 partial indexes 則是指符合某個條件的 row 才 index。

第二個是 functional indexes,可以針對欄位計算後再 index。MySQL 的 partial index 在 PostgreSQL 裡可以用 functional indexes + substr() 達到相同的效果,而且還有其他 function 可以用,花樣更多。

兩個都是 MySQL 做不到 (或是做不好),但 PostgreSQL 做的不錯的。一般在 MySQL 要達到 PostgreSQL 的這兩個功能需要另外開一個欄位,在裡面儲存去正規化後的值,再對這個欄位 index。

第三個是講 defrag 的事情,這部份 MySQL 也可以用第三方的工具 Percona Toolkit 搞定。第四個講 PostgreSQL 的 Write-Ahead Log,有點像是 MySQL 的 binlog。最後一個講 Python 上的 psycopg2

看來看去就是 index 那塊最明顯。可以直接減少去正規化的欄位...

看 Mozilla Database Team 的年終報告...

有時候除了可以看介紹新技術的文章學東西外,報告類的文章也可以看得出來目前的趨勢。

像是 Mozilla Database Team 的年終報告描述近況與最後這季做了哪些事情「December News from the Mozilla Database Team」:

  • 之前還在用 MySQL 5.0,現在 Migrate 到 5.1 了,另外正在嘗試 MariaDB 5.5。
  • 很大一部分是在 tune Bugzilla 的效能,包括 SQL query optimization,以及 data partition 計畫。
  • 測試 SSD 覺得不錯,看起來好像也測過 Fusion-io 的產品,不過價錢不太能接受?

另外還有一些 PostgreSQL 的說明,看起來還沒穩下來...

目前已經看到維基百科與 Mozilla 都在嘗試 MariaDB,看了看 MariaDB versus MySQL - Features 發現有趣的東西還不少,除了 Aria 以外,Virtual ColumnsDynamic columns 似乎都是有趣的東西...

PostgreSQL 提供 apt 可以用了...

在「apt.postgresql.org」這篇文章裡看到 PostgreSQL 宣佈官方 apt repository 的正式公告:「PGDG apt repository for Debian/Ubuntu」。

目前支援的 OS 包括了:

  • Debian 6.0 (squeeze)、7.0 (wheezy) 與 unstable (sid)
  • Ubuntu 12.04 (precise)

其中 Ubuntu 10.04 (lucid) 還正在進行。而 PostgreSQL 的版本從 8.3 到 9.2 (包括了 8.{3,4} 以及 9.{0,1,2} 這五個版本) 都支援。

比較特別的是居然支援 unstable,大概是因為自己要用?

來測試看看好了...

PostgreSQL 9.2 出版...

PostgreSQL 9.2 放出來了:「PostgreSQL 9.2 released」。

其中一個重要的功能是直接支援 JSON 資料型態。之前看到「Building a MongoDB Clone in Postgres: Part 1」與「Building a MongoDB Clone in Postgres: Part 2」這兩篇,用 PostgreSQL 9.2 (當時還在 beta) 去堆 MongoDB 提供的功能。

另外一個對於效能會有幫助的新特性是 covering index,可以避免額外的 disk access。

花時間看看 PostgreSQL...

雖然工作上都還是用 MySQL,但還是來看看其他的 database... 印象中對 PostgreSQL 最主要的差異 (與 MySQL 相比較) 是在於 index 的彈性...

PostgreSQL 也是個超大的 open source project,所以除了可以到 PostgreSQL 的官方網站找資料外,英文版維基百科上的資料也是對於熟悉 PostgreSQL 的入口:「PostgreSQL - Wikipedia, the free encyclopedia」。

現在 PostgreSQL 最新的 stable 版本是 9.1。依照 Versioning policy 文件,從第一個 major 版本釋出後,提供五年的軟體支援。現在支援的版本包括 8.3、8.4、9.0 與 9.1。另外最近剛出 9.2 beta1,在「PostgreSQL 9.2 Beta 1 Available for Testing」有些說明可以看。

功能面上,除了本來就很強的功能外,內建 Replication 是從 9.0 開始,其中 9.0 與 9.1 分別支援 async replication 與 sync replication,9.2 則是多了 Cascading replication (應該是指串接)。

商業支援則是常常可以看到 EnterpriseDB。有名的用戶包括了 InstagramHeroku

接下來就是實際玩看看...