文档首页
MySQL NDB Cluster API 开发者指南
相关文档 下载此手册
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


2.3.3 字典类

本节提供了有关 Dictionary 类的信息。

字典类概述

父类

NdbDictionary

子类

列表

描述

用于定义和检索数据对象元数据。它还包括用于创建和删除数据库对象的方法。

方法

下表列出了此类的公共方法以及每个方法的目的或用途

表 2.12 字典类方法和描述

名称 描述
Dictionary() 类构造函数方法
~Dictionary() 析构函数方法
beginSchemaTrans() 开始一个模式事务
createDatafile() 创建一个数据文件
createEvent() 创建一个事件
createForeignKey() 创建一个外键
createHashMap() 创建一个哈希映射
createIndex() 创建一个索引
createLogfileGroup() 创建一个日志文件组
createRecord() 创建一个 Ndbrecord 对象
createTable() 创建一个表
createTablespace() 创建一个表空间
createUndofile() 创建一个撤销文件
dropDatafile() 删除一个数据文件
dropEvent() 删除一个事件
dropForeignKey() 删除一个外键
dropIndex() 删除一个索引
dropLogfileGroup() 删除一个日志文件组
dropTable() 删除一个表
dropTablespace() 删除一个表空间
dropUndofile() 删除一个撤销文件
endSchemaTrans() 结束(提交并关闭)一个模式事务
getDatafile() 获取具有给定名称的数据文件
getDefaultHashMap() 获取表的默认哈希映射
getEvent() 获取具有给定名称的事件
getForeignKey() 获取具有给定名称或引用的外键
getHashMap() 获取给定名称或关联表的哈希映射
getIndex() 获取具有给定名称的索引
getLogfileGroup() 获取具有给定名称的日志文件组
getNdbError() 检索最新错误
getTable() 获取具有给定名称的表
getTablespace() 获取具有给定名称的表空间
getUndofile() 获取具有给定名称的撤销文件
hasSchemaTrans() 告诉是否当前存在模式事务
initDefaultHashMap() 初始化表的默认哈希映射
invalidateTable() 使表对象无效
listObjects() 获取字典中对象的列表
listIndexes() 获取在给定表上定义的索引的列表
listEvents() 获取在字典中定义的事件的列表
prepareHashMap() 创建或检索可以更新的哈希映射
releaseEvent() 删除之前由 getEvent() 返回的事件
removeCachedTable() 从本地缓存中删除一个表
removeCachedIndex() 从本地缓存中删除一个索引

使用 Dictionary::create*() 方法创建的数据库对象(如表和索引)无法被 MySQL 服务器看到。这意味着无法通过 MySQL 客户端访问它们,也无法复制它们。因此,通常最好避免使用它们。

Dictionary 类没有直接使用列的方法。您必须使用 Column 类方法来执行此操作——有关详细信息,请参见 第 2.3.1 节,“列类”

类型

参见 第 2.3.10 节,“列表类”第 2.3.4 节,“元素结构”

字典类构造函数

描述

此方法创建一个新的 Dictionary 类实例。

此类的构造函数和析构函数都是受保护的方法,而不是公共方法。

签名
protected Dictionary
    (
      Ndb& ndb
    )
参数

一个 Ndb 对象。

返回值

一个 Dictionary 对象。

析构函数

析构函数不接受任何参数,也不返回任何内容

protected ~Dictionary
    (
      void
    )

Dictionary::beginSchemaTrans()

描述

启动一个模式事务。如果事务已经处于活动状态或内核元数据已锁定,则会发生错误。您可以使用 hasSchemaTrans() 方法来确定模式事务是否已经存在。

每当创建、更改或删除数据对象时,都会发生 元数据操作;此类操作可以在 NDB 内核中创建其他子操作。

Ndb 对象及其关联的 Dictionary 一次只支持一个模式事务。默认情况下,每个元数据操作都是单独执行的;也就是说,对于每个操作,都会隐式地启动一个模式事务,执行操作(包括任何子操作),然后关闭事务。

还可以显式地开始和结束一个模式事务,并在其边界内原子地执行一组用户定义的操作。在这种情况下,模式事务内的所有操作要么成功,要么作为整体被中止并回滚。这是通过按照此处列出的步骤完成的

  1. 要开始模式事务,请调用 beginSchemaTrans()

  2. 执行所需的操作(例如 createTable())。

  3. 通过调用 endSchemaTrans 来结束模式事务。

每个操作都会发送到 NDB 内核,内核会解析并保存它。解析失败会导致回滚到上一个用户操作,然后返回,此时用户可以继续执行或中止整个事务。

提交所有操作后,endSchemaTrans() 会处理并提交它们。如果出现错误,则会立即中止事务。

如果用户在调用 endSchemaTrans() 之前退出,则 NDB 内核会中止事务。如果用户在调用 endSchemaTrans() 返回之前退出,则内核会继续处理请求,并在集群日志中报告其完成状态。

签名
int beginSchemaTrans
    (
      void
    )
参数

.

返回值

成功返回 0,失败返回 -1。

Dictionary::createDatafile()

描述

此方法根据 Datafile 对象创建一个新的数据文件。

签名
int createDatafile
    (
      const Datafile& dFile
    )
参数

需要一个参数 - 对 Datafile 实例的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::createEvent()

描述

根据对 Event 对象的引用创建一个事件。

请注意,NDB API 不跟踪分配的事件对象,这意味着用户必须删除使用 createEvent() 获取的 Event,在不再需要此对象之后。

签名
int createEvent
    (
      const Event& event
    )
参数

Event 对象的引用 event

返回值

成功返回 0,失败返回 -1

Dictionary::createForeignKey()

描述

根据对该对象和 Object ID 的引用,创建一个 ForeignKey 对象。

签名
int createForeignKey
    (
      const ForeignKey&,
      ObjectId* = 0,
      int flags = 0
    )
参数

ForeignKey 对象的引用,以及 Object ID。如果使用可选值 flags,则允许在不执行任何外键检查的情况下创建外键。如果设置,其值必须为 CreateFK_NoVerify (1)。

返回值

成功返回 0

Dictionary::createHashMap()

描述

创建一个 HashMap

签名
int createHashMap
    (
      const HashMap& hashmap,
      ObjectId* id = 0
    )
参数

对哈希映射的引用,以及可选地要分配给它的 ID。

返回值

成功返回 0;失败返回 -1 并设置错误。

Dictionary::createIndex()

描述

此方法根据 Index 实例(以及可选的 Table 实例)创建索引。

签名

此方法可以调用或不调用对表对象的引用

int createIndex
    (
      const Index& index
    )
int createIndex
    (
      const Index& index,
      const Table& table
    )
参数

必需:对 Index 对象的引用。可选:对 Table 对象的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::createLogfileGroup()

描述

此方法根据 LogfileGroup 实例创建一个新的日志文件组。

签名
int createLogfileGroup
    (
      const LogfileGroup& lGroup
    )
参数

需要一个参数 - 对 LogfileGroup 对象的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::createRecord()

描述

此方法用于创建 NdbRecord 对象,用于表或索引扫描操作。

签名

此方法的签名取决于生成的 NdbRecord 是用于表操作还是索引操作

要创建用于表操作的 NdbRecord,请使用以下方法

NdbRecord* createRecord
    (
      const Table* table,
      const RecordSpecification* recSpec,
      Uint32 length,
      Uint32 elSize
    )

要创建用于索引操作的 NdbRecord,可以使用以下两种方法之一

NdbRecord* createRecord
    (
      const Index* index,
      const Table* table,
      const RecordSpecification* recSpec,
      Uint32 length,
      Uint32 elSize
    )

NdbRecord* createRecord
    (
      const Index* index,
      const RecordSpecification* recSpec,
      Uint32 length,
      Uint32 elSize
    )
参数

Dictionary::createRecord() 采用以下参数

返回值

用于涉及给定表或索引的操作的 NdbRecord

示例

参见 第 2.3.22 节,“The NdbRecord Interface”

Dictionary::createTable()

描述

根据 Table 实例创建一个表。

使用此方法创建的表无法被 MySQL 服务器看到,无法被 MySQL 客户端更新,也无法被复制。

签名
int createTable
    (
      const Table& table
    )
参数

Table 实例。有关更多信息,请参见 第 2.3.27 节,“The Table Class”

返回值

成功返回 0,失败返回 -1

Dictionary::createTablespace()

描述

此方法根据 Tablespace 对象创建一个新的表空间。

签名
int createTablespace
    (
      const Tablespace& tSpace
    )
参数

此方法需要一个参数 - 对 Tablespace 实例的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::createUndofile()

描述

此方法根据 Undofile 对象创建一个新的撤消文件。

签名
int createUndofile
    (
      const Undofile& uFile
    )
参数

此方法需要一个参数:对 Undofile 实例的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::dropDatafile()

描述

此方法根据 Datafile 对象删除数据文件。

签名
int dropDatafile
    (
      const Datafile& dFile
    )
参数

需要一个参数 - 对 Datafile 实例的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::dropEvent()

描述

此方法根据对 Event 对象的引用删除事件。

签名
int dropEvent
    (
      const char* name,
      int         force = 0
    )
参数

此方法采用两个参数

  • 要删除的事件的 name(以字符串形式表示)。

  • 默认情况下,如果指定的事件不存在,则 dropEvent() 会失败。可以通过传递(可选)force 参数的任何非零值来覆盖此行为;在这种情况下,不会检查是否存在此事件,并且只有在事件存在但由于某种原因无法删除它时才会返回错误。

返回值

成功返回 0,失败返回 -1

Dictionary::dropForeignKey()

描述

此方法根据对要删除的 ForeignKey 对象的引用删除外键。

签名
int dropForeignKey
    (
      const ForeignKey&
    )
参数

对要删除的 ForeignKey 的引用。

返回值

成功返回 0

Dictionary::dropIndex()

描述

此方法根据 Index 实例(以及可选的 Table 实例)删除索引。

签名
int dropIndex
    (
      const Index& index
    )
int dropIndex
    (
      const Index& index,
      const Table& table
    )
参数

此方法采用两个参数,其中一个是可选的

  • 必需:对 Index 对象的引用。

  • :对 Table 对象的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::dropLogfileGroup()

描述

根据 LogfileGroup 实例,此方法删除相应的日志文件组。

签名
int dropLogfileGroup
    (
      const LogfileGroup& lGroup
    )
参数

需要一个参数 - 对 LogfileGroup 对象的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::dropTable()

描述

根据 Table 实例删除表。

此方法会删除要删除的 table 上的所有外键约束,无论被删除的表充当父表、子表还是两者。

在 NDB 8.0 之前,使用此方法删除的 NDB 表会保留在 MySQL 数据字典中,但无法使用 DROP TABLEmysql 客户端中删除。在 NDB 8.0 中,可以使用 DROP TABLE 删除此类 孤立 表。(错误 #29125206,错误 #93672)

签名
int dropTable
    (
      const Table& table
    )
参数

Table 实例。有关更多信息,请参见 第 2.3.27 节,“The Table Class”

返回值

成功返回 0,失败返回 -1

Dictionary::dropTablespace()

描述

此方法根据 Tablespace 对象删除表空间。

签名
int dropTablespace
    (
      const Tablespace& tSpace
    )
参数

此方法需要一个参数 - 对 Tablespace 实例的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::dropUndofile()

描述

此方法根据 Undofile 对象删除撤消文件。

签名
int dropUndofile
    (
      const Undofile& uFile
    )
参数

此方法需要一个参数:对 Undofile 实例的引用。

返回值

成功返回 0,失败返回 -1

Dictionary::endSchemaTrans()

描述

结束使用 beginSchemaTrans() 开始的模式事务;导致操作被处理并要么提交,要么中止并回滚。此方法结合了事务执行和关闭;不需要(或实现)用于这些任务的单独方法。即使当前没有活动模式事务,此方法也可以成功调用。

与许多其他 NDB API 方法一样,endSchemaTrans() 完全有可能覆盖任何当前错误代码。因此,应首先检查并保存可能因之前失败的操作而导致的任何错误代码。

签名
int endSchemaTrans
    (
      Uint32 flags = 0
    )
参数

标志决定如何处理已完成的事务。默认值为 0,这会导致事务提交。

Dictionary::SchemaTransFlag.  还可以使用这里显示的 SchemaTransFlag 值之一与 endSchemaTrans() 一起使用

  • SchemaTransAbort (= 1):导致事务中止

  • SchemaTransBackground (= 2):导致事务在后台执行;结果将写入集群日志,而应用程序继续执行,不会等待响应。

返回值

成功返回 0;如果出现错误,则返回 -1 并设置 NdbError 错误代码。

Dictionary::getDatafile()

描述

此方法用于检索 Datafile 对象,该对象位于数据文件所在数据节点的节点 ID 和该节点文件系统上的数据文件路径。

签名
Datafile getDatafile
    (
      Uint32      nodeId,
      const char* path
    )
参数

此方法必须使用两个参数调用,如下所示

  • 数据文件所在数据节点的 32 位无符号整数 nodeId

  • 节点文件系统上数据文件的 path(字符串作为字符指针)

返回值

一个 Datafile 对象——有关详细信息,请参见 第 2.3.2 节,“Datafile 类”

Dictionary::getDefaultHashMap()

描述

获取表的默认哈希映射。

签名
int getDefaultHashMap
    (
      HashMap& dst,
      Uint32 fragments
    )

int getDefaultHashMap
    (
      HashMap& dst,
      Uint32 buckets,
      Uint32 fragments
    )
返回值

成功返回 0;失败返回 -1 并设置错误。

Dictionary::getEvent()

描述

此方法用于获取一个新的 Event 对象,该对象表示一个事件,并提供事件的名称。

getEvent() 在每次成功调用时都会分配内存。请记住,使用相同事件名称对该方法进行连续调用会返回多个不同的对象。

NDB API 不会跟踪已分配的事件对象,这意味着用户必须使用 delete 清理使用 getEvent() 创建的每个 Event,在不再需要该对象之后。从 NDB 8.0.30 开始,您可以使用 releaseEvent() 来完成此操作。

签名
const Event* getEvent
    (
      const char* eventName
    )
参数

eventName,一个字符串(字符指针)。

返回值

指向 Event 对象的指针。有关更多信息,请参见 第 2.3.5 节,“事件类”

Dictionary::getForeignKey()

描述

此方法用于获取一个新的 ForeignKey 对象,该对象表示一个事件,并提供对外部键的引用及其名称。

签名
int getForeignKey
    (
      ForeignKey& dst,
      const char* name
    )
参数

对外部键的引用及其 name,一个字符串(字符指针)。

返回值

指向 ForeignKey 对象的指针。

Dictionary::getHashMap()

描述

按名称或按表获取哈希映射。

签名
int getHashMap
    (
      HashMap& dst,
      const char* name
    )

int getHashMap
    (
      HashMap& dst,
      const Table* table
    )
参数

对哈希映射的引用,以及名称或 Table

返回值

成功返回 0;失败返回 -1 并设置错误。

Dictionary::getIndex()

描述

此方法检索指向索引的指针,并提供索引的名称和索引所属表的名称。

签名
const Index* getIndex
    (
      const char* iName,
      const char* tName
    ) const
参数

需要两个参数

  • 索引的名称 (iName)

  • 索引所属表的名称 (tName)

这两个都是字符串值,由字符指针表示。

返回值

指向 Index 的指针。有关此对象的信息,请参见 第 2.3.8 节,“索引类”

Dictionary::getLogfileGroup()

描述

此方法获取一个 LogfileGroup 对象,并提供日志文件组的名称。

签名
LogfileGroup getLogfileGroup
    (
      const char* name
    )
参数

日志文件组的 name

返回值

LogfileGroup 的实例;有关更多信息,请参见 第 2.3.9 节,“日志文件组类”

Dictionary::getNdbError()

描述

此方法检索最新的 NDB API 错误。

签名
const struct NdbError& getNdbError
    (
      void
    ) const
参数

.

返回值

NdbError 对象的引用。

Dictionary::getTable()

描述

此方法可用于访问已知名称的 Table

签名
const Table* getTable
    (
      const char* name
    ) const
参数

表的 name

返回值

指向表的指针,如果不存在具有提供的 name 的表,则为 NULL

Dictionary::getTablespace()

描述

此方法在提供表空间的名称或 ID 时,返回相应的 Tablespace 对象。

签名

此方法可以使用以下两种方式调用

  • 使用表空间名称

    Tablespace getTablespace
        (
          const char* name
        )
  • 使用表空间 ID

    Tablespace getTablespace
        (
          Uint32 id
        )
参数

以下任一项

  • 表空间的 name,一个字符串(作为字符指针)

  • 表空间的 32 位无符号整数 id

返回值

一个 Tablespace 对象,如 第 2.3.28 节,“表空间类” 中所述。

Dictionary::getUndofile()

描述

此方法获取一个 Undofile 对象,并提供 undo 文件所在节点的 ID 和文件系统路径。

签名
Undofile getUndofile
    (
      Uint32      nodeId,
      const char* path
    )
参数

此方法需要以下两个参数

  • undo 文件所在数据节点的 nodeId;此值以 32 位无符号整数传递

  • 节点文件系统上 undo 文件的 path(字符串作为字符指针)

返回值

Undofile 的实例。有关更多信息,请参见 第 2.3.29 节,“Undofile 类”

Dictionary::hasSchemaTrans()

描述

判断 NDB API 架构事务是否正在进行。

签名
bool hasSchemaTrans
    (
      void
    ) const
参数

.

返回值

如果架构事务正在进行,则返回布尔值 TRUE,否则返回 FALSE

Dictionary::initDefaultHashMap()

描述

初始化表的默认哈希映射。

签名
int initDefaultHashMap
    (
      HashMap& dst,
      Uint32 fragments
    )

int initDefaultHashMap
    (
      HashMap& dst,
      Uint32 buckets,
      Uint32 fragments
    )
参数

对哈希映射的引用,以及片段数。可选地,桶数。

返回值

成功返回 0;失败返回 -1 并设置错误。

Dictionary::invalidateIndex()

描述

此方法用于使缓存的索引对象无效。

签名

此方法使无效的索引可以作为 Index 对象(使用指针)进行引用,也可以通过索引名称和表名称进行引用,如下所示

void invalidateIndex
    (
      const char* indexName,
      const char* tableName
    )

void invalidateIndex
    (
      const Index* index
    )
参数

要从缓存中删除的索引的名称和其所属表的名称(分别为 indexNametableName),或者指向相应 Index 对象的指针。

返回值

.

DIctionary::invalidateTable()

描述

此方法用于使缓存的表对象无效。

签名
void invalidateTable
    (
      const char* name
    )

也可以使用 Table 对象,而不是表的名称,如下所示

void invalidateTable
    (
      const Table* table
    )
参数

要从表缓存中删除的表的 name,或者指向相应 Table 对象的指针。

返回值

.

Dictionary::listEvents()

描述

此方法返回字典中定义的所有事件的列表。

签名
int listEvents
    (
      List& list
    )
参数

对空的 List 的引用。在 NDB 8.0.29 及更高版本中,使用 clear() 来清空之前使用的 List 以便重复使用。

返回值

成功时为 0;失败时为 -1

Dictionary::listIndexes()

描述

此方法用于获取表的索引的 List,并提供表的名称。

签名
int listIndexes
    (
      List&      list,
      const char* table
) const
参数

listIndexes() 接受两个参数,这两个参数都是必需的

  • 对空的 List 的引用,在调用此方法后,该列表包含索引。在 NDB 8.0.29 及更高版本中,使用 clear() 来清空之前使用的 List 以便重复使用。

  • 要列出其索引的 table 的名称

返回值

成功返回 0,失败返回 -1

Dictionary::listObjects()

描述

此方法用于获取字典中对象的列表。可以获取字典中的所有对象,也可以将列表限制为单个类型的对象。

签名

此方法有两种签名

int listObjects
    (
      List&        list,
      Object::Type type = Object::TypeUndefined
    ) const

int listObjects
    (
      List&        list,
      Object::Type type,
      bool         fullyQualified
    ) const
参数

需要对空的 List 对象的引用——这是在调用 listObjects() 后包含字典对象的列表。(参见 第 2.3.10 节,“列表类”。)可选的第二个参数 type 可用于将列表限制为仅包含给定类型的对象——即,指定的 Object::Type。如果没有提供 type,则列表将包含字典中的所有对象。

您还可以指定 list 中的对象名称是否为完全限定的名称(即,对象名称是否包含数据库、架构以及可能包括的表名称)。如果您指定 fullyQualified,则还必须指定 type

在 NDB 8.0.29 及更高版本中,您可以调用 clear() 来清空之前使用的 List 以便重复使用。

注意

fullyQualified 设置为 false 将导致 listObjects() 返回使用完全限定名称的对象。

返回值

成功返回 0,失败返回 -1

Dictionary::prepareHashMap()

描述

创建或检索适合修改的哈希映射。要求架构事务正在进行;有关更多信息,请参见 Dictionary::beginSchemaTrans()

签名

以下任一项

  • int prepareHashMap
        (
          const Table& oldTable,
          Table& newTable
        )
  • int prepareHashMap
        (
          const Table& oldTable,
          Table& newTable,
          Uint32 buckets
        )
参数

对旧表和新表的引用。可选地,桶数。

返回值

成功返回 0;失败返回 -1 并设置错误。

Dictionary::releaseEvent()

描述

此方法用于在不再需要 Event 后释放该事件。通常情况下,这是由 getEvent() 返回的事件。

签名
void releaseEvent
    (
      const Event* event
    )
参数

要清理的 Event

返回值

.

此方法是在 NDB 8.0.30 中添加的。

Dictionary::releaseRecord()

描述

此方法用于在不再需要 NdbRecord 后释放该事件。

签名
void releaseRecord
    (
      NdbRecord* record
    )
参数

要清理的 NdbRecord

返回值

.

示例

参见 第 2.3.22 节,“The NdbRecord Interface”

Dictionary::removeCachedTable()

描述

此方法根据名称从本地缓存中删除表。

签名
void removeCachedTable
    (
      const char* table
    )
参数

要从缓存中删除的 table 的名称。

返回值

.

Dictionary::removeCachedIndex()

描述

此方法根据索引的名称以及包含该索引的表的名称,从本地缓存中删除指定的索引。

签名
void removeCachedIndex
    (
      const char* index,
      const char* table
    )
参数

removeCachedIndex() 方法需要两个参数

  • 要从缓存中删除的 index 的名称

  • 找到该索引的 table 的名称

返回值

.