在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工具来查看。