SQL與NoSQL MySQL與NoSQL的融合

2021-05-26 08:39:43 字數 2421 閱讀 9451

寫這一篇內容的原因是mysql5.6.2突然推出了memcached的功能。nosql to innodb with memcached的出現,可以看出nosql對關聯式資料庫的確產生了巨大的影響,個人覺得這是乙個非常大的進步,可以讓開發人員更加方便的使用nosql和關聯式資料庫。nosql一般被認為效能高於關聯式資料庫,那麼直接在innodb之上提供nosql功能並和mysql共存是否是乙個更好的選擇呢?

mysql with handlersocket

去年在twitter上看到handlersocket的出現,並宣稱效能是memcached的兩倍時,非常令人吃驚,居然可以達到750000qps。接著handlersocket成為nosql領域談論的焦點之一,大量的人開始想要嘗試,並做過一些自己的效能測試。下圖是handlersocket的結構圖:

圖1handlersocket結構圖(**於官方)

handlersocket的出現,給我們眼前一亮的感覺。原來innodb的效能已經足夠好,並可以直接提供nosql的功能。最大的好處就是可以共享mysql的功能,dba以前的經驗一樣可以用。但是有些小小的風險:

?handlersocket沒有與mysql一起發布版本,因此對於使用myisam引擎的使用者是無緣的。不過現在percona-server已經整合了handlersocket,可以非常方便的使用。

?目前大規模的成功案例並不多,國內也只有少部分公司在嘗試,我知道的有飛信開放平台,據說還不錯。

?官方給出的測試資料在應用場景上其實並不充分,至少測試的場景跟我們實際使用的場景相差很大。但是毫無疑問,handlersocket的效能比直接使用mysql肯定要高效得多。

innodb with memcached

也許是因為handlersocket的火爆的衝擊,也許是受handlersocket的啟發,mysql開始關注nosql領域的應用,並在mysql5.6.2版本增加了通過memcached協議直接訪問原生innodb api的功能。

innodb with memcached是在提供mysql服務的同一程序中提供memcached服務,這與handlersocket的架構模式幾乎是一樣的。雖然目前innodb with memcached還是預覽版本,但是我個人更看好它,因為:

?它使用memcached協議,並同時支援文字和二進位制協議,在client的選擇和成熟度上就要勝出許多;

?其支援的三種cache模式,不但可以省去開發中使用memcached來快取資料的麻煩,並且具有更好的可靠性和資料一致性;

?在應用程式中,可以使用高效的memcached協議來運算元據,同時也可以使用sql進行複雜的查詢操作;

注意:目前通過memcached的更新操作不會記錄到binlog中,未來的版本會支援。

圖二innodb with memcached

memcached and mysql cluster

顯而易見,我們會想到mysql cluster結合memcached是乙個更好的組合,mysql cluster提供了99.999%高可用性,並真正提供了去中心化的無縫高可擴充套件性。還有什麼比這更人興奮的呢,mysql已經提供了這樣的功能

圖三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資料庫的優勢也是顯著的,就是他的簡單、高效、易擴充套件。

SQL與原生SQL的區別

sql一般指根據指定的程式規則,自動生成的sql,比如最經典的,linq to sql 原理 對使用者撰寫的sql進行一層包裝,新增更多分析功能。優勢 在靈活分析的展現介面,還可以做排序,過濾,彙總等操作 劣勢 對sql有書寫要求,需要在使用者sql中,顯式申明別名 對sql做多一層封裝,對於某些資...

SQL與T SQL的區別與聯絡

sql structured query language 結構查詢語言,sql是關聯式資料庫管理系統的標準語言。t sql transact sql sql 程式語言的增強版,它是用來讓應用程式與 sql server 溝通的主要語言。使用sql的常見關聯式資料庫管理系統 rdbms 有 orac...

PHP與SQL注入

sql注入攻擊是黑客攻擊 最常用的手段。如果你的站點沒有使用嚴格的使用者輸入檢驗,那麼常容易遭到sql注入攻擊。sql注入攻擊通常通過給站點資料庫提交不良的資料或查詢語句來實現,很可能使資料庫中的紀錄遭到暴露,更改或被刪除。下面來談談sql注入攻擊是如何實現的,又如何防範。看這個例子 suppose...