• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 设置NDB_TABLE选项

    在MySQL NDB Cluster中,CREATE TABLEor ALTER TABLE语句中的表注释还可用于指定一个NDB_TABLE选项,该选项由一个或多个名称-值对组成,并在字符串后用逗号分隔(如果需要)NDB_TABLE=。名称和值语法的完整语法如下所示:

    COMMENT="NDB_TABLE=ndb_table_option[,ndb_table_option[,...]]"
    
    ndb_table_option:
        NOLOGGING={1|0}
      | READ_BACKUP={1|0}
      | PARTITION_BALANCE={FOR_RP_BY_NODE|FOR_RA_BY_NODE|FOR_RP_BY_LDM
                          |FOR_RA_BY_LDM|FOR_RA_BY_LDM_X_2
                          |FOR_RA_BY_LDM_X_3|FOR_RA_BY_LDM_X_4}
      | FULLY_REPLICATED={1|0}
    

    带引号的字符串中不允许有空格。字符串不区分大小写。

    NDB在接下来的几段中,将详细介绍可以以这种方式设置为注释一部分的四个表格选项。

    NOLOGGING:使用1表示已ndb_table_no_logging启用,但没有实际效果。作为占位符提供,主要用于ALTER TABLE语句的完整性。

    READ_BACKUP:将此选项设置为1与ndb_read_backup启用时具有相同的效果;允许从任何副本读取。这样做大大提高了从表中读取数据的性能,而写入性能却相对较低。从NDB 8.0.19开始,的默认值为1 READ_BACKUP,而默认ndb_read_backup值为ON(以前,默认情况下禁用从任何副本读取的操作)。

    您可以READ_BACKUP使用ALTER TABLE类似于以下所示之一的语句在线设置现有表:

    ALTER TABLE ... ALGORITHM=INPLACE, COMMENT="NDB_TABLE=READ_BACKUP=1";
    
    ALTER TABLE ... ALGORITHM=INPLACE, COMMENT="NDB_TABLE=READ_BACKUP=0";
    

    有关该ALGORITHM选项的更多信息ALTER TABLE,请参见“ NDB群集中使用ALTER TABLE的在线操作”。

    PARTITION_BALANCE:提供对分区分配和放置的附加控制。支持以下四种方案:

    1. FOR_RP_BY_NODE:每个节点一个分区。

      每个节点上只有一个LDM存储一个主分区。每个分区都存储在所有节点上的相同LDM(相同ID)中。

    2. FOR_RA_BY_NODE:每个节点组一个分区。

      每个节点存储一个分区,该分区可以是主副本或备份副本。每个分区都存储在所有节点上的同一LDM中。

    3. FOR_RP_BY_LDM:每个节点上每个LDM有一个分区;默认值。

      这与MySQL NDB Cluster 7.5.2之前的行为相同,不同之处在于,分区到LDM的映射略有不同,从LDM 0开始并为每个节点组放置一个分区,然后移至下一个LDM。

      如果READ_BACKUP设置为1,则使用此设置。

    4. FOR_RA_BY_LDM:每个节点组中的每个LDM都有一个分区。

      这些分区可以是主分区或备份分区。

    5. FOR_RA_BY_LDM_X_2:每个节点组中的每个LDM都有两个分区。

      这些分区可以是主分区或备份分区。

    6. FOR_RA_BY_LDM_X_3:每个节点组中的每个LDM都有三个分区。

      这些分区可以是主分区或备份分区。

    7. FOR_RA_BY_LDM_X_4:每个节点组中的每个LDM四个分区。

      这些分区可以是主分区或备份分区。

    PARTITION_BALANCE是用于设置每个表的分区数的首选界面。不建议使用MAX_ROWS强制使用分区数,但是为了向后兼容,继续支持该方法。它会在将来的MySQL NDB Cluster版本中删除。(缺陷#81759,错误#23544301)

    FULLY_REPLICATED控制表是否被完全复制,即,每个数据节点是否具有表的完整副本。要启用表的完全复制,请使用FULLY_REPLICATED=1

    也可以使用ndb_fully_replicated系统变量来控制此设置。设置为ON默认启用所有新NDB表的选项;默认值为OFF。该ndb_data_node_neighbour系统变量也可用于完全复制表,以确保当被访问的完全复制表中,我们访问的是本地本MySQL服务器的数据节点。

    CREATE TABLE创建NDB表时使用此类注释的语句示例如下所示:

    mysql> CREATE TABLE t1 (
    >     c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    >     c2 VARCHAR(100),
    >     c3 VARCHAR(100) )
    > ENGINE=NDB
    >
    COMMENT="NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE";
    

    注释显示为的输出的一部分SHOW CREATE TABLE。注释文本也可通过查询MySQL Information Schema TABLES表获得,如以下示例所示:

    mysql> SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_COMMENT
    > FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME="t1";
    +------------	+--------------	+----------------------------------------------------------	+
    | TABLE_NAME 	| TABLE_SCHEMA 	| TABLE_COMMENT                                            	|
    +------------	+--------------	+----------------------------------------------------------	+
    | t1         	| c            	| NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE 	|
    | t1         	| d            	|                                                          	|
    +------------	+--------------	+----------------------------------------------------------	+
    2 rows in set (0.00 sec)
    

    表的ALTER TABLE语句也支持此注释语法NDB。请记住,与一起使用的表注释ALTER TABLE将替换表可能具有的任何现有注释。

    mysql> ALTER TABLE t1 COMMENT="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_NODE";
    Query OK, 0 rows affected (0.40 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_COMMENT
    > FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME="t1";
    +------------	+--------------	+--------------------------------------------------	+
    | TABLE_NAME 	| TABLE_SCHEMA 	| TABLE_COMMENT                                    	|
    +------------	+--------------	+--------------------------------------------------	+
    | t1         	| c            	| NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_NODE       	|
    | t1         	| d            	|                                                  	|
    +------------	+--------------	+--------------------------------------------------	+
    2 rows in set (0.01 sec)
    

    您还PARTITION_BALANCE可以在ndb_desc的输出中看到该选项的值。ndb_desc还显示是否为表设置了READ_BACKUPFULLY_REPLICATED选项。有关更多信息,请参见此程序的说明。

    因为该READ_BACKUP值未传递到该ALTER TABLE语句设置的新注释集,所以不再有使用SQL检索为其先前设置的值的方法。为了避免这种情况的发生,建议您保留现有注释字符串中的所有此类值,如下所示:

    mysql> SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_COMMENT
    > FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME="t1";
    +------------	+--------------	+----------------------------------------------------------	+
    | TABLE_NAME 	| TABLE_SCHEMA 	| TABLE_COMMENT                                            	|
    +------------	+--------------	+----------------------------------------------------------	+
    | t1         	| c            	| NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE 	|
    | t1         	| d            	|                                                          	|
    +------------	+--------------	+----------------------------------------------------------	+
    2 rows in set (0.00 sec)
    
    mysql> ALTER TABLE t1 COMMENT="NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE";
    Query OK, 0 rows affected (1.56 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_COMMENT
    > FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME="t1";
    +------------	+--------------	+----------------------------------------------------------------	+
    | TABLE_NAME 	| TABLE_SCHEMA 	| TABLE_COMMENT                                                  	|
    +------------	+--------------	+----------------------------------------------------------------	+
    | t1         	| c            	| NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE       	|
    | t1         	| d            	|                                                                	|
    +------------	+--------------	+----------------------------------------------------------------	+
    2 rows in set (0.01 sec)