項目地址:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQLphp
寫這一篇內容的緣由是MySQL5.6.2忽然推出了memcached的功能。NoSQL to InnoDB with Memcached的出現,能夠看出NoSQL對關係數據庫的確產生了巨大的影響,我的以爲這是一個很是大的進步,可讓開發人員更加方便的使用NoSQL和關係數據庫。NoSQL通常被認爲性能高於關係數據庫,那麼直接在InnoDB之上提供NoSQL功能並和MySQL共存是不是一個更好的選擇呢?html
去年在twitter上看到HandlerSocket的出現,並宣稱性能是Memcached的兩倍時,很是使人吃驚,竟然能夠達到750000qps。接着HandlerSocket成爲NoSQL領域談論的焦點之一, 大量的人開始想要嘗試,並作過一些本身的性能測試。 下圖是HandlerSocket的結構圖:mysql
圖1 HandlerSocket結構圖(來源於官方)git
HandlerSocket的出現,給咱們眼前一亮的感受。原來InnoDB的性能已經足夠好,並能夠直接提供NoSQL的功能。最大的好處就是能夠共享MySQL的功能,DBA之前的經驗同樣能夠用。可是有些小小的風險:github
也許是由於HandlerSocket的火爆的衝擊,也許是受HandlerSocket的啓發,MySQL開始關注NoSQL領域的應用,並在MySQL5.6.2版本增長了經過Memcached協議直接訪問原生Innodb API的功能。sql
InnoDB with Memcached是在提供MySQL服務的同一進程中提供Memcached服務 ,這與HandlerSocket的架構模式幾乎是同樣的。雖然目前InnoDB with Memcached仍是預覽版本,可是我我的更看好它,由於:mongodb
注意:目前經過memcached的更新操做不會記錄到binlog中,將來的版本會支持。數據庫
圖二 InnoDB with Memcachedapi
顯而易見,咱們會想到MySQL Cluster結合Memcached是一個更好的組合,MySQL Cluster提供了99.999%高可用性,並真正提供了去中心化的無縫高可擴展性。還有什麼比這更人興奮的呢。緩存
MySQL已經提供了這樣的功能,源代碼在這裏。這裏有一個O'Reilly MySql Conference大會的PPT演示 ,你也能夠看下這個功能開發者的一篇博客。
圖三 NDB with Memcached
MySQL Cluster雖然具備高可靠性和無縫擴展的優點,可是對於複雜SQL查詢的效率卻不能使人滿意。不過對於僅僅依賴於key-value查詢和寫入的海量數據存儲需求,MySQL Cluster with Memcached應該是個很好的選擇。
Memcached協議因爲其簡單、協議輕量、存在大量的client,因此提供兼容Memcached協議的產品比較佔據先天的優點。
MySQL提供NoSQL的功能,我的以爲並非MySQL耐不住寂寞,而是的確在響應用戶的需求。我前面的文章也說過,「NoSQL只是一個概念,並非一個數據庫 產品,MySQL也能夠是NoSQL」,如今也正應了這句話。NoSQL從架構上就約束了開發者的架構和開發方式,從而提升擴展性和性能,而NoSQL和MySQL的融合,也同時提供了複雜查詢功能。
雖然MySQL提供了NoSQL功能,若是你要嘗試的話,你的數據庫設計必須從NoSQL出發,而後再考慮SQL查詢功能。
SQL與NoSQL的融合的確會給開發者帶來方便,好比最近很流行的Mongodb,它吸引開發最大的點就是支持簡單的關係查詢。SQL與NoSQL的融合多是將來不少數據庫產品的一個趨勢。可是純NoSQL數據庫的優點也是顯著的,就是他的簡單、高效、易擴展。
參考連接: