MySQL 訊息儲存引擎Q4M試玩

2021-06-05 15:17:18 字數 4680 閱讀 1875

1. 安裝

由於我的mysql

是5.1.48

,從官網選擇對應的包

a. 將support-files/q4m-forward  拷貝到mysql

安裝目錄

/bin下

b. 將libqueue_engine.so 拷貝到mysql

安裝目錄

/lib/mysql/plugin下

執行:$cat support-files/install.sql 

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)

嘗試插入一條資料:

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

的資料行

注:只支援檢查數值型別的行

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

,那麼下次的插入將被忽略

4 MySQL儲存引擎

檢視當前mysql提供的儲存引擎 檢視當前mysql預設的儲存引擎 1 innodb儲存引擎 innodb是mysql的預設事務型引擎,它被設計用來處理大量的短期 short lived 事務。除非有非常特別的原因需要使用其他的儲存引擎,否則應該優先考慮innodb引擎。2 myisam儲存引擎 m...

關於Mysql的儲存引擎Innodb和Myisam

myisam和innodb 都是採用 b tree這種資料結構來實現 b tree索引。而很大的區別在於,innodb 儲存引擎採用 聚集索引 的資料儲存方式實現b tree索引,所謂 聚集 就是指資料行和相鄰的鍵值緊湊地儲存在一起,注意 innodb 只能聚集乙個葉子頁 16k 的記錄 即聚集索引...

MySQL學習筆記(4) 儲存引擎

選擇表的儲存引擎的標準 是否需要事務支援。是否支援外來鍵。併發量的要求。錯誤恢復處理。是否支援某些功能。表型別 預設的伺服器表型別,通過my.ini可以配置 default storage engine innodb 利用表屬性 engine 引擎型別 innodb myisam區別儲存的檔案的方式...