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


2.3.25 NdbTransaction 类

本节提供有关 NdbTransaction 类的信息。

NdbTransaction 类概述

父类

子类

描述

事务在 NDB API 中由一个 NdbTransaction 对象表示,该对象属于一个 Ndb 对象,并使用 Ndb::startTransaction() 创建。事务包含一个操作列表,由 NdbOperation 类或其子类之一表示——NdbScanOperationNdbIndexOperationNdbIndexScanOperation。每个操作访问恰好一个表。

方法

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

表 2.66 NdbTransaction 类方法及其描述

名称 描述
close() 关闭事务
commitStatus() 获取事务的提交状态
deleteTuple() 使用 NdbRecord 删除元组
execute() 执行事务
executePendingBlobOps() 如果事务包含任何未执行的指定类型的 blob 部分操作,则以 NoCommit 模式执行事务。
getGCI() 获取事务的全局检查点 ID (GCI)
getMaxPendingBlobReadBytes() 获取当前的 blob 读取批次大小
getMaxPendingBlobWriteBytes() 获取当前的 blob 写入批次大小
getNdbError() 获取最近的错误
getNdbErrorLine() 获取最近发生错误的行号
getNdbErrorOperation() 获取导致错误的最近操作
getNextCompletedOperation() 获取已执行的操作;用于查找错误
getNdbOperation() 获取一个 NdbOperation
getNdbScanOperation() 获取一个 NdbScanOperation
getNdbIndexOperation() 获取一个 NdbIndexOperation
getNdbIndexScanOperation() 获取一个 NdbIndexScanOperation
getTransactionId() 获取事务 ID
insertTuple() 使用 NdbRecord 插入元组
readTuple() 使用 NdbRecord 读取元组
refresh() 防止事务超时
releaseLockHandle() 不再需要 NdbLockHandle 对象时释放它
scanIndex() 使用 NdbRecord 执行索引扫描
scanTable() 使用 NdbRecord 执行表扫描
setMaxPendingBlobReadBytes() 设置 blob 读取批次大小
setMaxPendingBlobWriteBytes() 设置 blob 写入批次大小
setSchemaObjectOwnerChecks() 启用或禁用模式对象所有权检查
unlock() 在当前事务上创建解锁操作
updateTuple() 使用 NdbRecord 更新元组
writeTuple() 使用 NdbRecord 写入元组

方法 readTuple()insertTuple()updateTuple()writeTuple()deleteTuple()scanTable()scanIndex() 需要使用 NdbRecord.

类型

NdbTransaction 定义了 2 种公共类型,如下表所示

表 2.67 NdbTransaction 类类型及其描述

名称 描述
CommitStatusType() 描述事务的提交状态
ExecType() 确定事务应该提交还是回滚

使用事务。 获取到 NdbTransaction 对象后,使用方法如下

  1. 使用以下任一方法将操作分配给事务

    • getNdbOperation()

    • getNdbScanOperation()

    • getNdbIndexOperation()

    • getNdbIndexScanOperation()

    调用这些方法之一定义操作。可以在同一个 NdbTransaction 对象上定义多个操作,在这种情况下它们将并行执行。当所有操作都已定义时,execute() 方法将它们发送到 NDB 内核以执行。

  2. execute() 方法在 NDB 内核完成先前定义的所有操作的执行后返回。

    所有分配的操作都应该在调用 execute() 方法之前正确定义。

  3. execute() 以以下三种模式之一运行

    • NdbTransaction::NoCommit:执行操作而不提交它们。

    • NdbTransaction::Commit:执行所有剩余的操作,然后提交整个事务。

    • NdbTransaction::Rollback:回滚整个事务。

    execute() 还配备了一个额外的错误处理参数,它提供了以下两个选项

    • NdbOperation::AbortOnError: 任何错误都会导致事务中止。这是默认行为。

    • NdbOperation::AO_IgnoreError: 即使事务中定义的一个或多个操作失败,事务也会继续执行。

NdbTransaction::close()

描述

此方法关闭事务。它等效于调用 Ndb::closeTransaction().

如果事务尚未提交,则调用此方法时会中止该事务。请参见 Ndb::startTransaction().

签名
void close
    (
      void
    )
参数

.

返回值

.

NdbTransaction::commitStatus()

描述

此方法获取事务的提交状态。

签名
CommitStatusType commitStatus
    (
      void
    )
参数

.

返回值

事务的提交状态,一个 CommitStatusType 类型的值。

NdbTransaction::CommitStatusType

本节提供有关 CommitStatusType 数据类型的更多信息。

描述

此类型用于描述事务的提交状态。

枚举值

以下表格列出了可能的值及其描述

表 2.68 NdbTransaction::CommitStatusType 值和描述

名称 描述
NotStarted 事务尚未开始。
Started 事务已开始,但尚未提交。
Committed 事务已完成并已提交。
Aborted 事务已中止。
NeedAbort 事务遇到错误,但尚未中止。

可以使用 commitStatus() 读取事务的提交状态。

NdbTransaction::deleteTuple()

描述

使用 NdbRecord 删除元组。

签名
const NdbOperation* deleteTuple
    (
      const NdbRecord* key_rec,
      const char* key_row,
      const NdbRecord* result_rec,
      char* result_row,
      const unsigned char* result_mask = 0,
      const NdbOperation::OperationOptions* opts = 0,
      Uint32 sizeOfOptions = 0
    )
参数

此方法采用以下参数

  • key_rec 是指向 NdbRecord 的指针,用于表格或索引。如果在表格上,则删除操作使用主键;如果在索引上,则操作使用唯一键。在这两种情况下,key_rec 必须包含键的所有列。

  • 传递给此方法的 key_row 定义要删除的元组的主键或唯一键,并且必须在调用 execute() 之前保持有效。

  • result_rec 是要使用的 NdbRecord

  • 如果不需要返回任何属性,则 result_row 可以为 NULL

  • 如果 result_mask 不为 NULL,则它定义要读取并返回给客户端的属性子集。该掩码将被复制,因此在调用此方法返回后不需要保持有效。

  • OperationOptions (opts) 可用于提供对操作定义的更细粒度控制。使用标志传递 OperationOptions 结构,这些标志指示存在哪些操作定义选项。并非所有操作类型都支持所有操作选项;有关每种操作类型支持的选项,请参见 NdbTransaction::readTuple().

  • 可选的 sizeOfOptions 参数提供了此接口与 OperationOptions 结构先前定义的向后兼容性。如果接口实现检测到异常大小,则可以使用此参数确定如何解释传递的 OperationOptions 结构。要启用此功能,调用者应为此参数传递 sizeof(NdbOperation::OperationOptions) 的值。

返回值

指向表示此写入操作的 NdbOperationconst 指针。如果需要,可以检查操作是否有错误。

NdbTransaction::ExecType

本节提供有关 ExecType 数据类型的更多信息。

描述

此类型设置事务的执行类型;也就是说,它应该执行、执行并提交,还是中止。它用作 execute() 方法的参数。(请参见 NdbTransaction::execute()。)

枚举值

以下表格列出了可能的值及其描述

表 2.69 NdbTransaction::ExecType 值和描述

名称 描述
NoCommit 事务应执行,但不提交。
Commit 事务应执行并提交。
Rollback 事务应回滚。

NdbTransaction::execute()

描述

此方法用于执行事务。

签名
int execute
    (
      ExecType execType,
      NdbOperation::AbortOption abortOption = NdbOperation::DefaultAbortOption,
      int force = 0
    )
参数

execute() 方法采用以下三个参数

返回值

成功时返回 0,失败时返回 -1。事务没有中止并不一定意味着每个操作都成功;您必须分别检查每个操作是否有错误。

此方法仅在事务中止时报告错误。在这种情况下,事务的错误信息将设置为反映实际错误代码和类别。

如果 NoDataFound 错误有可能发生,则必须明确检查它,如以下示例所示

Ndb_cluster_connection myConnection;

if( myConnection.connect(4, 5, 1) )
{
  cout << "Unable to connect to cluster within 30 secs." << endl;
  exit(-1);
}

Ndb myNdb(&myConnection, "test");

//  define operations...

myTransaction = myNdb->startTransaction();

if(myTransaction->getNdbError().classification == NdbError:NoDataFound)
{
  cout << "No records found." << endl;
  //  ...
}

myNdb->closeTransaction(myTransaction);

您应该知道,成功的 execute() 调用仅保证扫描请求已成功组装并发送到事务协调器,没有任何错误;它不会等待从数据节点发送任何信号以作为回复返回。

NdbTransaction::executePendingBlobOps()

描述

此方法使用 ExecType 等于 NoCommit 执行事务,如果仍然存在尚未执行的给定类型的 blob 部分操作。

签名
int executePendingBlobOps
  (
    Uint8 flags = 0xFF
  )
参数

flags 参数是按位 OR 的结果,等于 1 << optype,其中 optype 是一个 NdbOperation::Type。默认值对应于 NdbOperation::Type::PrimaryKeyAccess

返回值

成功时返回 0,失败时返回 -1。事务没有中止并不一定意味着每个操作都成功;您必须分别检查每个操作是否有错误。

NdbTransaction::getGCI()

描述

此方法检索事务的全局检查点 ID (GCI)。

每个已提交的事务都属于一个 GCI。当发生全局检查点时,已提交事务的日志会保存在磁盘上。

通过将事务的 GCI 与在重新启动的 NDB 集群中恢复的最新 GCI 的值进行比较,您可以确定事务是否已恢复。

此方法无法确定具有此 GCI 的全局检查点是否已保存在磁盘上。

扫描事务的 GCI 未定义,因为扫描事务不会执行任何更新。

在使用 ExecType::Commit 调用 execute() 之前,无法获得 GCI。

签名
int getGCI
    (
      void
    )
参数

.

返回值

事务的 GCI,如果不可用,则为 -1

NdbTransaction::getMaxPendingBlobReadBytes()

描述

获取 blob 读取操作的当前批次大小(以字节为单位)。当给定事务中要读取的 blob 数据量超过此数量时,将执行该事务的所有挂起的 blob 读取操作。

签名
Uint32 getMaxPendingBlobReadBytes
    (
      void
    ) const
参数

.

返回值

当前 blob 读取批次大小(以字节为单位)。有关更多信息,请参见 NdbTransaction::setMaxPendingBlobReadBytes().

NdbTransaction::getMaxPendingBlobWriteBytes()

描述

获取 blob 写入操作的当前批次大小(以字节为单位)。当给定事务中要写入的 blob 数据量超过此数量时,将执行该事务的所有挂起的 blob 写入操作。

签名
Uint32 getMaxPendingBlobWriteBytes
    (
      void
    ) const
参数

.

返回值

当前 blob 写入批次大小(以字节为单位)。有关更多信息,请参见 NdbTransaction::setMaxPendingBlobWriteBytes().

NdbTransaction::getNdbError()

描述

此方法用于获取最新的错误 (NdbError)。

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

.

返回值

指向 NdbError 对象的引用。

有关在事务中处理错误的更多信息,请参见 第 1.4.2.3.6 节,“错误处理”.

NdbTransaction::getNdbErrorLine()

描述

此方法返回发生最新错误的行号。

签名
int getNdbErrorLine
    (
      void
    )
参数

.

返回值

最新错误的行号。

有关在事务中处理错误的更多信息,请参见 第 1.4.2.3.6 节,“错误处理”.

NdbTransaction::getNdbErrorOperation()

描述

此方法检索导致错误的操作。

要获取有关实际错误的更多信息,请使用 NdbOperation::getNdbError() 方法(该方法由 getNdbErrorOperation() 返回的 NdbOperation 对象)。

签名
NdbOperation* getNdbErrorOperation
    (
      void
    )
参数

.

返回值

指向 NdbOperation 的指针。

有关在事务中处理错误的更多信息,请参见 第 1.4.2.3.6 节,“错误处理”.

NdbTransaction::getNdbIndexOperation()

描述

此方法用于创建与给定表格关联的 NdbIndexOperation

同一事务中的所有索引操作都必须使用此方法初始化。必须在执行操作之前定义操作。

签名
NdbIndexOperation* getNdbIndexOperation
    (
      const NdbDictionary::Index* index
    )
参数

要执行操作的 Index 对象。

返回值

指向新 NdbIndexOperation 的指针。

NdbTransaction::getNdbIndexScanOperation()

描述

此方法用于创建与给定表格关联的 NdbIndexScanOperation

同一事务中的所有索引扫描操作都必须使用此方法初始化。必须在执行操作之前定义操作。

签名
NdbIndexScanOperation* getNdbIndexScanOperation
    (
      const NdbDictionary::Index* index
    )
参数

要执行操作的 Index 对象。

返回值

指向新 NdbIndexScanOperation 的指针。

NdbTransaction::getNdbOperation()

描述

此方法用于创建与给定表关联的 NdbOperation

同一事务中的所有操作都必须使用此方法初始化。操作必须在执行之前定义。

签名
NdbOperation* getNdbOperation
    (
      const NdbDictionary::Table* table
    )
参数

将要执行操作的 Table 对象。

返回值

指向新的 NdbOperation 的指针。

NdbTransaction::getNdbScanOperation()

描述

此方法用于创建与给定表关联的 NdbScanOperation

同一事务中的所有扫描操作都必须使用此方法初始化。操作必须在执行之前定义。

签名
NdbScanOperation* getNdbScanOperation
    (
      const NdbDictionary::Table* table
    )
参数

将要执行操作的 Table 对象。

返回值

指向新的 NdbScanOperation 的指针。

NdbTransaction::getNextCompletedOperation()

描述

此方法用于检索事务的已完成操作。通常用于获取属于给定事务的所有操作以检查错误。

NdbTransaction::getNextCompletedOperation(NULL) 返回事务的第一个 NdbOperation 对象;NdbTransaction::getNextCompletedOperation(myOp) 返回在 NdbOperation myOp 之后定义的 NdbOperation 对象。

此方法只能在事务执行后但事务关闭之前使用。

签名
const NdbOperation* getNextCompletedOperation
    (
      const NdbOperation* op
    ) const
参数

此方法需要一个参数 op,它是一个操作(NdbOperation 对象),或者 NULL

返回值

跟随 op 的操作,或如果 getNextCompletedOperation() 使用 NULL 调用,则为事务定义的第一个操作。

NdbTransaction::getTransactionId()

描述

此方法用于获取事务 ID。

签名
Uint64 getTransactionId
    (
      void
    )
参数

.

返回值

事务 ID,作为无符号 64 位整数。

NdbTransaction::insertTuple()

描述

使用 NdbRecord 插入元组。

签名
const NdbOperation* insertTuple
    (
      const NdbRecord* key_rec,
      const char* key_row,
      const NdbRecord* attr_rec,
      const char* attr_row,
      const unsigned char* mask = 0,
      const NdbOperation::OperationOptions* opts = 0,
      Uint32 sizeOfOptions = 0
    )
const NdbOperation* insertTuple
    (
      const NdbRecord* combined_rec,
      const char* combined_row,
      const unsigned char* mask = 0,
      const NdbOperation::OperationOptions* opts = 0,
      Uint32 sizeOfOptions = 0
    )
参数

insertTuple() 接受以下参数

  • 指向 NdbRecord 的指针,表示要插入的记录 (key_rec)。

    此方法也可以使用单个 NdbRecord 指针和单个 char 指针 (combined_rec, combined_row) 调用,其中单个 NdbRecord 表示记录、属性和数据。

  • 要插入的数据行 (key_row)。

  • 指向 NdbRecord 的指针,表示要插入的属性 (attr_rec)。

  • 要作为属性插入的数据行 (attr_row)。

  • 一个 mask,可用于过滤要插入的列。

  • OperationOptions (opts) 可用于提供对操作定义的更细粒度控制。使用标志传递 OperationOptions 结构,这些标志指示存在哪些操作定义选项。并非所有操作类型都支持所有操作选项;有关每种操作类型支持的选项,请参见 NdbTransaction::readTuple().

  • 可选的 sizeOfOptions 参数用于保持此接口与之前定义的 OperationOptions 结构的向后兼容性。如果接口实现检测到异常大小,它可以使用此参数来确定如何解释传递的 OperationOptions 结构。要启用此功能,调用方应为此参数传递 sizeof(NdbOperation::OperationOptions)

返回值

指向表示此插入操作的 NdbOperationconst 指针。

NdbTransaction::readTuple()

描述

此方法使用 NdbRecord 对象读取元组。

签名
const NdbOperation* readTuple
    (
      const NdbRecord* key_rec,
      const char* key_row,
      const NdbRecord* result_rec,
      char* result_row,
      NdbOperation::LockMode lock_mode = NdbOperation::LM_Read,
      const unsigned char* result_mask = 0,
      const NdbOperation::OperationOptions* opts = 0,
      Uint32 sizeOfOptions = 0
    )
参数

此方法采用以下参数

  • key_rec 是指向表或索引的 NdbRecord 的指针。如果在表上,则操作使用主键;如果在索引上,则操作使用唯一键。在这两种情况下,key_rec 必须包含键的所有列。

  • 传递给此方法的 key_row 定义了受影响元组的主键或唯一键,并且必须在调用 execute() 之前保持有效。

    如果掩码不为 NULL,则它定义要读取、更新或插入的属性子集。只有当 (mask[attrId >> 3] & (1<<(attrId & 7))) 设置时,列才会受到影响。掩码由方法复制,因此在调用返回后不需要保持有效。

  • result_rec 是指向用作保存结果的 NdbRecord 的指针

  • result_row 定义了结果数据的缓冲区。

  • lock_mode 指定对操作有效的锁定模式。请参阅 NdbOperation::LockMode,以了解允许的值和其他信息。

  • result_mask 定义要读取的属性子集。只有当 mask[attrId >> 3] & (1<<(attrId & 7)) 设置时,列才会受到影响。掩码被复制,因此在方法调用返回后不需要保持有效。

  • OperationOptions (opts) 可用于提供对操作定义的更细粒度的控制。使用带有指示哪些操作定义选项存在的标志的 OperationOptions 结构进行传递。并非所有操作类型都支持所有操作选项;每种操作类型支持的选项在以下表格中显示

    表 2.70 NdbTransaction::readTuple() OperationOptions (opts) 参数的操作类型,以及每种类型支持的操作选项

    操作类型(方法) OperationOptions 支持的标志
    readTuple() OO_ABORTOPTION, OO_GETVALUE, OO_PARTITION_ID, OO_INTERPRETED
    insertTuple() OO_ABORTOPTION, OO_SETVALUE, OO_PARTITION_ID, OO_ANYVALUE
    updateTuple() OO_ABORTOPTION, OO_SETVALUE, OO_PARTITION_ID, OO_INTERPRETED, OO_ANYVALUE
    writeTuple() OO_ABORTOPTION, OO_SETVALUE, OO_PARTITION_ID, OO_ANYVALUE
    deleteTuple() OO_ABORTOPTION, OO_GETVALUE, OO_PARTITION_ID, OO_INTERPRETED, OO_ANYVALUE

  • 可选的 sizeOfOptions 参数用于保持此接口与之前定义的 OperationOptions 结构的向后兼容性。如果接口实现检测到异常大小,它可以使用此参数来确定如何解释传递的 OperationOptions 结构。要启用此功能,调用方应为此参数传递 sizeof(NdbOperation::OperationOptions)

返回值

指向表示此读取操作的 NdbOperation 的指针(这可用于检查错误)。

NdbTransaction::refresh()

描述

此方法更新事务的超时计数器,从而避免因事务超时而中止。

不建议对记录进行锁定并长时间保持锁定,因为这会影响其他事务。

签名
int refresh
    (
      void
    )
参数

.

返回值

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

NdbTransaction::releaseLockHandle()

描述

此方法用于释放锁定句柄(请参阅 NdbOperation::getLockHandle),当不再需要该句柄时。对于 NdbRecord 主键读取操作,这不能在关联的读取操作执行之前调用。

当事务关闭时,与给定事务关联的所有锁定句柄都会被释放。

签名
int releaseLockHandle
    (
      const NdbLockHandle* lockHandle
    )
参数

要释放的 NdbLockHandle 对象。

返回值

成功返回 0。

NdbTransaction::scanIndex()

描述

执行表的索引范围扫描,并可选地进行排序。

签名
NdbIndexScanOperation* scanIndex
    (
      const NdbRecord* key_record,
      const NdbRecord* result_record,
      NdbOperation::LockMode lock_mode = NdbOperation::LM_Read,
      const unsigned char* result_mask = 0,
      const NdbIndexScanOperation::IndexBound* bound = 0,
      const NdbScanOperation::ScanOptions* options = 0,
      Uint32 sizeOfOptions = 0
    )
参数
  • key_record 描述要扫描的索引。它必须是索引的键记录;也就是说,它必须至少指定索引的所有键列。key_record 必须从要扫描的索引(而不是从基础表)创建。

  • result_record 描述要从扫描中返回的行。对于有序索引扫描,result_record 必须是索引的键记录;也就是说,它必须包含(至少)索引中的所有列(NDB API 需要完整的索引键来对从每个片段返回的有序行进行合并排序)。

    key_record 一样,result_record 必须从基础表创建,而不是从要扫描的索引创建。key_recordresult_record NdbRecord 结构都必须保留到位,直到扫描操作关闭。

  • result_mask 指针是可选的。如果存在,则只检索 result_mask 中对应位(按属性 ID 顺序)已设置的那些列。result_mask 在内部被复制,因此与 result_record 相反,它在调用 execute() 时不需要保持有效。

  • 可以在此调用中或在对 NdbIndexScanOperation::setBound() 的单独调用中指定单个 IndexBound。要执行多范围读取,ScanOptions 结构中的 scan_flags 必须包含 SF_MULTIRANGE。可以使用对 NdbIndexScanOperation::setBound() 的后续调用添加更多边界。

    要指定相等边界,请使用 low_keyhigh_key 的相同行指针,并将低位和高位设置为包含位。

    对于多范围扫描,low_keyhigh_key 指针必须是唯一的。换句话说,不允许在单个扫描中为多个不同范围边界重复使用相同的行缓冲区。但是,允许将相同的行指针用作 low_keyhigh_key,以便指定相等边界;还允许在 scanIndex() 方法返回后重复使用这些行,也就是说,它们在 execute() 时不需要保持有效(与 NdbRecord 指针不同)。

  • 要指定其他选项,请传递一个 ScanOptions 结构。

  • 存在 sizeOfOptions 用于启用此接口的向后兼容性。此参数指示客户端编译时 ScanOptions 结构的大小,并允许检测使用旧式 ScanOptions 结构。如果不需要此功能,可以将此参数保留为 0。

返回值

当前的 NdbIndexScanOperation,可用于错误检查。

NdbTransaction::scanTable()

描述

此方法执行表扫描,使用 NdbRecord 对象读取列数据。

签名
NdbScanOperation* scanTable
    (
      const NdbRecord* result_record,
      NdbOperation::LockMode lock_mode = NdbOperation::LM_Read,
      const unsigned char* result_mask = 0,
      Uint32 scan_flags = 0,
      Uint32 parallel = 0,
      Uint32 batch = 0
    )
参数

scanTable() 方法接受以下参数

  • 指向 NdbRecord 的指针,用于存储结果。此 result_record 必须在 execute() 调用完成之前保持有效。

  • 操作有效的 lock_mode。有关允许的值和其他信息,请参阅 NdbOperation::LockMode

  • result_mask 指针是可选的。如果存在,则只检索 result_mask 中对应位(按属性 ID 顺序)已设置的那些列。result_mask 在内部被复制,因此与 result_record 相反,它在调用 execute() 时不需要保持有效。

  • scan_flags 可用于对扫描施加排序和排序条件。有关允许值的列表,请参阅 NdbScanOperation::ScanFlag

  • parallel 参数是所需的并行度,或 0 表示最大并行度(从所有片段并行接收行),这是默认值。

  • batch 决定是否使用批处理。默认值为 0(关闭)。

返回值

指向表示此扫描的 NdbScanOperation 的指针。如果需要,可以检查操作是否有错误。

NdbTransaction::setMaxPendingBlobReadBytes()

描述

设置 blob 读取操作的字节批处理大小。当给定事务中要读取的 blob 数据量超过此大小时,将执行事务的所有挂起 blob 读取操作。

签名
void setMaxPendingBlobReadBytes
    (
      Uint32 bytes
    )
参数

批处理大小,以 bytes 计。使用 0 将导致禁用 blob 读取批处理,这是默认行为(为了向后兼容)。

返回值

.

注意

blob 读取批处理也可以在 mysql 客户端和其他 MySQL 客户端应用程序中使用 MySQL 服务器的 --ndb-blob-read-batch-bytes 选项及其关联的 MySQL 服务器系统变量进行控制。

NdbTransaction::setMaxPendingBlobWriteBytes()

描述

设置 blob 写入操作的字节批处理大小。当给定事务中要写入的 blob 数据量超过此大小时,将执行事务的所有挂起 blob 写入操作。

签名
void setMaxPendingBlobWriteBytes
    (
      Uint32 bytes
    )
参数

批处理大小,以 bytes 计。使用 0 将导致禁用 blob 写入批处理,这是默认行为(为了向后兼容)。

返回值

.

注意

在 NDB 8.0.30 及更高版本中,也可以在 mysql 客户端和其他 MySQL 客户端应用程序中通过将 MySQL 服务器的 ndb_replica_blob_write_batch_bytes 服务器系统变量设置为适当的值来控制 blob 写入批处理。请注意,当未设置 ndb_replica_blob_write_batch_bytes 时,有效的 blob 批处理大小(即 blob 列的挂起写入的最大字节数)由 ndb_replica_blob_write_batch_bytes 的默认值和为 --ndb-blob-write-batch-bytes MySQL 服务器选项设置的值中的较大者决定。因此,您应该使用 ndb_replica_blob_write_batch_bytes 而不是 --ndb-blob-write-batch-bytes

在 NDB 8.0.30 之前,您必须使用 --ndb-blob-write-batch-bytes 选项或其关联的 MySQL 服务器系统变量之一,从 mysql 或其他 MySQL 客户端程序设置 blob 批处理大小。

NdbTransaction::setSchemaObjectOwnerChecks()

描述

当使用多个 Ndb_cluster_connection 对象时,启用或禁用架构对象所有权检查。当此检查启用时,将检查此事务使用的对象以确保它们属于此连接拥有的 NdbDictionary。这是通过从连接中获取相同名称的架构对象并将它们与传递给事务的架构对象进行比较来完成的。如果它们不匹配,则会返回错误。

此方法可用于调试目的。(Bug #19875977)请注意,启用此检查会带来性能损失,因此您应该避免在生产环境中这样做。

签名
void setSchemaObjOwnerChecks
    (
      bool runChecks
    )
参数

单个参数 runChecks。使用 true 启用所有权检查,使用 false 禁用它们。

返回值

.

NdbTransaction::unlock()

描述

此方法在当前事务上创建一个解锁操作;执行后,解锁操作将删除由传递给方法的 NdbLockHandle(参见 NdbOperation::getLockHandle)引用的锁。

签名
const NdbOperation* unlock
    (
      const NdbLockHandle* lockHandle,
      NdbOperation::AbortOption ao = NdbOperation::DefaultAbortOption
    )
参数

指向锁句柄的指针;此外,还可以选择一个 AbortOptionao

如果解锁操作失败(例如,由于行已解锁),则 AbortOption 指定如何处理此问题,默认情况下,错误会导致事务中止。

返回值

指向 NdbOperation(创建的解锁操作)的指针。

NdbTransaction::updateTuple()

描述

使用 NdbRecord 对象更新元组。

签名
const NdbOperation* updateTuple
    (
      const NdbRecord* key_rec,
      const char* key_row,
      const NdbRecord* attr_rec,
      const char* attr_row,
      const unsigned char* mask = 0,
      const NdbOperation::OperationOptions* opts = 0,
      Uint32 sizeOfOptions = 0
    )
参数

updateTuple() 接受以下参数

  • key_rec 是指向表或索引的 NdbRecord 的指针。如果在表上,则操作使用主键;如果在索引上,则操作使用唯一键。在这两种情况下,key_rec 必须包含键的所有列。

  • 传递给此方法的 key_row 定义了受影响元组的主键或唯一键,并且必须在调用 execute() 之前保持有效。

  • attr_rec 是一个 NdbRecord,引用要更新的属性。

    注意

    对于唯一索引操作,attr_rec 必须引用索引的底层表,而不是索引本身。

  • attr_row 是一个包含更新新数据的缓冲区。

  • 如果 mask 不为 NULL,则它定义要更新的属性子集。该掩码被复制,因此在调用此方法返回后不需要保持有效。

  • OperationOptions (opts) 可用于提供对操作定义的更细粒度控制。使用标志传递 OperationOptions 结构,这些标志指示存在哪些操作定义选项。并非所有操作类型都支持所有操作选项;有关每种操作类型支持的选项,请参见 NdbTransaction::readTuple().

  • 可选的 sizeOfOptions 参数用于保持此接口与之前定义的 OperationOptions 结构的向后兼容性。如果接口实现检测到异常大小,它可以使用此参数来确定如何解释传递的 OperationOptions 结构。要启用此功能,调用方应为此参数传递 sizeof(NdbOperation::OperationOptions)

返回值

表示此操作的 NdbOperation(可用于检查错误)。

NdbTransaction::writeTuple()

描述

此方法与 NdbRecord 一起使用来写入数据元组。

签名
const NdbOperation* writeTuple
    (
      const NdbRecord* key_rec,
      const char* key_row,
      const NdbRecord* attr_rec,
      const char* attr_row,
      const unsigned char* mask = 0,
      const NdbOperation::OperationOptions* opts = 0,
      Uint32 sizeOfOptions = 0
    )
参数

此方法采用以下参数

  • key_rec 是指向表或索引的 NdbRecord 的指针。如果在表上,则操作使用主键;如果在索引上,则操作使用唯一键。在这两种情况下,key_rec 必须包含键的所有列。

  • 传递给此方法的 key_row 定义要写入的元组的主键或唯一键,并且必须在调用 execute() 之前保持有效。

  • attr_rec 是一个 NdbRecord,引用要写入的属性。

    对于唯一索引操作,attr_rec 必须引用索引的底层表,而不是索引本身。

  • attr_row 是一个包含新数据的缓冲区。

  • 如果 mask 不为 NULL,则它定义要写入的属性子集。该掩码被复制,因此在调用此方法返回后不需要保持有效。

  • OperationOptions (opts) 可用于提供对操作定义的更细粒度控制。使用标志传递 OperationOptions 结构,这些标志指示存在哪些操作定义选项。并非所有操作类型都支持所有操作选项;有关每种操作类型支持的选项,请参见 NdbTransaction::readTuple().

  • 可选的 sizeOfOptions 参数用于提供此接口与 OperationOptions 结构的先前定义之间的向后兼容性。如果接口实现检测到不寻常的大小,则可以使用它来确定如何解释传递的 OperationOptions 结构。要启用此功能,调用者应为该参数的值传递 sizeof(NdbOperation::OperationOptions)

返回值

指向表示此写入操作的 NdbOperationconst 指针。如果需要,可以检查操作是否有错误。