MEMORY,CSV,ARCHIVE,BLACKHOLE,MERGE,FEDERATED存储引擎

MEMORY存储引擎:

(system@localhost) [mysql]> create table t_mem1(id int) engine=memory;

MEMORY存储引擎的表只拥有一个独立的磁盘文件,扩展名为.frm,用来存储表结构的定义。

MEMORY引擎表能够使用的最大内存空间不超过max_heap_table_size系统变量设定的值,该变量默认情况下是16MB

 

CSV存储引擎:

(system@localhost) [mysql]> create table t_csv1(id int not null default 0,v1 varchar(20) not null default '') engine=csv;

(system@localhost) [mysql]> insert into t_csv1 values (1,'a');

(system@localhost) [mysql]> insert into t_csv1 values (2,'b');

CSV存储引擎因为自身文件格式的原因,所有列必须强制指定not null,另外CSV引擎也不支持索引和分区。CSV引擎表也会包含一个表的结构定义文件,扩展名为.frm,还会创建一个扩展名为.CSV的数据文件。还有一个同名的元信息文件,扩展名为.CSM,用来保存表的状态及表中保存的数据量。可以使用CHECK TABLEREPAIR TABLE命令进行检查和修复。CHECK语句会检查CSV文件中分隔符是否合法,分隔列的数量与表定义中是否相同。发现不合法的行,就会抛出错误。用REPAIR语句执行修复时,会尝试从当前CSV中复制合法数据,清除不合法的数据。需要注意,修复时只要发现文件中有损坏的记录行,那么之后的数据也就全部丢失,不管这中间是否会有合法的数据

[root@mysql1 mysql]# ls -l t_*

-rw-rw----. 1 mysql mysql   35 Jul  4 09:14 t_csv1.CSM

-rw-rw----. 1 mysql mysql   12 Jul  4 09:14 t_csv1.CSV

-rw-rw----. 1 mysql mysql 8582 Jul  4 09:13 t_csv1.frm

 

ARCHIVE存储引擎:

ARCHIVE存储引擎使用的场景是归档,仅能支持insertselect语句。除了拥有标准的.frm结构定义文件外,还有一个扩展名为.arz的数据文件,执行优化操作时可能还会出现一个扩展名为.arn的文件。为什么需要ARCHIVE存储引擎?因为基于这种存储引擎的对象,能够将大量数据压缩存储,插入的列会被压缩,ARCHIVE引擎使用zlib无损数据压缩算法

(system@localhost) [mysql]> create table t_arch1 engine=archive as select table_catalog,table_name,column_name from information_schema.columns;

(system@localhost) [mysql]> insert into t_arch1 select * from t_arch1;

(system@localhost) [mysql]> show table status like 't_arch1';

 

BLACKHOLE存储引擎:

所有插入的数据都不会保存,BLACKHOLE引擎表永远保持为空。对应的物理文件只有.frm文件,只有表结构定义

 

MERGE存储引擎:

MERGE存储引擎实际上是将一组MyISAM表聚合在一起

(system@localhost) [mysql]> create table t_mys1 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;

(system@localhost) [mysql]> create table t_mys2 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;

(system@localhost) [mysql]> insert into t_mys1 (v1) values ('this'),('is'),('mys1');

(system@localhost) [mysql]> insert into t_mys2 (v1) values ('this'),('is'),('mys2');

(system@localhost) [mysql]> create table t_mer1 (id int not null auto_increment primary key,v1 varchar(20)) engine=merge union=(t_mys1,t_mys2);

(system@localhost) [mysql]> select * from t_mer1;

除了拥有存储表结构定义的.frm文件以外,还有一个扩展名为.mgr的文件。这个文件不保存数据,而是数据的来源地,即引用的MyISAM引擎表的列表。MERGE引擎表本身并不存储数据,它只起一个汇总作用。

 

FEDERATED存储引擎:

要访问远端的MySQL数据库实例中的对象,通过FEDERATED存储引擎实现。默认MySQL不支持该存储引擎,编译时需要执行CMake时附加-DWITH_FEDERATED_STORAGE_ENGINE选项,编辑/data/mysqldata/3306/my.cnf[mysqld]区块中增加一行federated,重启mysql

每个FEDERATED引擎都包括两个元素:

一个远端的MySQL数据库表,可以是目标端支持的任意类型的表

一个是本地的数据库表,该表结构应与目标端的表完全相同,本地只有.frm文件,不会保存具体的数据,另外表的定义信息中还会包括到目标端的连接信息

客户端访问FEDERATED表时,按照下列方式执行:

存储引擎检查FEDERATED表列以及关联的目标端对象的SQL语句

使用MySQL客户端API发送语句到远程端

远程端处理完语句,由本地端接收该语句生成的结果集

返回结果集,转换成FEDERATED引擎形式,返回给客户端

FEDERATED存储引擎支持SELECTINSERTUPDATEDELETETRUNCATE TABLE及索引,操作本地的表实际上都是要将数据发送至远端

远端表结构:

CREATE TABLE poll_vote(id int(10) not null auto_increment,

parent_id it(10) not null,

vote_count int(10) default 0,

vote_month int (10) not null,

primary key(id)) engine=InnoDB auto_increment=26020 default charset=utf8;

使用CONNECTION子句创建FEDERATED

CREATE TABLE poll_vote(id int(10) not null auto_increment,

parent_id it(10) not null,

vote_count int(10) default 0,

vote_month int (10) not null,

primary key(id)) engine=FEDERATED auto_increment=26020 default charset=utf8

connection=’mysql://hugc:[email protected]/hddoc/poll_vote’;

格式如下:

schema://user_name:password@hostname:prot/db_name/tbl_name

schema目前只支持mysql

使用CREATE SERVER创建FEDERATED

CREATE SERVER hddoc110

FOREIGN DATA WRAPPER mysql

OPTIONS (USER ‘hugc’,PASSWORD ‘hugc’,HOST ‘192.168.1.202’,PORT 3306,DATABASE ‘hddoc’);

CREATE TABLE poll_vote(id int(10) not null auto_increment,

parent_id it(10) not null,

vote_count int(10) default 0,

vote_month int (10) not null,

primary key(id)) engine=FEDERATED auto_increment=26020 default charset=utf8

connection=’hddoc110/poll_vote’;

 

 

 

猜你喜欢

转载自allenhu0320.iteye.com/blog/2185905