本节提供有关Table
类的信息,该类在 NDB API 中模拟数据库表。
- 家长班
- 儿童班
没有任何
- 描述
-
该类
Table
表示 NDB Cluster 数据库中的表。这个类扩展了这个Object
类,而这个类又是这个类的一个内部NdbDictionary
类。可以使用 NDB API 独立于 MySQL 服务器创建表。然而,这样做通常是不可取的,因为以这种方式创建的表不能被 MySQL 服务器看到。同样,可以使用
Table
方法修改现有表,但这些更改(重命名表除外)对 MySQL 是不可见的。 - 方法
-
下表列出了该类的公共方法以及每个方法的用途或用途:
表 2.78 表类方法及说明
- 类型
该类
Table
定义了一个公共类型SingleUserMode
。
赋值 ( =
) 运算符为此类重载,因此它始终执行深层复制。
与其他数据库对象一样,
Table
使用 NDB API 完成的对象创建和对现有表的属性更改在 MySQL 中是不可见的。例如,如果您使用 向表中添加新列Table::addColumn()
,则 MySQL 看不到新列。关于表,此规则的唯一例外是使用的现有
NDB
表
的名称更改Table::setName()
对 MySQL 是可见的。
计算表大小。 在计算数据存储时,应该加上所有属性的大小(每个属性至少占用 4 个字节)以及 12 个字节的开销。可变大小属性的大小为 12 字节加上实际数据存储部分,并根据可变部分的大小增加额外开销。例如,考虑一个具有 5 个属性的表:一个 64 位属性、一个 32 位属性、两个 16 位属性和一个包含 64 个 8 位属性的数组。此表每条记录消耗的内存量是以下各项的总和:
8 字节用于 64 位属性
4 个字节用于 32 位属性
8 个字节用于两个 16 位属性,由于右对齐,每个属性占用 4 个字节
数组 64 字节(每个数组元素 64 * 1 字节)
12 字节开销
每条记录总共 96 个字节。此外,您应该假设大约 2% 的开销用于分配页眉和浪费的空间。因此,100 万条记录应消耗 96 MB,额外的页眉和其他开销约为 2 MB。四舍五入得到 100 MB。
- 描述
向表中添加一列。
- 签名
void addColumn ( const Column& column )
- 参数
对要添加到表中的列的引用。
- 返回值
此方法的返回类型为
void
,但它确实创建了原始Column
对象的副本。
- 描述
此方法计算表的聚合数据。它是聚合方法所必需的,例如
getNoOfPrimaryKeys()
在通过创建和检索表之前正常工作getTableId()
。- 签名
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 Cluster 代码中使用,1
意味着额外的元数据包含一个.frm
文件(blob 数据),如 NDB 7.6 及更早版本;2
表示是NDB 8.0中序列化的字典信息。这些值实际上是任意的,并且是特定于应用程序的。data
:作为元数据检索的存储数据。length
:存储数据(元数据)的长度。
- 返回值
成功返回
0
,失败返回任何其他值。nonzer4o 值应解释为错误类型的错误代码。
- 描述
表是否被强制分配可变大小的部分,而不管表实际上是否有任何可变大小的列。这是允许随后将列在线添加到表中所必需的(请参阅 NDB Cluster 中使用 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 Cluster 的未来版本中被删除。
- 描述
-
.FRM
从与表关联的文件中 获取数据。MySQL 8.0 和 NDB 8.0 不再使用
.FRM
文件,而是使用 MySQL 数据字典来存储表元数据;因此,从 NDB 8.0.27 开始,此方法已被弃用,并且会在未来的 NDB 版本中删除。对于读取和写入表元数据,请改用getExtraMetadata()
andsetExtraMetadata()
。 - 签名
const void* getFrmData ( void ) const
- 参数
没有。
- 返回值
指向
.FRM
数据的指针。
此功能已弃用,应避免使用。它可能会在 NDB Cluster 的未来版本中被删除。
- 描述
-
获取表的
.FRM
文件数据的长度,以字节为单位。MySQL 8.0 和 NDB 8.0 不再使用
.FRM
文件,而是使用 MySQL 数据字典来存储表元数据;因此,从 NDB 8.0.27 开始,此方法已被弃用,并且会在未来的 NDB 版本中删除。对于读取和写入表元数据,请改用getExtraMetadata()
andsetExtraMetadata()
。 - 签名
Uint32 getFrmLength ( void ) const
- 参数
没有。
- 返回值
文件数据的长度
.FRM
(无符号 32 位整数)。
- 描述
获取用于此表的哈希映射。
- 签名
bool getHashMap ( Uint32* id = 0, Uint32* version = 0 ) const
- 参数
表 ID 和版本。
- 返回值
如果表有哈希映射则为真,否则为假。
- 描述
此方法获取 KValue,这是一个哈希参数,目前仅限于 value
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 中删除(Bug #47960,Bug #11756088)。
- 签名
Object::Type getObjectType ( void ) const
- 参数
没有。
- 返回值
返回一个
Object::Type
值。
- 描述
此方法获取表的对象版本(请参阅 NDB Schema Object Versions)。
- 签名
virtual int getObjectVersion ( void ) const
- 参数
没有。
- 返回值
表的对象版本,作为整数。
- 描述
-
该方法获取表的分区平衡方案(分片计数类型)。
在 NDB 7.5 之前,此方法称为
getFragmentCountType()
. - 签名
Object::PartitionBalance getPartitionBalance ( void ) const
- 参数
没有。
- 返回值
分区平衡方案,作为 type 的值
Object::PartitionBalance
。
- 描述
-
此方法获取表的分区平衡方案(碎片计数类型),并将其作为字符串返回。
在 NDB 7.5 之前,此方法称为
getFragmentCountTypeString()
. - 签名
const char* getPartitionBalanceString ( void ) const
- 参数
没有。
- 返回值
分区平衡方案,作为字符串值。
- 描述
在给定哈希值的情况下获取表分区 ID。
- 签名
Uint32 getPartitionId ( Uint32 hashvalue ) const
- 参数
一个
hashvalue
。请注意,如果实际上未检索到该表(例如,使用getTableId()
),则结果可能不准确或无用。- 返回值
对应的分区的标识符
hashvalue
。
- 描述
获取此表中一行的大小。这是可以存储在表的单行中的(最大)数据量,不包括存储在表外部的任何 blob 数据。
- 签名
int getRowSizeInBytes ( void ) const
- 参数
没有。
- 返回值
行的大小,以字节为单位。
- 描述
获取表的单用户模式。
- 签名
enum SingleUserMode getSingleUserMode ( void ) const
- 参数
没有。
- 返回值
一个
SingleUserMode
值。
- 描述
该方法有两种使用方式:获取分配给该表的表空间的名称;验证给定的表空间是该表正在使用的表空间。
- 签名
-
要获取表空间的名称,请不带任何参数调用:
const char* getTablespace ( void ) const
要确定表空间是否为给定 ID 和版本所指示的表空间,请将它们作为参数提供,如下所示:
bool getTablespace ( Uint32* id = 0, Uint32* version = 0 ) const
- 参数
-
参数的数量和类型取决于此方法的使用方式:
当用于获取表正在使用的表空间的名称时,调用时不带任何参数。
-
当用于确定给定的表空间是否是该表正在使用的表空间时,getTablespace() 有两个参数:
表空间
id
,作为指向 32 位无符号整数的指针给出表空间
version
,也作为指向 32 位无符号整数的指针给出
id
和version
的 默认值为0
。
- 返回值
-
返回类型取决于方法的调用方式:
当
getTablespace()
不带任何参数调用时,它返回一个Tablespace
对象实例。当使用两个参数调用时,
true
如果表空间与具有指定 ID 和版本的表空间相同,则返回;否则,它返回false
。
- 描述
该方法获取返回的表空间名称数据的长度
getTablespaceNames()
。( 参见表::getTablespaceNames()。)- 签名
Uint32 getTablespaceNamesLen ( void ) const
- 参数
没有。
- 返回值
返回名称数据的长度,以字节为单位,作为 32 位无符号整数。
- 描述
-
用于确定表中是否有任何列是使用 以外的默认值定义的
NULL
。要读取和写入默认列值,请使用
Column::getDefaultValue()
和Column::setDefaultValue()
。 - 签名
bool hasDefaultValues ( void ) const
- 参数
没有。
- 返回值
如果表中有任何具有默认值
true
的非列,则 返回,否则返回。NULL
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
在成功。任何其他值表示失败;在这种情况下,该值是指示错误类型的错误代码。
- 描述
强制表分配一个可变大小的部分,以允许对表进行在线操作,即使它没有可变大小的列。有关 NDB Cluster中在线操作的更多信息, 请参阅NDB Cluster 中使用 ALTER TABLE 的在线操作。
- 签名
void setForceVarPart ( bool force )
- 参数
使用 with
force
set totrue
使表具有可变大小的部分。- 返回值
没有。
- 描述
-
此方法写入包含以下片段信息的数组:
片段编号
节点组 ID
片段状态
- 签名
void setFragmentData ( const void* data, Uint32 len )
- 参数
-
此方法采用以下两个参数:
指向要写入的片段数据的指针
此数据的长度 (
len
),以字节为单位,为 32 位无符号整数
- 返回值
没有。
- 描述
此方法设置表的碎片类型。
- 签名
void setFragmentType ( FragmentType fragmentType )
- 参数
此方法采用一个参数,一个
Object::FragmentType
值。- 返回值
没有。
此功能已弃用,应避免使用。它可能会在 NDB Cluster 的未来版本中被删除。
- 描述
-
此方法用于将数据写入此表的
.FRM
文件。MySQL 8.0 和 NDB 8.0 不再使用
.FRM
文件,而是使用 MySQL 数据字典来存储表元数据;因此,从 NDB 8.0.27 开始,此方法已被弃用,并且会在未来的 NDB 版本中删除。对于读取和写入表元数据,请改用getExtraMetadata()
andsetExtraMetadata()
。 - 签名
void setFrm ( const void* data, Uint32 len )
- 参数
-
此方法采用以下两个参数:
指向
data
要写入的 的指针。数据的长度 (
len
)。
- 返回值
没有。
- 描述
这设置了
KValue
一个散列参数。- 签名
void setKValue ( int kValue )
- 参数
kValue
是一个整数。当前唯一允许的值是6
. 在未来的版本中,这可能会成为一个可变参数。- 返回值
没有。
- 描述
设置表的线性散列标志。请参阅 表::getLinearFlag()。
- 签名
void setLinearFlag ( Uint32 flag )
- 参数
是
flag
一个 32 位无符号整数。- 返回值
没有。
- 描述
切换表的日志记录状态。请参阅 表::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()。- 返回值
没有。
- 描述
-
此方法设置表的名称。
这是MySQL 可见其效果 的唯一 方法。
set
*
()Table
- 签名
void setName ( const char* name )
- 参数
name
是表的(新)名称。- 返回值
没有。
- 描述
此方法未按预期工作,并已在 NDB 7.5.0 中删除(Bug #47960,Bug #11756088)。
- 签名
void setObjectType ( Object::Type type )
- 参数
想要的对象
type
。这必须是Object::TypeType
中列出的值 之一。- 返回值
没有。
- 描述
-
设置表的分区平衡方案。
在 NDB 7.5 之前,此方法称为
setFragmentCountType()
. - 签名
void setPartitionBalance ( Object::PartitionBalance scheme )
- 参数
scheme
是用于表的分区平衡方案。这是 type 的值PartitionBalance
。- 返回值
没有。
- 描述
此方法设置一个数组,其中包含将范围值和列表值映射到片段的信息。这本质上是一个由片段 ID/值对组成的排序映射。对于范围分区,每个片段有一对。对于列表分区,它可以是任意数量的对,但至少与片段的数量一样多。
- 签名
void setRangeListData ( const void* data, Uint32 len )
- 参数
-
该方法需要以下两个参数:
data
指向包含 ID/值对 的范围或列表的指针此数据的长度 (
len
),作为 32 位无符号整数。
- 返回值
没有。
- 描述
为表设置 a
SingleUserMode
。- 签名
void setSingleUserMode ( enum SingleUserMode )
- 参数
一个
SingleUserMode
值。- 返回值
没有。
- 描述
-
此方法设置表的表空间。
- 签名
-
使用表空间的名称:
void setTablespace ( const char* name )
使用
Tablespace
对象:void setTablespace ( const class Tablespace& tablespace )
- 参数
-
可以使用单个参数调用此方法,该参数可以是以下两种类型之一:
表
name
空间的(字符串)。对现有
Tablespace
实例的引用。
- 返回值
没有。
- 描述
此方法为每个片段设置表空间信息,包括表空间 ID 和表空间版本。
- 签名
void setTablespaceData ( const void* data, Uint32 len )
- 参数
-
该方法需要以下两个参数:
指向
data
包含表空间 ID 和版本 的指针此数据的长度 (
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
也已设置。