首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 訊息佇列儲存引擎 Q4M 安裝與體驗實錄

     編輯:MySQL 綜合教學

Q4M (Queue for MySQL) 將佇列語意內建為儲存引擎,支援 INSERT/DELETE、阻塞讀取、Owner 模式等特性,適合輕量級非同步任務處理。本文記錄在 MySQL 5.1.48 上安裝與基本操作。

安裝步驟

  1. 下載對應版本二進制包:官網舊版區
  2. 解壓後複製檔案:
    • support-files/q4m-forward → $MYSQL_HOME/bin/
    • libqueue_engine.so → $MYSQL_HOME/lib/mysql/plugin/
  3. 執行安裝 SQL(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';
  4. 重啟 MySQL,SHOW PLUGINS; 確認 QUEUE 狀態為 ACTIVE

建立與基本操作

-- 建立 QUEUE 表(不支援主鍵、索引、UPDATE)
CREATE TABLE t1 (a INT, b VARCHAR(100)) ENGINE=QUEUE;

-- 插入(需關閉 binlog,否則報 Binary logging not possible)
INSERT INTO t1 VALUES (1, 'sd'), (2, 'sda'), (3, 'fio');

核心特性

  • ❌ 不支援 PRIMARY KEY、INDEX、UPDATE
  • ✅ 按插入順序排序(FIFO)
  • ✅ SELECT COUNT(*) 極快(內部計數器)
  • ✅ 內建函數簡化操作(見下)

兩種連線模式與關鍵函數

模式說明切換函數
Non-Owner (預設)可見所有佇列資料—
Owner獨佔一行資料,其他連線不可見queue_wait() 進入,queue_end()/queue_abort() 退出

queue_wait 參數範例

-- 等待 t1 一行資料(預設 60 秒超時)
SELECT * FROM t1 WHERE queue_wait('t1');

-- 等待條件 a < 4 的行
SELECT * FROM t1 WHERE queue_wait('t1: a<4');

-- 多表輪詢,30 秒超時,返回 1=t1, 2=t2, 0=timeout
SELECT queue_wait('t1', 't2', 30);

Owner 模式下的行處理

-- 刪除並釋放(正常消費)
SELECT queue_end();

-- 僅釋放不刪除(重回佇列)
SELECT queue_abort();
-- 連線斷開等同 queue_abort()

內部 Row ID 與去重機制

  • queue_rowid():取得目前擁有行的 64-bit Row ID
  • queue_set_srcid(src_tbl_id, mode, src_row_id):檢查來源表 Row ID 是否已匯入,mode='a' 刪除重複,mode='w' 重置

限制與注意

  • 不支援 Binlog 複寫(安裝時需關閉 binlog)
  • 不支援事務(無回滾機制)
  • 僅適合「最多一次」或「至少一次」語意的非關鍵任務佇列

Q4M 以儲存引擎形式實作佇列,極度輕量、零外部依賴,適合嵌入式、中小型專案的非同步解耦需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved