本节提供有关 Table
类的信息,该类在 NDB API 中模拟数据库表。
- 父类
- 子类
无
- 描述
-
Table
类表示 NDB Cluster 数据库中的一个表。此类扩展了Object
类,该类又 是NdbDictionary
类的内部类。可以使用 NDB API 创建独立于 MySQL 服务器的表。但是,通常不建议这样做,因为以这种方式创建的表无法被 MySQL 服务器看到。类似地,可以使用
Table
方法修改现有表,但这些更改(除了重命名表外)对 MySQL 是不可见的。 - 方法
-
下表列出了此类的公共方法以及每个方法的用途或用法
表 2.79 表类方法和描述
- 类型
Table
类定义了一个公共类型SingleUserMode
。
此类的赋值 (=
) 运算符被重载,因此它始终执行深层复制。
与其他数据库对象一样,使用 NDB API 创建的 Table
对象以及对现有表的属性更改在 MySQL 中不可见。例如,如果您使用 Table::addColumn()
向表添加新列,则 MySQL 无法看到新列。与表相关的此规则的唯一例外是,使用 Table::setName()
更改现有 NDB
表的名称在 MySQL 中可见。
计算表大小。 当计算数据存储时,应将所有属性的大小(每个属性至少占用 4 个字节)以及 12 个字节的开销加在一起。可变大小的属性的大小为 12 个字节加上实际数据存储部分,并根据可变部分的大小增加额外的开销。例如,考虑一个包含 5 个属性的表:一个 64 位属性,一个 32 位属性,两个 16 位属性和一个包含 64 个 8 位属性的数组。此表每个记录占用的内存量是以下内容的总和
64 位属性占用 8 个字节
32 位属性占用 4 个字节
两个 16 位属性占用 8 个字节,每个属性由于右对齐而占用 4 个字节
数组占用 64 个字节(64 * 每个数组元素 1 个字节)
12 个字节的开销
这总共是每记录 96 个字节。此外,您应该假设页面头和浪费空间的分配约为 2% 的开销。因此,100 万条记录应占用 96 MB,并且页面头和其他开销约为 2 MB。向上取整后为 100 MB。
- 描述
向表添加一列。
- 签名
void addColumn ( const Column& column )
- 参数
对要添加到表的列的引用。
- 返回值
此方法的返回类型为
void
,但它确实会创建原始Column
对象的副本。
- 描述
此方法计算表的聚合数据。在表被创建并通过
getTableId()
检索之前,需要此方法才能使诸如getNoOfPrimaryKeys()
之类的聚合方法正常工作。- 签名
int aggregate ( struct NdbError& error )
- 参数
对
NdbError
对象的引用。- 返回值
一个整数,如果成功,其值为
0
,如果表处于不一致状态,则为-1
。在后一种情况下,error
也将被设置。
- 描述
此方法用于获取列定义,给定列的索引或名称。
- 签名
-
此方法可以使用列 ID 或列名称调用,如下所示
Column* getColumn ( const int AttributeId ) Column* getColumn ( const char* name )
- 参数
两者之一:列在表中的索引(如列的
getColumnNo()
方法返回的那样),或列的名称。- 返回值
指向具有指定索引或名称的列的指针。如果没有这样的列,则此方法返回
NULL
。
- 描述
-
获取并解包此表的额外元数据。
此方法是在 NDB 8.0 中添加的。
- 签名
int getExtraMetadata ( Uint32& version, void** data, Uint32* length ) const
- 参数
-
此方法采用以下三个参数
version
: 根据惯例,如 NDB 集群代码中所用,1
表示额外元数据包含一个.frm
文件(blob 数据),如 NDB 7.6 及更早版本中;2
表示它是 NDB 8.0 中的序列化字典信息。这些值实际上是任意的,并且是特定于应用程序的。data
: 作为元数据检索的存储数据。length
: 存储数据的长度(元数据)。
- 返回值
如果成功,则返回
0
,如果失败,则返回任何其他值。非零值应解释为错误类型的错误代码。
- 描述
无论表是否实际上包含任何可变大小的列,是否强制表分配可变大小的部分。这需要允许随后在线向表添加列(参见 在 NDB 集群中使用 ALTER TABLE 进行在线操作)。
- 签名
bool getForceVarPart ( void ) const
- 参数
无.
- 返回值
当强制表分配可变大小的部分时,为
true
。
- 描述
获取要读取的表碎片数据的长度(以字节为单位)。
- 签名
Uint32 getFragmentDataLen ( void ) const
- 参数
无.
- 返回值
要读取的字节数,作为 32 位无符号整数。
- 描述
此方法检索存储给定碎片的节点列表。
- 签名
Uint32 getFragmentNodes ( Uint32 fragmentId, Uint32* nodeIdArrayPtr, Uint32 arraySize ) const
- 参数
-
此方法采用以下三个参数
fragmentId
: 所需碎片的 ID。-
nodeIdArrayPtr
: 指向包含此碎片的节点的节点 ID 数组的指针。注意通常,主碎片是此数组中的条目 0。
arraySize
: 包含节点 ID 的数组的大小。如果此值小于碎片数,则仅将前arraySize
个条目写入此数组。
- 返回值
返回值
0
表示错误;否则,此值是表碎片数,作为 32 位无符号整数。
此功能已弃用,应避免使用。它可能会在 NDB 集群的未来版本中被删除。
- 描述
-
获取与表关联的
.FRM
文件中的数据。MySQL 8.0 和 NDB 8.0 不再使用
.FRM
文件,而是使用 MySQL 数据字典来存储表元数据;因此,此方法从 NDB 8.0.27 开始已弃用,并且可能会在将来的 NDB 版本中被删除。对于读取和写入表元数据,请改用getExtraMetadata()
和setExtraMetadata()
。 - 签名
const void* getFrmData ( void ) const
- 参数
无.
- 返回值
指向
.FRM
数据的指针。
此功能已弃用,应避免使用。它可能会在 NDB 集群的未来版本中被删除。
- 描述
-
获取表的
.FRM
文件数据的长度(以字节为单位)。MySQL 8.0 和 NDB 8.0 不再使用
.FRM
文件,而是使用 MySQL 数据字典来存储表元数据;因此,此方法从 NDB 8.0.27 开始已弃用,并且可能会在将来的 NDB 版本中被删除。对于读取和写入表元数据,请改用getExtraMetadata()
和setExtraMetadata()
。 - 签名
Uint32 getFrmLength ( void ) const
- 参数
无.
- 返回值
.FRM
文件数据的长度(32 位无符号整数)。
- 描述
获取此表使用的哈希映射。
- 签名
bool getHashMap ( Uint32* id = 0, Uint32* version = 0 ) const
- 参数
表 ID 和版本。
- 返回值
如果表具有哈希映射,则为真,否则为假。
- 描述
此方法获取 KValue,这是一个哈希参数,目前仅限于值
6
。在将来的版本中,可以将其设置为其他值。- 签名
int getKValue ( void ) const
- 参数
无.
- 返回值
一个整数(目前始终为
6
)。
- 描述
此类用于检查表是否已记录到磁盘,即它是否为永久表或临时表。
- 签名
bool getLogging ( void ) const
- 参数
无.
- 返回值
返回一个布尔值。如果此方法返回
true
,则对表进行完全检查点和日志记录。如果为false
,则该表是一个临时表,不会记录到磁盘;如果系统重新启动,该表仍然存在并保留其定义,但它将为空。默认日志记录值为true
。
- 描述
此方法返回本地哈希表中容器开始拆分时的负载因子(哈希参数)。
- 签名
int getMaxLoadFactor ( void ) const
- 参数
无.
- 返回值
一个整数,其最大值为 100。当返回最大值时,这意味着内存使用率已优化。较小的值表示每个容器存储的数据更少,这意味着可以更快地找到键,但会消耗更多内存。
- 描述
此方法获取哈希表开始缩减时的负载因子的值。此值应始终小于
getMaxLoadFactor()
返回的值。- 签名
int getMinLoadFactor ( void ) const
- 参数
无.
- 返回值
用整数表示的百分比;参见 Table::getMaxLoadFactor()。
- 描述
此方法获取表的狀態。
- 签名
virtual Object::Status getObjectStatus ( void ) const
- 参数
无.
- 返回值
一个
Object::Status
值。
- 描述
此方法无法按预期工作,并在 NDB 7.5.0 中被移除(错误#47960,错误#11756088)。
- 签名
Object::Type getObjectType ( void ) const
- 参数
无.
- 返回值
返回一个
Object::Type
值。
- 描述
此方法获取表的对象版本(参见 NDB 架构对象版本)。
- 签名
virtual int getObjectVersion ( void ) const
- 参数
无.
- 返回值
表的对象版本,作为整数。
- 描述
-
此方法获取表的partition balance 方案(片段计数类型)。
在 NDB 7.5 之前,此方法称为
getFragmentCountType()
。 - 签名
Object::PartitionBalance getPartitionBalance ( void ) const
- 参数
无.
- 返回值
分区平衡方案,作为
Object::PartitionBalance
类型的值。
- 描述
-
此方法获取表的partition balance 方案(片段计数类型),并将其作为字符串返回。
在 NDB 7.5 之前,此方法称为
getFragmentCountTypeString()
。 - 签名
const char* getPartitionBalanceString ( void ) const
- 参数
无.
- 返回值
分区平衡方案,作为字符串值。
- 描述
获取表的partition ID,根据其哈希值。
- 签名
Uint32 getPartitionId ( Uint32 hashvalue ) const
- 参数
一个
hashvalue
。请注意,如果表尚未实际检索(例如,使用getTableId()
),则结果可能不准确或无用。- 返回值
与
hashvalue
对应的partition 的标识符。
- 描述
此方法用于获取表的primaryKey名称。
- 签名
const char* getPrimaryKey ( int no ) const
- 参数
无.
- 返回值
primaryKey的名称,一个字符串(字符指针)。
- 描述
获取此表中行的 size。这是可以存储在表单行中的(最大)数据量,不包括存储在表外部的任何 blob 数据。
- 签名
int getRowSizeInBytes ( void ) const
- 参数
无.
- 返回值
行的 size,以字节为单位。
- 描述
获取表的单用户模式。
- 签名
enum SingleUserMode getSingleUserMode ( void ) const
- 参数
无.
- 返回值
一个
SingleUserMode
值。
- 描述
此方法以两种方式使用:获取此表所属的tablespace名称;验证给定的tablespace是否为此表使用。
- 签名
-
要获取正在使用的tablespace的名称,请在不带任何参数的情况下调用
const char* getTablespace ( void ) const
要确定tablespace是否为由给定 ID 和版本指示的tablespace,请提供这些参数,如下所示
bool getTablespace ( Uint32* id = 0, Uint32* version = 0 ) const
- 参数
-
参数的数量和类型取决于此方法的使用方式
当用于获取表使用的tablespace的名称时,它在不带任何参数的情况下被调用。
-
当用于确定给定的tablespace是否为此表使用时,getTablespace() 接受两个参数
tablespace
id
,作为指向 32 位无符号整数的指针tablespace
version
,也作为指向 32 位无符号整数的指针
id
和version
的默认值都是0
。
- 返回值
-
返回类型取决于方法的调用方式
当
getTablespace()
在不带任何参数的情况下被调用时,它返回一个Tablespace
对象实例。当用两个参数调用时,如果tablespace与具有指示的 ID 和版本的tablespace相同,则返回
true
;否则,它返回false
。
- 描述
此方法用于获取表tablespace 数据的长度。
- 签名
Uint32 getTablespaceDataLen ( void ) const
- 参数
无.
- 返回值
数据的长度,作为 32 位无符号整数。
- 描述
此方法获取指向表片段中使用的tablespace名称的指针。
- 签名
const void* getTablespaceNames ( void )
- 参数
无.
- 返回值
返回指向tablespace名称数据的指针。
- 描述
此方法获取
getTablespaceNames()
返回的tablespace名称数据的长度。(参见 Table::getTablespaceNames()。)- 签名
Uint32 getTablespaceNamesLen ( void ) const
- 参数
无.
- 返回值
以字节为单位返回名称数据的长度,作为 32 位无符号整数。
- 描述
-
用于确定表是否具有任何定义了除
NULL
以外的默认值的列。要读取和写入默认列值,请使用
Column::getDefaultValue()
和Column::setDefaultValue()
。 - 签名
bool hasDefaultValues ( void ) const
- 参数
无.
- 返回值
如果表具有任何非
NULL
列,且这些列具有默认值,则返回true
,否则返回false
。
- 描述
此方法设置一个指示器,用于确定是否为表使用默认分区数。
- 签名
void setDefaultNoPartitionsFlag ( Uint32 indicator ) const
- 参数
此方法接受一个参数
indicator
,一个 32 位无符号整数。- 返回值
无.
- 描述
-
为该表存储打包的额外元数据。数据在没有进行任何修改的情况下打包到给定
Table
对象的缓冲区中。在 NDB 8.0 中添加。
- 签名
int setExtraMetadata ( Uint32 version, const void* data, Uint32 length )
- 参数
-
此方法使用的三个参数列出如下
version
: 如 NDB Cluster 代码中所使用,1
表示额外元数据包含.frm
文件(blob 数据),如 NDB 7.6 及更早版本中的那样;2
表示它是在 NDB 8.0 中的序列化字典信息。您应该意识到这只是一个约定,这些值可以是应用程序特定的,如您所愿。data
: 作为元数据存储的实际数据。length
: 要存储的数据的长度。
- 返回值
成功时为
0
。任何其他值都表示失败;在这种情况下,该值是指示错误类型的错误代码。
- 描述
强制表分配可变 size 的部分,以允许对表执行在线操作,即使它没有可变 size 的列。有关 NDB Cluster 中在线操作的更多信息,请参见 NDB Cluster 中使用 ALTER TABLE 进行在线操作。
- 签名
void setForceVarPart ( bool force )
- 参数
将
force
设置为true
使用,以使表具有可变 size 部分。- 返回值
无.
- 描述
-
此方法写入包含以下片段信息的数组
片段 ID
节点组 ID
片段状态
- 签名
void setFragmentData ( const void* data, Uint32 len )
- 参数
-
此方法接受以下两个参数
指向要写入的片段数据的指针
此数据的长度 (
len
),以字节为单位,作为 32 位无符号整数
- 返回值
无.
- 描述
此方法设置表的碎片类型。
- 签名
void setFragmentType ( FragmentType fragmentType )
- 参数
此方法接受一个参数,一个
Object::FragmentType
值。- 返回值
无.
此功能已弃用,应避免使用。它可能会在 NDB 集群的未来版本中被删除。
- 描述
-
此方法用于将数据写入此表的
.FRM
文件。MySQL 8.0 和 NDB 8.0 不再使用
.FRM
文件,而是使用 MySQL 数据字典来存储表元数据;因此,此方法从 NDB 8.0.27 开始已弃用,并且可能会在将来的 NDB 版本中被删除。对于读取和写入表元数据,请改用getExtraMetadata()
和setExtraMetadata()
。 - 签名
void setFrm ( const void* data, Uint32 len )
- 参数
-
此方法接受以下两个参数
指向要写入的
data
的指针。数据的长度 (
len
)。
- 返回值
无.
- 描述
这设置
KValue
,一个哈希参数。- 签名
void setKValue ( int kValue )
- 参数
kValue
是一个整数。目前唯一允许的值是6
。在将来的版本中,这可能成为一个变量参数。- 返回值
无.
- 描述
设置表的线性哈希标志。参见 Table::getLinearFlag()。
- 签名
void setLinearFlag ( Uint32 flag )
- 参数
flag
是一个 32 位无符号整数。- 返回值
无.
- 描述
切换表的日志状态。参见 Table::getLogging()。
- 签名
void setLogging ( bool enable )
- 参数
如果
enable
为true
,则启用此表的日志记录;如果为false
,则禁用日志记录。- 返回值
无.
- 描述
此方法在拆分本地哈希表中的容器时设置最大负载系数。
- 签名
void setMaxLoadFactor ( int max )
- 参数
-
此方法接受一个参数
max
,一个表示百分比的整数(例如,45
表示 45%)。有关更多信息,请参见 Table::getMaxLoadFactor()。这永远不应该大于最小负载系数。
- 返回值
无.
- 描述
此方法设置表可以容纳的最大行数。
- 签名
void setMaxRows ( Uint64 maxRows )
- 参数
maxRows
是一个 64 位无符号整数,表示要存储在表中的最大行数。- 返回值
无.
- 描述
此方法在开始减少哈希表时设置最小负载系数。
- 签名
void setMinLoadFactor ( int min )
- 参数
此方法接受一个参数
min
,它是一个表示百分比的整数(例如,45
表示 45%)。有关更多信息,请参阅 Table::getMinLoadFactor()。- 返回值
无.
- 描述
-
此方法设置表的名称。
这是
Table
的唯一一个set
方法,其效果对 MySQL 可见。*
() - 签名
void setName ( const char* name )
- 参数
name
是表的(新)名称。- 返回值
无.
- 描述
此方法无法按预期工作,并在 NDB 7.5.0 中被移除(错误#47960,错误#11756088)。
- 签名
void setObjectType ( Object::Type type )
- 参数
所需的对象
type
。它必须是 Object::Type 中列出的Type
值之一。- 返回值
无.
- 描述
-
设置表的分区平衡方案。
在 NDB 7.5 之前,此方法被称为
setFragmentCountType()
。 - 签名
void setPartitionBalance ( Object::PartitionBalance scheme )
- 参数
scheme
是要用于表的分区平衡方案。它是一个类型为PartitionBalance
的值。- 返回值
无.
- 描述
此方法设置一个包含信息的数组,该信息将范围值和列表值映射到碎片。这本质上是一个排序的映射,包含碎片 ID/值对。对于范围分区,每个碎片有一个对。对于列表分区,它可以是任意数量的对,但至少与碎片数量一样多的对。
- 签名
void setRangeListData ( const void* data, Uint32 len )
- 参数
-
此方法需要以下两个参数
指向包含 ID/值对的范围或列表
data
的指针此数据的长度(
len
),以 32 位无符号整数表示。
- 返回值
无.
- 描述
为表设置
SingleUserMode
。- 签名
void setSingleUserMode ( enum SingleUserMode )
- 参数
一个
SingleUserMode
值。- 返回值
无.
- 描述
-
此方法设置表的表空间。
请参阅 第 2.3.28 节,“表空间类”。
- 签名
-
使用表空间的名称
void setTablespace ( const char* name )
使用
Tablespace
对象void setTablespace ( const class Tablespace& tablespace )
- 参数
-
此方法可以调用一个参数,该参数可以是以下两种类型之一
表空间的
name
(字符串)。对现有
Tablespace
实例的引用。
- 返回值
无.
- 描述
此方法设置每个碎片的表空间信息,并包括表空间 ID 和表空间版本。
- 签名
void setTablespaceData ( const void* data, Uint32 len )
- 参数
-
此方法需要以下两个参数
指向包含表空间 ID 和版本的
data
的指针此数据的长度(
len
),以 32 位无符号整数表示。
- 返回值
无.
- 描述
设置表碎片使用的表空间的名称。
- 签名
void setTablespaceNames ( const void* data Uint32 len )
- 参数
-
此方法接受以下两个参数
指向表空间名称
data
的指针名称数据的长度(
len
),以 32 位无符号整数表示。
- 返回值
无.
- 描述
-
此方法在创建新表之前验证其定义,执行
Table::aggregate()
方法,并执行其他检查。创建或检索表时会自动调用validate()
。因此,通常不需要直接调用aggregate()
或validate()
。请注意,即使调用了
validate()
方法,仍然可能存在一些错误,这些错误只能在实际创建表时由NDB
内核检测到。 - 签名
int validate ( struct NdbError& error )
- 参数
对
NdbError
对象的引用。- 返回值
一个整数,如果成功,其值为
0
,如果表处于不一致状态,则为-1
。在后一种情况下,error
也将被设置。