全文引用自:
Inside
談到網頁的開發技術,許多人的印象中不外乎便是PHP、Java或是.Net等等,而比較新興的技術則可能是Ruby或是Python,在本系列文章中,我將介紹在近日中熱門的網路技術,讓各位讀者能夠掌握最新趨勢。
NoSQL v.s. SQL資料庫既上次談了
Node.js這個網站的後端技術後,我們這次要看的是網站的另外一個要角:資料庫系統。
講到近年來的資料庫系統發展,我想浮現大家眼前的不外乎便是
Google BigTable論文後所帶起的各種新一代NoSQL資料庫,包含
HBase、
CouchDB、
Cassandra等都是這一波的熱門選擇。
所謂的NoSQL,指的便是相對於一般傳統SQL資料庫像是MySQL、PostgresSQL或者是MS SQL等關聯式的資料庫。
NoSQL資料庫的強項是高效能、分散式的架構、並且打破傳統的schema欄位架構限制等優點,目前已經應用在很多實際運作的熱門網站,包含很多社群網路或者是社交遊戲等需要大量資料處理的網站。
SQL still works但在大家一昧追求NoSQL資料庫的同時,其實傳統SQL資料庫仍然有其優點在,像是其資料的一致性、隔離性等仍然是SQL系統較為可靠。
即便像是Facebook這樣大量採用NoSQL解決方案的公司,其會員資料的部份也仍然是使用MySQL作為儲存方式。
況且根據許多的經驗分享,一般的網站若是在沒有超過千萬使用者前,實際上是可以完全不用考慮NoSQL的。換而言之,SQL系統並非效能不足,而是需要進行良好的優化以及設計。
HandlerSocket
HandlerSocket是由日本遊戲公司
DeNA所釋出的開放原始碼專案,為一個MySQL的外掛,企圖解決的便是上述的效能問題。
根據作者部落格的數據圖表,大家可以很明顯的發現HandlerSocket的表現相當突出:
approx qps server CPU util
MySQL via SQL 105,000 %us 60% %sy 28%
memcached 420,000 %us 8% %sy 88%
MySQL via HandlerSocket 750,000 %us 45% %sy 53%
實際上HandlerSocket的運作原理也相當的好理解,主要便是透過原生的API介面來繞過SQL查詢中最慢的步驟,也就是SQL語法的解析。曾經使用過SQL查詢的開發者變知道,為了查詢資料庫裡面的內容,我們並需撰寫SQL述句來進行查詢,而SQL語句的字串必須經過解析,這過程是相當花費時間的,且也有可能解析失敗。
除了繞過SQL語法的解析之外,在後續的優化上,HandlerSocket會保持資料表(Tables)的開啟,並不會在每次的查詢都開啟、關閉資料表,因此相較一般的SQL操作來得快上不少。
整體而言可以參考下面的流程圖:
作者的
部落格文章中也有更多的技術細節可以參考。
結論相對於現正流行的NoSQL技術,我更加看好HandlerSocket為主的MySQL優化技巧,畢竟NoSQL目前仍然在快速發展的階段,對於開發資源較為有限的創業團隊而言,或許選擇MySQL為主的技術仍然會是比較好的選擇。