mysql cluster ndb 内存表和磁盘表

在ndb上可以建立两种类型的表:
  1、内存表:所有数据(包括index)都在内存中。同时会在磁盘上保存数据,因此不用担心数据会丢失,datanode会在启动的时候把数据加载到内存。
  2、磁盘表:仅主键、索引字段保存在内存中,其他字段保存在磁盘文件里。
 
默认ndb创建的表为内存表, 

使用create table 的 tablespace tsname storage disk 来创建磁盘表。

建立磁盘表需要的Disk Data Objects:
Tablespaces: act as containers for other Disk Data objects.
Undo log files: undo information required for rolling back transactions.
One or more undo log files are assigned to a log file group, which is then assigned to a tablespace.
Data files :store Disk Data table data. A data file is assigned directly to a tablespace.

创建磁盘表对象的步骤:

1、创建undo日志文件组:
 CREATE LOGFILE GROUP lg_1
     ADD UNDOFILE 'undo_1.log'
     INITIAL_SIZE 16M
     UNDO_BUFFER_SIZE 2M
     ENGINE NDBCLUSTER;
  给日志组增加日志文件:
 ALTER LOGFILE GROUP lg_1
     ADD UNDOFILE 'undo_2.log'
     INITIAL_SIZE 12M
     ENGINE NDBCLUSTER;    
    
2、创建表空间:
 CREATE TABLESPACE ts_1
     ADD DATAFILE 'data_1.dat'
     USE LOGFILE GROUP lg_1
     INITIAL_SIZE 32M
     ENGINE NDBCLUSTER;
 给表空间增加日志文件:
 ALTER TABLESPACE ts_1
     ADD DATAFILE 'data_2.dat'
     INITIAL_SIZE 48M
     ENGINE NDBCLUSTER;    

注意:上面增加的日志文件和数据文件的信息保存在information_schema.FILES表里。

3、创建磁盘表:
 CREATE TABLE dt_1 (
     member_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
     last_name VARCHAR(50) NOT NULL,
     first_name VARCHAR(50) NOT NULL,
     dob DATE NOT NULL,
     joined DATE NOT NULL,
     INDEX(last_name, first_name)
     )
     TABLESPACE ts_1 STORAGE DISK
     ENGINE NDBCLUSTER;
    
使用ndb_desc工具查看ndb表的信息:
-- ndb_t1 --
Version: 4
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 3
Number of primary keys: 1
Length of frm data: 310
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
FragmentCount: 2
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
HashMap: DEFAULT-HASHMAP-3840-2
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY    --内存
name Longvarchar(300;utf8_general_ci) NULL AT=MEDIUM_VAR ST=DISK  --磁盘
name2 Longvarchar(300;utf8_general_ci) NULL AT=MEDIUM_VAR ST=DISK
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
-- Per partition info --
Partition       Row count       Commit count    Frag fixed memory       Frag varsized memory    Extent_space    Free extent_space
0               1               1               32768                   0                       67108864        66452880        
1               3               3               32768                   0                       67108864        66451632      


附:
  网上有人说alter table ... tablespace ... storage disk 能够把表从内存表转换为磁盘表。
  我在5.6.14-ndb-7.3.3上的实验是不行。show create table命令生成的SQL并不能正确反映是内存表还是磁盘表,应使用ndb_desc工具来查看。


参考:http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-disk-data-objects.html         

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/195110/viewspace-1095399/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/195110/viewspace-1095399/

你可能感兴趣的:(mysql cluster ndb 内存表和磁盘表)