萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

HandlerSocket:賦予 MySQL NoSQL 能力的高效能外掛實戰部署

為什麼需要 HandlerSocket?

傳統 MySQL + Memcached 架構痛點:

  • 資料一致性難題:MySQL 更新後需同步清理快取,否則髒讀風險高。
  • 雪崩效應:Memcached 掛掉瞬間流量全湧入 MySQL,導致資料庫癱瘓。
  • 維運複雜度:雙系統維護、快取失效策略、雙寫邏輯。

HandlerSocket 核心優勢

  • 跳過 SQL 解析/優化器:直接存取 InnoDB 索引,延遲極低。
  • 單一資料源:無快取一致性問題,資料即時可見。
  • 極致 QPS:官方測試 750,000+ qps(記憶體足夠裝下索引時)。
  • 節省硬體:可移除 Memcached 叢集,降低成本與碳排放。

安裝部署完整步驟(Ubuntu + MySQL 5.1+)

1. 前置套件

aptitude install libmysqld-dev

2. 取得原始碼並編譯

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

3. 解決 VERSION 檔案缺失錯誤

若 configure 報 MySQL source version does not match,在 MySQL 原始碼目錄建立 VERSION 檔:

MYSQL_VERSION_MAJOR=5
MYSQL_VERSION_MINOR=1
MYSQL_VERSION_PATCH=37
MYSQL_VERSION_EXTRA=

4. MySQL 設定檔啟用外掛

[mysqld]
loose_handlersocket_port = 9998          # 讀請求埠
loose_handlersocket_port_wr = 9999       # 寫請求埠
loose_handlersocket_threads = 16         # 讀執行緒
loose_handlersocket_threads_wr = 1       # 寫執行緒
open_files_limit = 65535                 # 支援高並發連線
# 同步調大 innodb_buffer_pool_size / key_buffer_size

5. 載入外掛並驗證

INSTALL PLUGIN handlersocket SONAME 'handlersocket.so';
SHOW PROCESSLIST;  -- 應見 handlersocket 執行緒
lsof -i :9998      -- 確認埠口監聽

實戰操作範例

建立測試表

CREATE TABLE `test`.`t` (
    `id` INT 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;

協議基本指令(Tab 分隔,換行結束)

操作格式說明
開啟索引P <index_id> <db> <table> <index> <columns>建立連線句柄
插入<index_id> + <col_count> <val1> ... <valN>對應 INSERT
查詢<index_id> <op> <col_count> <val1> ... <limit> <offset>op: =, >, >=, <, <=, 前綴匹配

Telnet 互動示範

$ telnet localhost 9999
P 1 test t PRIMARY id,a,b
1 + 3 1 a1 b1
1 + 3 2 a2 b2

$ telnet localhost 9998
P 1 test t PRIMARY id,a,b
1 = 1 1 1 0   -- 查 id=1,限 1 筆,offset 0

關鍵注意事項

  • Binlog 記錄為 ROW 格式,複制環境需確認相容性。
  • 強烈建議搭配 InnoDB 使用,發揮 MVCC 與行鎖優勢。
  • 索引必須完全載入記憶體才能發揮極致效能,規劃 innodb_buffer_pool_size 時預留充足空間。
  • 生產環境建議使用 Percona Server 內建版本,避免手動編譯維護負擔。
copyright © 萬盛學電腦網 all rights reserved