国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php HandlerSocket的使用

php HandlerSocket的使用

2019-11-23 16:42PHP教程網 PHP教程

目前使用MySQL的網站,多半同時使用Memcache作為鍵值緩存。雖然這樣的架構極其流行,有眾多成功的案例,但過于依賴Memcache,無形中讓Memcache成為故障的根源

Memcache數據一致性的問題:當MySQL數據變化后,如果不能及時有效的清理掉過期的數據,就會造成數據不一致。這在強調即時性的Web2.0時代,不可取。

Memcache崩潰后的雪崩效應:作為緩存的Memcache一旦崩潰,MySQL很可能在短時間內承受高負載而宕機。據說前段時間新浪微博就遭遇了這樣的問題。

注:關于清理過期數據的問題,可以在程序架構上想辦法,如果數據操作有統一DAO封裝的話,可以利用Observer模式來清理過期數據,非主題內容,資料自查。

面對這些問題,HandlerSocket項目是個不錯的解決方案,它通過插件的方式賦予MySQL完整的NoSQL功能,從原理上講,它跳過MySQL中最耗時的語法解析,查詢計劃等步驟,直接讀取數據,如果內存夠大,能裝下索引,MySQL的查詢效率能提高若干倍!

性能測試:Using MySQL as a NoSQL – A story for exceeding 750,000 qps (F*ck GFW)

因為HandlerSocket的性能足夠好,所以就沒有必要使用Memcache了,能節省大量的硬件資源,相當低碳!而且HandlerSocket操作的是MySQL放在內存中的索引,沒有額外的緩存,所以自然就不存在數據一致性的問題。

安裝

如果使用Percona Server版本的MySQL就簡單了,因為它已經內置了HandlerSocket支持,不過考慮到其內置的版本不夠新,存在一些早已修復的BUG,所以最好采用源代碼編譯。

注:舊版本HandlerSocket的一些問題可參見:What's up with HandlerSocket?

官方已經有了一份簡單的安裝文檔,但在我實際安裝時,遇到了一些其他未說明的問題,所以這里就把相應的安裝過程再寫一遍。

首先要確保已經安裝了MySQL5.1以上的版本,我用的是Ubuntu操作系統,事先已經用apt安裝了MySQL5.1.37,同時還需要相應的mysql_config,如果是Ubuntu的話,可以:

shell> aptitude install libmysqld-dev

注:如果你用的MySQL是從源代碼編譯的或官方提供的二進制版本,可以略過此步。

接著下載一份和系統MySQL版本一致的MySQL源代碼和HandlerSocket源代碼:

shell> tar zxf mysql-5.1.37.tar.gz
shell> tar zxf ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5f7443.tar.gz
shell> cd ahiguti-HandlerSocket-Plugin-for-MySQL-f5f7443
shell> ./autogen.sh
shell> ./configure --with-mysql-source=../mysql-5.1.37 \
          --with-mysql-bindir=/usr/bin \
          --with-mysql-plugindir=/usr/lib/mysql/plugin

其中的參數含義如下:with-mysql-source表示MySQL源代碼目錄,with-mysql-bindir表示MySQL二進制可執行文件目錄(也就是mysql_config所在目錄),with-mysql-plugindir表示MySQL插件目錄,如果不清楚這個目錄在哪,可以按如下方法查詢:

mysql> SHOW VARIABLES LIKE 'plugin%';
+---------------+-----------------------+
| Variable_name | Value         |
+---------------+-----------------------+
| plugin_dir  | /usr/lib/mysql/plugin |
+---------------+-----------------------+

運行命令后,如果你使用的是MySQL5.1.37版本的話,會遇到如下錯誤信息:

MySQL source version does not match MySQL binary version

明明我們的MySQL源代碼版本和二進制版本都是5.1.37,為什么還會出現這個錯誤呢?通過查詢HandlerSocket的編譯腳本,發現原來它會檢索MySQL源代碼目錄中的VERSION文件,可MySQL5.1.37的源代碼目錄里不知何故竟然沒有這個文件,所以就報錯了,既然知道了原因,那我們就照貓畫虎做一個VERSION文件放到MySQL源代碼目錄,內容如下:

MYSQL_VERSION_MAJOR=5
MYSQL_VERSION_MINOR=1
MYSQL_VERSION_PATCH=37
MYSQL_VERSION_EXTRA=

再次運行configure腳本,應該就OK了,把剩下的步驟進行完:

shell> make
shell> make install

接著需要配置一下HandlerSocket,編輯MySQL配置文件,加入如下內容:

[mysqld]
loose_handlersocket_port = 9998
# the port number to bind to (for read requests)
loose_handlersocket_port_wr = 9999
# the port number to bind to (for write requests)
loose_handlersocket_threads = 16
# the number of worker threads (for read requests)
loose_handlersocket_threads_wr = 1
# the number of worker threads (for write requests)
open_files_limit = 65535
# to allow handlersocket accept many concurrent
# connections, make open_files_limit as large as
# possible.

此外,InnoDB的innodb_buffer_pool_size,或MyISAM的key_buffy_size等關系到緩存索引的選項盡可能設置大一些,這樣才能發揮HandlerSocket的潛力。

注:apt包管理下的配置文件一般是/etc/mysql/my.cnf,否則一般是/etc/my.cnf

最后登陸MySQL并激活HandlerSocket插件:

mysql> INSTALL PLUGIN handlersocket soname 'handlersocket.so';

重啟一下MySQL服務,如果沒有問題,就能在MySQL里看到HandlerSocket的線程了:

mysql> SHOW PROCESSLIST;

也可以通過查詢剛配置的端口是否已經被MySQL占用來確認是否安裝成功:

shell> lsof -i :9998
shell> lsof -i :9999

完活兒!現在你的MySQL已經具備NoSQL的能力了!

實戰

首先創建一個測試用的表:

CREATE TABLE IF NOT EXISTS `test`.`t` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`a` varchar(10) NOT NULL,
`b` varchar(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `a_b` (`a`,`b`)
) ENGINE=InnoDB;

注:理論上HandlerSocket支持MyISAM,InnoDB等各種引擎,不過推薦使用InnoDB。

HandlerSocket的協議非常簡單,指令通過TAB分割,一行就是一個請求。本文用到了:

  • 打開索引:P <索引標識> <數據庫> <表> <索引> <字段>

  • 插入數據:<索引標識> ‘+' <參數個數> <參數1> … <參數N>

  • 讀取數據:<索引標識> <操作> <參數個數> <參數1> … <參數N> <條數> <偏移>

SQL原型:INSERT INTO test.t (id, a, b) VALUES (1, ‘a1′, ‘b1′), (2, ‘a2′, ‘b2′)

shell> telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
P    1    test  t    PRIMARY id,a,b
0    1
1    +    3    1    a1   b1
0    1    0
1    +    3    2    a2   b2
0    1    0

注:使用HandlerSocket時,因為沒有實際運行SQL,所以Binlog記錄的是Row格式。

SQL原型:SELECT id, a, b FROM test.t WHERE id = 1 LIMIT 1

shell> telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
P    1    test  t    PRIMARY id,a,b
0    1
1    =    1    1    1    0
0    3    1    a1   b1

SQL原型:SELECT id, a, b FROM test.t WHERE id >=1 LIMIT 2

shell> telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
P    1    test  t    PRIMARY id,a,b
0    1
1    >=   1    1    2    0
0    3    1    a1   b1   2    a2   b2

SQL原型:SELECT id, a, b FROM test.t WHERE a = ‘a1′ AND b = ‘b1′ LIMIT 1

shell> telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
P    1    test  t    a_b   id,a,b
0    1
1    =    2    a1   b1   1    0
0    3    1    a1   b1

對HandlerSocket一個常見的誤解是只能執行PRIMARY類型的KV查詢,實際上只要支持索引,一般的簡單查詢它都能勝任,篇幅所限,這里就不多說了,如果你覺得直接操作telnet有些吃力,也可以使用自己熟悉的客戶端來測試,官方文檔里有介紹。

注:HandlerSocket作者寫了一個不錯的PPT可以參考:HandlerSocket plugin for MySQL

記:MySQL5.6提供原生的Memcached API,實際就是KV型NoSQL了,但HandlerSocket并不局限于KV形式,所以仍然有生存空間。

互聯網技術發展猶如一列高速運行的火車,下一站:HandlerSocket!大家做好準備吧。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩av一区二区在线观看 | 国产精品国产三级国产aⅴ 亚洲精品免费在线观看 | 在线欧美一区 | 欧美性猛交xxxx黑人猛交 | 午夜精品久久久久 | 国产精品99久久久久久久vr | 国产精品日本一区二区不卡视频 | 极品美女销魂一区二区三区 | 三区在线视频 | 九九热精品视频在线观看 | 国产高清av在线一区二区三区 | 香蕉视频禁止18 | 午夜精品久久久久久久久久久久久 | 黄色在线免费 | 国产欧美日韩综合精品一区二区 | 视频一区在线 | 国产精品久久精品 | a国产在线 | 国产精品久久久久久久久久久久久 | 欧美婷婷| 日韩欧美亚洲 | 亚洲精品不卡 | 免费视频二区 | 欧美美女黄色网 | 久久久久久亚洲 | 亚洲一一在线 | 亚洲国产精品视频一区二区三区 | 亚洲精品a | 91新视频| 最近免费中文字幕大全免费版视频 | 国产在线精品一区 | 久久久一区二区精品 | 伊人福利视频 | 免费看黄色的视频 | 久久精品91| 久久国产视频精品 | av免费直接看 | 日本丶国产丶欧美色综合 | 国产1区2区3区 | 国产精品久久久久久久久久久久冷 | 国产精品一区二区三区四区 |