程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL消息存儲引擎Q4M試玩

MySQL消息存儲引擎Q4M試玩

編輯:MySQL綜合教程


1. 安裝 下載二進制包: 由於我的mysql是5.1.48,從官網選擇對應的包 http://q4m.kazuhooku.com/dist/old/ 下載後解壓 a. 將support-files/q4m-forward  拷貝到mysql安裝目錄/bin下 b. 將libqueue_engine.so 拷貝到mysql安裝目錄/lib/mysql/plugin下 執行: $cat support-files/install.sql  www.2cto.com    INSTALL PLUGIN queue SONAME 'libqueue_engine.so'; CREATE FUNCTION queue_wait RETURNS INT SONAME 'libqueue_engine.so'; CREATE FUNCTION queue_end RETURNS INT SONAME 'libqueue_engine.so'; CREATE FUNCTION queue_abort RETURNS INT SONAME 'libqueue_engine.so'; CREATE FUNCTION queue_rowid RETURNS INT SONAME 'libqueue_engine.so'; CREATE FUNCTION queue_set_srcid RETURNS INT SONAME 'libqueue_engine.so'; CREATE FUNCTION queue_compact RETURNS INT SONAME 'libqueue_engine.so'; 這時候Queue引擎的狀態還是disable,重啟一下mysqld就變成active了。 root@test 05:50:59>show plugins; +---------------------+--------+--------------------+---------------------+---------+ | Name                | Status | Type               | Library             | License | +---------------------+--------+--------------------+---------------------+---------+ | binlog              | ACTIVE | STORAGE ENGINE     | NULL                | GPL     | | partition           | ACTIVE | STORAGE ENGINE     | NULL                | GPL     | | CSV                 | ACTIVE | STORAGE ENGINE     | NULL                | GPL     | | MEMORY              | ACTIVE | STORAGE ENGINE     | NULL                | GPL     | | MyISAM              | ACTIVE | STORAGE ENGINE     | NULL                | GPL     | | MRG_MYISAM          | ACTIVE | STORAGE ENGINE     | NULL                | GPL     | | InnoDB              | ACTIVE | STORAGE ENGINE     | ha_innodb_plugin.so | GPL     | | INNODB_TRX          | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so | GPL     | | INNODB_LOCKS        | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so | GPL     | | INNODB_LOCK_WAITS   | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so | GPL     | | INNODB_CMP          | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so | GPL     | | INNODB_CMP_RESET    | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so | GPL     | | INNODB_CMPMEM       | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so | GPL     | | INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so | GPL     | | QUEUE               | ACTIVE | STORAGE ENGINE     | libqueue_engine.so  | GPL     | +---------------------+--------+--------------------+---------------------+---------+ 安裝完畢,可以開始玩一把了。 2. a.創建一個QUEUE表 root@test 05:52:29>create table t1 (a int , b varchar(100)) engine=queue; Query OK, 0 rows affected (0.00 sec) 嘗試插入一條數據:  www.2cto.com   root@test 05:52:51>insert into t1 values (1,"sd"); ERROR 1598 (HY000): Binary logging not possible. Message: Statement cannot be logged to the binary log in row-based nor statement-based format 咿?插入失敗,看樣子Queue不支持binlog復制。好吧,重啟把binlog禁用掉。再次執行 root@test 05:57:03>insert into t1 values (1,"sd");  Query OK, 1 row affected (0.01 sec) 這下插入成功了 root@test 05:57:13>insert into t1 values (2,"sda"),(3,"fio"),(4,"sas"); Query OK, 3 rows affected (0.00 sec) ---------------------////-------------------- 以下內容有些是參考自官方的一個PPT。 ------------------////------------------------- 那麼QUEUE存儲引擎和其他存儲引擎(例如Innodb)有什麼不同呢? ——不支持主鍵和索引 ——支持insert/delete,但不支持update ——根據插入數據的順序進行排序 ——緩存select count(*) 另外該存儲引擎使用了多個定義的函數來簡化操作,堪稱傻瓜式!!!!   針對每個連接有兩種模式:OWNER模式和Non-Owner模式,在進入owner模式後,該連接所擁有的數據對其他連接而言是不可見的。 模式的切換使用函數來實現: a).進入Owner模式 通常情況下,在發起連接後,處於Non-Owner模式,當調用函數Queue_wait()時,進入Owner 模式,根據傳遞給queue_wait函數的參數,會等待直到可以獲得一行數據,在這之後,這行數據對其他連接而言是不可見的。 Queue_wait的參數類似於如下格式: select * from t1 where  queue_wait(“t1”);    等待獲得t1內的一行數據,默認超時時間為60秒 Select * from t1 where  queue_wait(“t1: a<4”) ----等待a<4的數據行  www.2cto.com   注:只支持檢查數值類型的行 Select  queue_wait(“t1”,”t2”,30) 檢查t1或t2表是否有記錄,若獲得t1表記錄,返回1,若是t2表,則返回2,若是30秒超時,返回0 b)退出owner模式 有兩種方式: (1).調用queue_end()刪除之前由queue_wait獲得的行記錄並返回到Non-Owner模式 (2)調用 queue_abort()釋放擁有的行,但不刪除。關閉連接與queue_abort()的效果相同。 3.內部行Id 每一行都有一個內建64位的Row ID,主要用於檢測沖突。 Queue_rowid() ----返回當前連接擁有的行的RowId,如果不擁有任何行,則返回NULL queue_set_srcid(src_tbl_id, mode, src_row_id) src_tbl_id:用於定義源表 mode: a表示刪除重復行,w表示重置 src_row_id:從源表獲得的row id 該函數用於檢查記錄是否已經插入了目標表裡,如果為true,那麼下次的插入將被忽略       作者 MySQL內核與性能優化

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved