MySQL下的NoSQL解決方案HandlerSocket_MySQL教程
推薦:MySQL引擎 學(xué)習(xí)筆記一般來(lái)說(shuō),MySQL有以下幾種引擎:ISAM、MyISAM、HEAP、InnoDB和Berkley(BDB)。注意:不同的版本支持的引擎是有差異的。當(dāng)然啦,如果你感覺(jué)自己的確技術(shù)高超,你還能夠使用MySQL++來(lái)創(chuàng)建自己的數(shù)據(jù)庫(kù)引擎,這個(gè)已經(jīng)out of my knowledge,牛人可以參照MySQL++ API幫助來(lái)
目前使用MySQL的網(wǎng)站,多半同時(shí)使用Memcache作為鍵值緩存。雖然這樣的架構(gòu)極其流行,有眾多成功的案例,但過(guò)于依賴Memcache,無(wú)形中讓Memcache成為故障的根源:
Memcache數(shù)據(jù)一致性的問(wèn)題:當(dāng)MySQL數(shù)據(jù)變化后,如果不能及時(shí)有效的清理掉過(guò)期的數(shù)據(jù),就會(huì)造成數(shù)據(jù)不一致。這在強(qiáng)調(diào)即時(shí)性的Web2.0時(shí)代,不可取。
Memcache崩潰后的雪崩效應(yīng):作為緩存的Memcache一旦崩潰,MySQL很可能在短時(shí)間內(nèi)承受高負(fù)載而宕機(jī)。據(jù)說(shuō)前段時(shí)間新浪微博就遭遇了這樣的問(wèn)題。
注:關(guān)于清理過(guò)期數(shù)據(jù)的問(wèn)題,可以在程序架構(gòu)上想辦法,如果數(shù)據(jù)操作有統(tǒng)一DAO封裝的話,可以利用Observer模式來(lái)清理過(guò)期數(shù)據(jù),非主題內(nèi)容,資料自查。
面對(duì)這些問(wèn)題,HandlerSocket項(xiàng)目是個(gè)不錯(cuò)的解決方案,它通過(guò)插件的方式賦予MySQL完整的NoSQL功能,從原理上講,它跳過(guò)MySQL中最耗時(shí)的語(yǔ)法解析,查詢計(jì)劃等步驟,直接讀取數(shù)據(jù),如果內(nèi)存夠大,能裝下索引,MySQL的查詢效率能提高若干倍!
性能測(cè)試實(shí)例:Using MySQL as a NoSQL – A story for exceeding 750,000 qps (GFW)
因?yàn)镠andlerSocket的性能足夠好,所以就沒(méi)有必要使用Memcache了,能節(jié)省大量的硬件資源,相當(dāng)?shù)吞�!而且HandlerSocket操作的是MySQL放在內(nèi)存中的索引,沒(méi)有額外的緩存,所以自然就不存在數(shù)據(jù)一致性的問(wèn)題。
安裝
如果使用Percona Server版本的MySQL就簡(jiǎn)單了,因?yàn)樗呀?jīng)內(nèi)置了HandlerSocket支持,不過(guò)考慮到其內(nèi)置的版本不夠新,存在一些早已修復(fù)的BUG,所以最好采用源代碼編譯。
官方已經(jīng)有了一份簡(jiǎn)單的安裝文檔,但在我實(shí)際安裝時(shí),遇到了一些其他未說(shuō)明的問(wèn)題,所以這里就把相應(yīng)的安裝過(guò)程再寫(xiě)一遍。
首先要確保已經(jīng)安裝了MySQL5.1以上的版本,我用的是Ubuntu操作系統(tǒng),事先已經(jīng)用apt安裝了MySQL5.1.37,同時(shí)還需要相應(yīng)的mysql_config,如果是Ubuntu的話,可以:
注:如果你用的MySQL是從源代碼編譯的或官方提供的二進(jìn)制版本,可以略過(guò)此步。
接著下載一份和系統(tǒng)MySQL版本一致的MySQL源代碼和HandlerSocket源代碼:
mysql-5.1.37.tar.gz
ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5f7443.tar.gz
其中的參數(shù)含義如下:with-mysql-source表示MySQL源代碼目錄,with-mysql-bindir表示MySQL二進(jìn)制可執(zhí)行文件目錄(也就是mysql_config所在目錄),with-mysql-plugindir表示MySQL插件目錄,如果不清楚這個(gè)目錄在哪,可以按如下方法查詢:
運(yùn)行命令后,如果你使用的是MySQL5.1.37版本的話,會(huì)遇到如下錯(cuò)誤信息:
MySQL source version does not match MySQL binary version
明明我們的MySQL源代碼版本和二進(jìn)制版本都是5.1.37,為什么還會(huì)出現(xiàn)這個(gè)錯(cuò)誤呢?通過(guò)查詢HandlerSocket的編譯腳本,發(fā)現(xiàn)原來(lái)它會(huì)檢索MySQL源代碼目錄中的VERSION文件,可MySQL5.1.37的源代碼目錄里不知何故竟然沒(méi)有這個(gè)文件,所以就報(bào)錯(cuò)了,既然知道了原因,那我們就照貓畫(huà)虎做一個(gè)VERSION文件放到MySQL源代碼目錄,內(nèi)容如下:
再次運(yùn)行configure腳本,應(yīng)該就OK了,把剩下的步驟進(jìn)行完:
接著需要配置一下HandlerSocket,編輯MySQL配置文件,加入如下內(nèi)容:
此外,InnoDB的innodb_buffer_pool_size,或MyISAM的key_buffy_size等關(guān)系到緩存索引的選項(xiàng)盡可能設(shè)置大一些,這樣才能發(fā)揮HandlerSocket的潛力。
注:apt包管理下的配置文件一般是/etc/mysql/my.cnf,否則一般是/etc/my.cnf
最后登陸MySQL并激活HandlerSocket插件:
如果沒(méi)有問(wèn)題的話,就能在MySQL里看到HandlerSocket的線程了:
也可以通過(guò)查詢剛配置的端口是否已經(jīng)被MySQL占用來(lái)確認(rèn)是否安裝成功:
完活兒!現(xiàn)在你的MySQL已經(jīng)具備NoSQL的能力了!
實(shí)戰(zhàn)
首先創(chuàng)建一個(gè)測(cè)試用的表:
注:理論上HandlerSocket支持MyISAM,InnoDB等各種引擎,不過(guò)推薦使用InnoDB。
HandlerSocket的協(xié)議非常簡(jiǎn)單,指令通過(guò)TAB分割,一行就是一個(gè)請(qǐng)求。
打開(kāi)索引:P <索引標(biāo)識(shí)> <數(shù)據(jù)庫(kù)> <表> <索引> <字段>
插入數(shù)據(jù):<索引標(biāo)識(shí)> ‘+’ <參數(shù)個(gè)數(shù)> <參數(shù)1> … <參數(shù)N>
讀取數(shù)據(jù):<索引標(biāo)識(shí)> <操作> <參數(shù)個(gè)數(shù)> <參數(shù)1> … <參數(shù)N> <條數(shù)> <偏移>
SQL原型:INSERT INTO test.t (id, a, b) VALUES (1, ‘a1′, ‘b1′), (2, ‘a2′, ‘b2′)
注:使用HandlerSocket時(shí),因?yàn)闆](méi)有實(shí)際運(yùn)行SQL,所以Binlog記錄的是Row格式。
SQL原型:SELECT id, a, b FROM test.t WHERE id = 1 LIMIT 1
SQL原型:SELECT id, a, b FROM test.t WHERE id >=1 LIMIT 2
SQL原型:SELECT id, a, b FROM test.t WHERE a = ‘a1′ AND b = ‘b1′ LIMIT 1
對(duì)HandlerSocket一個(gè)常見(jiàn)的誤解是只能執(zhí)行PRIMARY類型的KV查詢,實(shí)際上只要支持索引,一般的簡(jiǎn)單查詢它都能勝任,篇幅所限,這里就不多說(shuō)了,如果你覺(jué)得直接操作telnet有些吃力,也可以使用自己熟悉的客戶端來(lái)測(cè)試,官方文檔里有介紹。
分享:navicat如何連接mysql?navicat連接mysql詳細(xì)圖文教程最新版navicat for mysql,自帶注冊(cè)碼。已經(jīng)綠化,解壓到任意目錄就可運(yùn)行。 Navicat Premium 是一個(gè)可多重連接的數(shù)據(jù)庫(kù)管理工具,它可讓你以單一程序同時(shí)連接到 MySQL、Oracle、PostgreSQL、SQLite 及 sql server 數(shù)據(jù)庫(kù),讓管理不同類型的數(shù)據(jù)庫(kù)更加方便。Navicat Pr
- MySQL引擎 學(xué)習(xí)筆記
- navicat如何連接mysql?navicat連接mysql詳細(xì)圖文教程
- 如何從Windows命令行啟動(dòng)MySQL
- 你應(yīng)該知道的10個(gè)MySQL客戶啟動(dòng)選項(xiàng)
- MySQL十條特殊技巧
- 用特殊的MySQL運(yùn)算符獲得更多數(shù)據(jù)比較功能
- MySQL數(shù)據(jù)庫(kù)中與 NULL值有關(guān)的幾個(gè)問(wèn)題
- Redis SORT排序命令使用方法詳解
- mysql多表隨機(jī)查詢優(yōu)化方案
- 通過(guò)frm&ibd 恢復(fù) Mysql ibdata 丟失或損壞的數(shù)據(jù)教程
- mysql數(shù)據(jù)庫(kù)ROOT賬號(hào)權(quán)限丟失問(wèn)題解決方法
- hash和solr在海量數(shù)據(jù)分布式搜索引擎中的應(yīng)用教程
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- @@ROWCOUNT全局變量
- 解析MYSQL 數(shù)據(jù)庫(kù)導(dǎo)入SQL 文件出現(xiàn)亂碼的問(wèn)題
- 怎么重置mysql的自增列AUTO_INCREMENT初時(shí)值
- MySQL導(dǎo)入導(dǎo)出數(shù)據(jù)出現(xiàn)亂碼的解決辦法
- 通過(guò)frm&ibd 恢復(fù) Mysql ibdata 丟失或損壞的數(shù)據(jù)教程
- MySQL性能優(yōu)化的最佳21條經(jīng)驗(yàn)
- 利用Xtrabackup工具備份及恢復(fù)(MySQL DBA的必備工具)
- 深入mysql "ON DUPLICATE KEY UPDATE" 語(yǔ)法的分析
- MySQL出現(xiàn)大量unauthenticated user
- SQL查詢超時(shí)的設(shè)置方法(關(guān)于timeout的處理)
猜你也喜歡看這些
- SQL查詢語(yǔ)句精華使用簡(jiǎn)要
- 怎樣升級(jí)SQL Server 2008數(shù)據(jù)庫(kù)引擎
- 淺談SQL Server數(shù)據(jù)倉(cāng)庫(kù)相關(guān)概念及構(gòu)建流程
- SQL Server數(shù)據(jù)庫(kù)中處理空值時(shí)常見(jiàn)問(wèn)題
- sql語(yǔ)句:SQLServer字段排序(按筆畫(huà),拼音,拼音首字母)
- 揭秘一個(gè)修改Oracle數(shù)據(jù)庫(kù)用戶密碼的訣竅
- 如何檢測(cè)你的SQL Server是否有特洛伊木馬
- PL/SQL DEVELOPER 使用的一些技巧
- 如何使用SQL Server代理運(yùn)行CmdExec命令
- Win7 32/64位系統(tǒng)下安裝SQL2005和SP3補(bǔ)丁安裝教程[圖文]
- 相關(guān)鏈接:
- 教程說(shuō)明:
MySQL教程-MySQL下的NoSQL解決方案HandlerSocket
。