10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

21.5.10.1 NDB集群盘数据对象

NDB集群磁盘数据存储采用多个磁盘数据对象.其中包括:

  • 表空间充当其他磁盘数据对象的容器。

  • Undo日志文件撤消回滚事务所需的信息。

  • 将一个或多个撤消日志文件分配给日志文件组,然后将其分配给表空间。

  • 数据文件storage Disk Data表数据。数据文件直接分配给表空间。

Undo日志文件和数据文件是每个数据节点文件系统中的实际文件;默认情况下,它们被放置在ndb_node_id_fsDataDir在NDB集群中指定config.ini文件,node_id为数据节点的节点ID。在创建撤消日志或数据文件时,可以将绝对路径或相对路径指定为文件名的一部分,从而将这些文件放在其他地方。本节稍后将展示创建这些文件的语句。

NDB集群表空间和日志文件组不作为文件实现。

重要的

虽然不是所有Disk Data对象都实现为文件,但它们都共享相同的名称空间。这意味着每个磁盘数据对象必须唯一命名(而不仅仅是给定类型的每个磁盘数据对象)。例如,不能同时命名表空间和日志文件组dd1

假设您已经建立了一个包含所有节点(包括管理节点和SQL节点)的NDB集群,在磁盘上创建NDB集群表的基本步骤如下:

  1. 创建一个日志文件组,并向其中分配一个或多个undo日志文件(undo日志文件有时也称为undofile).

    请注意

    只有磁盘数据表才需要撤消日志文件;它们不是用来NDBCLUSTER仅存储在内存中的表。

  2. 创建一个表空间;将日志文件组以及一个或多个数据文件分配给表空间。

  3. 创建一个Disk Data表,使用该表空间进行数据存储。

中的SQL语句可以完成这些任务中的每一个mysql客户端或其他MySQL客户端应用程序,如下面的示例所示。

  1. 我们创建一个名为lg_1使用创建日志文件组.这个日志文件组将由两个撤消日志文件组成,我们将其命名undo_1.log而且undo_2.log,其初始大小分别为16mb和12mb。(undo日志文件的初始大小缺省为128mb)也可以指定日志文件组的undo缓冲区大小,或者允许它采用缺省值8mb。在本例中,我们将undo缓冲区的大小设置为2mb。所以我们添加undo_1.loglg_1在这个创建日志文件组声明:

    添加UNDOFILE 'undo_1.log' INITIAL_SIZE 16M UNDO_BUFFER_SIZE 2M ENGINE NDBCLUSTER;

    添加undo_2.log对于日志文件组,使用以下命令修改日志文件组声明:

    修改LOGFILE组lg_1添加UNDOFILE 'undo_2.log' INITIAL_SIZE 12M ENGINE NDBCLUSTER;

    需要注意的事项:

  2. 现在我们可以创建一个表空间,其中包含NDB集群磁盘数据表用于存储数据的文件。表空间还与特定的日志文件组相关联。创建新表空间时,必须指定用于撤销日志记录的日志文件组;您还必须指定一个数据文件。创建表空间后,可以向表空间中添加更多的数据文件;也可以从表空间删除数据文件(本节稍后将提供删除数据文件的示例)。

    假设我们希望创建一个名为ts_1它使用lg_1作为其日志文件组。此表空间包含两个命名为data_1.dat而且data_2.dat,其初始大小分别为32 MB和48 MB。的默认值INITIAL_SIZE我们可以使用两个SQL语句来实现,如下所示:

    创建表空间ts_1,添加一个名为data_1.dat的数据文件,使用LOGFILE组lg_1。在表空间ts_1中添加一个名为data_2.dat的数据文件。

    创建表空间语句创建表空间ts_1使用数据文件data_1.dat,和同事ts_1使用日志文件组lg_1.的修改表空间添加第二个数据文件(data_2.dat).

    需要注意的事项:

    • 就像. log本例中用于undo日志文件的文件扩展名,对于.dat文件扩展名;它只是用来方便地识别数据文件。

    • 将数据文件添加到表空间时使用添加数据文件”文件名,一个文件名文件名ndb_node_id_fs目录内DataDir的每个数据节点,其中node_id为数据节点的节点ID。每个数据文件都具有SQL语句中指定的大小。例如,如果一个NDB集群有4个数据节点,那么修改表空间语句创建4个数据文件,在4个数据节点的数据目录中各有1个;每个文件都有名称data_2.dat每个文件大小为48 MB。

    • NDB 7.6(以及更高版本)保留每个表空间的4%供数据节点重启时使用。此空间不能用于存储数据。

    • 所有创建表空间而且修改表空间语句必须包含引擎条款;表空间中只能创建与表空间使用相同存储引擎的表。对于NDB Cluster表空间,该选项仅允许的值为NDBCLUSTER而且NDB

    • 有关的更多信息创建表空间而且修改表空间语句,看到第13.1.19节“创建表空间语句”,第13.1.9节:ALTER表空间语句

  3. 现在可以创建一个表,其非索引列存储在磁盘的表空间中ts_1

    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))表空间ts_1存储NDBCLUSTER;

    表空间……存储磁盘选项告诉NDBCLUSTER存储引擎使用表空间ts_1用于磁盘数据存储。

    一次表ts_1已创建如图所示,您可以执行吗插入选择更新,删除语句,就像处理其他MySQL表一样。

    方法还可以指定单个列是存储在磁盘上还是存储在内存中存储子句作为列定义的一部分创建表ALTER TABLE声明。存储磁盘将列存储在磁盘上,并且存储记忆导致使用内存内存储。看到第13.1.18节," CREATE TABLE语句",以查询更多资料。

对磁盘上隐式存储的列进行索引。对于表dt_1如刚才所示示例中所定义的,只有强加于人而且加入列存储在磁盘上。这是因为在idlast_name,first_name列,因此属于这些列的数据存储在RAM中。只有非索引的列可以保存在磁盘上;索引和索引列数据继续存储在内存中。在设计Disk Data表时,必须考虑使用索引和节省RAM之间的权衡。

不能向已显式声明的列添加索引存储磁盘,而不先将其存储类型更改为内存;任何这样做的尝试都失败并出现错误。这一列隐式地使用磁盘存储可以被索引;完成此操作后,列的存储类型将更改为内存自动。通过隐式地,我们指的是没有声明存储类型,但从父表继承的列。在下面的CREATE TABLE语句中(使用表空间ts_1前面定义),列c2而且c3隐式使用磁盘存储:

mysql> CREATE TABLE ti (-> c1 INT PRIMARY KEY, -> c2 INT, -> c3 INT, -> c4 INT ->) -> STORAGE DISK -> TABLESPACE ts_1 -> ENGINE NDBCLUSTER;查询OK, 0行受影响(1.31秒)

因为c2c3,c4难道自己不宣告与存储磁盘,就可以将它们编入索引。在这里,我们添加索引c2而且c3分别使用创建索引而且ALTER TABLE

CREATE INDEX i1 ON ti(c2);查询OK, 0 rows affected (2.72 sec) Records: 0 duplicate: 0 Warnings: 0 mysql> ALTER TABLE ti ADD INDEX i2(c3);查询OK, 0 rows affected (0.92 sec) Records: 0 duplicate: 0 warning: 0

显示创建表确认已添加索引。

mysql >显示创建表ti \ G  *************************** 1。行  *************************** 表:ti创建表:创建表“透明国际”(c1的int(11)不是NULL, c2的int(11)默认为空,c3的int(11)默认为空,c4的int(11)默认为空,主键(c1),关键的i1 (c2),关键的i2 (c3)) / * !50100表空间' ts_1 ' STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1

你可以看到ndb_desc索引列(强调的文本)现在使用内存中而不是磁盘上的存储:

壳>。/ ndb_desc - d测试t1 - t1 -版本:33554433片段类型:HashMapPartition K值:6分钟负载因素:78年最大负荷系数:80临时表:没有数量的属性:4号主键:1纳数据长度:317 Max行:0行校验和:1行GCI: 1 SingleUserMode: 0 ForceVarPart: 1 PartitionCount: 4 FragmentCount: 4 PartitionBalance: FOR_RP_BY_LDM ExtraRowGciBits: 0 ExtraRowAuthorBits: 0 TableStatus:检索表选项:HashMap:——属性——c1 Int主键分配键AT=固定ST=内存c3 Int NULL AT=固定ST=内存c4 Int NULL AT=FIXED ST=DISK——Indexes——PRIMARY KEY(c1) - UniqueHashIndex i2(c3) - OrderedIndex PRIMARY(c1) - OrderedIndex i1(c2) - OrderedIndex NDBT_ProgramExit: 0 - OK

性能报告。如果磁盘数据文件保存在与数据节点文件系统独立的物理磁盘上,那么使用磁盘数据存储的集群的性能将得到极大提高。必须为集群中的每个数据节点这样做,才能获得明显的好处。

可以使用绝对和相对文件系统路径添加UNDOFILE而且添加数据文件.相对路径是相对于数据节点的数据目录计算的。你也可以使用符号链接;看到第21.5.10.2节“在磁盘数据对象中使用符号链接”,以获取更多信息和示例。

必须按照特定的顺序创建日志文件组、表空间和使用它们的任何Disk Data表。同样的道理也适用于删除这些对象:

  • 只要有任何表空间在使用日志文件组,就不能删除它。

  • 只要表空间包含任何数据文件,就不能删除表空间。

  • 只要还有任何表在使用表空间,就不能从表空间删除任何数据文件。

  • 不能删除与创建文件的表空间不同的表空间关联创建的文件。(错误# 20053)

例如,要删除到目前为止在这一节中创建的所有对象,您可以使用以下语句:

删除表表删除数据库表空间ts_1—删除数据库表空间DATAFILE ' dat_2 .dat'—删除数据库表空间ts_1删除数据库表空间ts_1 -删除数据库表空间DATAFILE 'data_1.dat'删除表空间ts_1 ->引擎mysql> DROP LOGFILE GROUP lg_1 -> ENGINE NDBCLUSTER;

这些语句必须按照所示的顺序执行,除了这两个改变表空间……删除数据文件语句可以按任意一种顺序执行。

查询“磁盘数据”表使用的数据文件信息文件表中INFORMATION_SCHEMA数据库。一个额外的提供有关undo日志文件的附加信息。有关更多信息和示例,请参见第24.3.9节“INFORMATION_SCHEMA文件表”