前段時間偶然的機會了解到handlersocket,並在自己的乙個demo中得以應用,在此做下總結。
一、handlersocket是什麼?
handlersocket是akira higuchi 寫的乙個mysql的外掛程式。以mysql daemon plugin的形式提供類似nosql的網路服務,通過這個外掛程式,你可以直接跟mysql後端的儲存引擎做key-value式的互動,省去了mysql上層的sql解釋、開啟關閉表、建立查詢計畫等cpu開銷。
二、安裝配置
1. 安裝
由於handlersocket是基於mysql資料庫的,因此在安裝handersocket前需要先按照常規方式部署mysql服務,同時需注意handlersocket時需要mysql的原始碼,因此還需要mysql原始碼編譯方式安裝。
# tar xvfz handlersocket-plugin-for-mysql-master.tar.gz其中:# cd handlersocket-plugin-for-mysql-master/
# ./autogen.sh
# ./configure --with-mysql-source=/data/software/mysql-5.5.12 \
--with-mysql-bindir=/usr/local/mysql55/bin \
--with-mysql-plugindir=/usr/local/mysql55/lib/plugin
--with-mysql-source:指定mysql原始碼所在目錄
--with-mysql-bindir:指定mysql_config所在目錄
--with-mysql-plugindir:指定mysql外掛程式的儲存路徑
執行make編譯安裝:
#make && make install完成後,mysql-plugindir目錄下應有handlersocket相關檔案
2. 配置
#*********** handlersocket setting ***********啟動mysql服務,在mysql中安裝handlersocket外掛程式: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.
mysql> install plugin handlersocket soname ¨handlersocket.so¨;
query ok, 0 rows affected (0.01 sec)
至此,handlersocket外掛程式安裝完畢。
三、php應用
<?php
$host = 'localhost';
$port = 9998;
$port_wr = 9999;
$dbname = 'hstestdb';
$table = 'hstesttbl';
//get
$hs = new handlersocket($host, $port);
if (!($hs->openindex(1, $dbname, $table, handlersocket::primary, 'k,v')))
$retval = $hs->executesingle(1, '=', array('k1'), 1, 0);
var_dump($retval);
$retval = $hs->executemulti(
array(array(1, '=', array('k1'), 1, 0),
array(1, '=', array('k2'), 1, 0)));
var_dump($retval);
unset($hs);
//update
$hs = new handlersocket($host, $port_wr);
if (!($hs->openindex(2, $dbname, $table, '', 'v')))
if ($hs->executeupdate(2, '=', array('k1'), array('v1'), 1, 0) === false)
unset($hs);
//insert
$hs = new handlersocket($host, $port_wr);
if (!($hs->openindex(3, $dbname, $table, '', 'k,v')))
if ($hs->executeinsert(3, array('k2', 'v2')) === false)
if ($hs->executeinsert(3, array('k3', 'v3')) === false)
if ($hs->executeinsert(3, array('k4', 'v4')) === false)
unset($hs);
//delete
$hs = new handlersocket($host, $port_wr);
if (!($hs->openindex(4, $dbname, $table, '', '')))
if ($hs->executedelete(4, '=', array('k2')) === false)
handlersocket的缺陷:
(1)寫操作並沒有淘汰查詢快取——如果執行了寫操作通過handlersocket,由於沒有失效查詢快取, 那麼你可能從mysql讀到舊的資料;
(2)不支援自動遞增——插入時無法從自增列上自動獲得增量值。
鑑於以上問題,揚長避短,使用其合併查詢操作,發揮其nosql效能獲取mysql的innodb型別表資料,具體操作如下:
<?php
// 通過handlersocket獲取資料
$hs = new handlersocket(hs_host, hs_port);
if (!($hs->openindex(1, 'database', 'table', handlersocket::primary, 'id,content,create_uid,create_user,created,state')))
$datalist = array();
foreach ($ids as $id)
$data = $hs->executemulti($datalist);
ansible之handlers之關於觸發事件
觸發器的作用是主要當我們關注的事件發生變化的時候,我們所要進行的操作。notify 這個action可用於再每個play的最後觸發,這樣可以避免有多次改變時每次都執行制定的操作。取而代之的就是當這些所有的變化發生完成後一次性執行制定的操作。再notify中列出的操作成為handler,即notify...
mysql 審計外掛程式 MySQL審計外掛程式使用
or詳細的配置可以參考官方文件 解壓檔案 unzip audit plugin mysql 5.7 1.1.7 805 linux x86 64.zip 將安裝包libaudit plugin.so檔案複製到 plugin dir目錄 root localhost 10 07 none show g...
mysql外掛程式式 MySQL外掛程式式儲存引擎(下)
在mysql 5.1中,mysql ab引入了新的外掛程式式儲存引擎體系結構,允許將儲存引擎載入到正在執行的mysql伺服器中。使用mysql外掛程式式儲存引擎體系結構,允許資料庫使用者為特定的應用需求選擇專門的儲存引擎,完全不需要管理任何特殊的應用編碼要求。採用mysql伺服器體系結構,由於在儲存...