视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL消息存储引擎Q4M试玩_MySQL
2020-11-09 18:14:56 责编:小采
文档


bitsCN.com
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 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秒超时,返回0b)退出owner模式有两种方式:(1).调用queue_end()删除之前由queue_wait获得的行记录并返回到Non-Owner模式(2)调用 queue_abort()释放拥有的行,但不删除。关闭连接与queue_abort()的效果相同。3.内部行Id每一行都有一个内建位的Row ID,主要用于检测冲突。Queue_rowid()----返回当前连接拥有的行的RowId,如果不拥有任何行,则返回NULLqueue_set_srcid(src_tbl_id, mode, src_row_id)src_tbl_id:用于定义源表mode: a表示删除重复行,w表示重置src_row_id:从源表获得的row id该函数用于检查记录是否已经插入了目标表里,如果为true,那么下次的插入将被忽略 作者 MySQL内核与性能优化 bitsCN.com

下载本文
显示全文
专题