mysql cluster ndb 記憶體表和磁碟表

denglt發表於2014-02-27

在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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章