10bet网址
MySQL NDB集群API开发者指南
本手册下载

2.3.11 Ndb类

本节提供有关的信息Ndb类,该类模型NDB内核;它是NDB API的主类。

Ndb类概述

父类

没有一个

子类

没有一个

描述

任何非平凡NDB API程序利用至少一个的实例Ndb。通过使用几个Ndb对象,可以实现多线程应用程序。你应该记住,一个Ndb对象不能共享的线程之间;然而,它是可能的一个线程使用多个Ndb对象。一个应用程序过程最多可以支持4711Ndb对象。

方法

下表列出了这个类的公共方法,每个方法的目的或使用:

表2.25 Ndb类方法和描述

的名字 描述
Ndb () 类的构造函数;代表一个连接到一个NDB集群。
~ Ndb () 类析构函数;终止一个集群连接时不再使用
closeTransaction () 关闭一个事务。
哈希() 计算一个分布散列值。
createEventOperation () 创建一个订阅数据库事件。(见2.3.16部分,“NdbEventOperation类”。)
dropEventOperation () 滴一个订阅数据库事件。
getDictionary () 得到一本字典,用于处理数据库模式信息。
getDatabaseName () 得到当前数据库的名称。
getDatabaseSchemaName () 得到当前的数据库模式的名称。
get_eventbuf_max_alloc () 获取当前分配的最大大小事件的缓冲区。在NDB 7.3.3补充道。
get_eventbuffer_free_percent () 得到事件缓冲区内存的百分比应提供缓冲的简历之前,一旦达到极限。在NDB 7.4.3补充道。
get_event_buffer_memory_usage () 提供事件缓冲区内存使用信息。在NDB 7.4.3补充道。
getGCIEventOperations () 得到下一个事件从GCI操作。在NDB 7.4.3弃用。
getHighestQueuedEpoch () 在事件队列中最新的时代。在NDB 7.4.3补充道。
getLatestGCI () 最近快。在NDB 7.4.3弃用。
getNdbError () 检索一个错误。(见2.3.15节,“NdbError结构”。)
getNdbErrorDetail () 获取额外的细节错误。
getNdbObjectName () 检索Ndb如果一组对象名称。在NDB 7.3.6补充道。
getNextEventOpInEpoch2 () 得到下一个事件操作在这个全球检查点。
getNextEventOpInEpoch3 () 得到下一个事件操作在这个全球检查点,显示任何收到anyvalues。添加在NDB 7.3.20、7.4.18 7.5.9, 7.6.4。
getReference () 检索参考或标识符Ndb对象实例。
init () 初始化一个Ndb对象,使它可以使用了。
isConsistent () 所有收到的事件是否一致。在NDB 7.4.3弃用。
isConsistentGCI () 是否所有收到事件对于一个给定的全球检查点是一致的。在NDB 7.4.3弃用。
isExpectingHigherQueuedEpochs () 检查是否有新的时代排队,或有一个集群故障事件。在NDB 7.3.10, 7.4.7补充道。
nextEvent () 从队列中获取下一个事件。在NDB 7.4.3弃用。
nextEvent2 () 从队列中获取下一个事件。在NDB 7.4.3补充道。
pollEvents () 等待一个事件发生。在NDB 7.4.3弃用。
pollEvents2 () 等待一个事件发生。在NDB 7.4.3补充道。
setDatabaseName () 设置当前数据库的名称。
setDatabaseSchemaName () 当前数据库模式集的名称。
setEventBufferQueueEmptyEpoch () 使空事件队列。添加到NDB 7.4.11, NDB是7.5.2。
set_eventbuf_max_alloc () 设置当前分配的最大事件缓冲区的大小。在NDB 7.3.3补充道。
set_eventbuffer_free_percent () 集事件的比例应该可用的缓冲区内存缓冲简历之前,一旦达到极限。在NDB 7.4.3补充道。
setNdbObjectName () 用于调试目的:设置一个任意的名称Ndb对象。在NDB 7.3.6补充道。
startTransaction () 开始一个事务。(见部分2.3.25,“NdbTransaction类”。)

类型

Ndb类没有定义任何公共typesbut定义三个数据结构,这是列在这里:

资源消耗的Ndb对象。一个Ndb对象消耗内存的大小比例最大操作执行对象的生命周期。这是特别明显的大型交易;使用一个或两个文本列;或两者兼而有之。这种内存对象的生命周期,一旦以这种方式使用的Ndb对象,释放该内存的唯一方法就是摧毁的对象(如果需要,然后创建一个新的实例)。

请注意

Ndb在每个对象是多线程安全的Ndb对象可以由一个线程。如果一个Ndb对象是移交给另一个线程,那么应用程序必须确保使用一个内存屏障,确保新线程看到前面的线程执行的所有更新。

信号量,互斥锁的简单的方法来提供记忆障碍,而不必烦恼的记忆障碍的概念。

也可以使用多个Ndb对象执行操作在不同的集群在一个单一的应用程序。看到1.5节,“应用程序级分区”条件和限制申请这样的用法。

Ndb类构造函数

描述

这将创建一个实例Ndb代表的连接NDB集群。所有NDB API的应用程序应该从建立至少一个开始Ndb对象。这需要创建至少一个的实例Ndb_cluster_connection,作为一个容器集群连接字符串。

签名
Ndb (Ndb_cluster_connection *ndb_cluster_connection,const char *catalogName= " ",const char *schemaName=“def”)
参数

Ndb类构造函数需要三个参数,其中只有第一个是必需的:

  • ndb_cluster_connection是一个实例Ndb_cluster_connection代表一个集群连接字符串。(见2.3.12部分,“Ndb_cluster_connection类”。)

    NDB 7.3.8, NDB 7.4.3之前,可以删除Ndb_cluster_connection用于创建一个给定的实例Ndb不先删除相关的Ndb对象。(错误# 19999242)

  • catalogName是一个可选参数提供一个名称空间中创建的表和索引的连接吗Ndb对象。

    这相当于什么mysqld认为数据库

    这个参数的默认值是一个空字符串。

  • 可选schemaName提供了一个额外的名称空间给定目录中创建的表和索引。

    这个参数的默认值是字符串def

返回值

一个Ndb对象。

析构函数

的析构函数Ndb类应该被称为为了终止的一个实例Ndb。它不需要理由,也没有任何特殊处理。

Ndb: closeTransaction ()

描述

这是两种NDB API方法提供关闭事务(另一个是NdbTransaction: close ())。你必须调用这两个方法来关闭交易一旦完成,交易是否成功。

如果事务尚未提交,它将终止时,调用此方法。看到Ndb: startTransaction ()

签名
空白closeTransaction (NdbTransaction *事务)
参数

这个方法需要一个参数,一个指针NdbTransaction被关闭。

返回值

没有一个(无效)。

Ndb:哈希()

描述

这种方法可以用来计算一个分布散列值,给定一个表和它的键。

哈希()只能用于表使用本机NDB分区。

签名
静态int哈希(Uint32 *hashvalueptr表*,const NdbDictionary::,const struct Key_part_ptr *keyData,void *xfrmbuf= 0,Uint32xfrmbuflen= 0)
参数

这个方法接受以下参数:

  • 如果方法调用成功,hashvalueptr将计算出的散列值。

  • 一个指向(见部分2.3.27,“表类”)。

  • keyData是一个以null结尾的指针数组的关键部分表的分布键的一部分。从元数据读取每个关键部分的长度和检查传递的值(见Ndb: Key_part_ptr)。

  • xfrmbuf是一个指向临时缓冲区用来计算哈希值。

  • xfrmbuflen这个缓冲区的长度。

    请注意

    如果xfrmbuf(默认),然后调用malloc ()free ()自动,是适当的。哈希()没有如果xfrmbuf不是xfrmbuflen太小了。

    以前,人们认为返回的记忆malloc ()电话总是会适当对齐,这并非总是如此。从NDB 7.3.2开始,什么时候malloc ()这种方法提供了一个缓冲,缓冲是明确一致的分配后,并在实际使用之前。(错误# 16484617)

返回值

0成功;如果执行失败,将返回一个错误代码。如果方法调用成功,通过计算哈希值hashvalueptr

Ndb: createEventOperation ()

描述

这个方法创建了一个订阅数据库事件。

NDB API事件订阅后一个NDB集群已经恢复使用ndb_restore;在这种情况下,必须重新创建明确的所有订阅。

签名
NdbEventOperation * createEventOperation (const char *eventName)
参数

这种方法需要一个参数,独一无二的eventName确定你希望订阅的事件。

返回值

一个指针指向一个NdbEventOperation对象(或在失败的事件)。看到2.3.16部分,“NdbEventOperation类”

Ndb: dropEventOperation ()

描述

这种方法滴订阅数据库事件由一个表示NdbEventOperation对象。

内存使用的事件操作已下降才释放事件缓冲区已经完全阅读。这意味着你必须继续打电话pollEvents ()nextEvent ()在这种情况下,直到这些方法返回0分别为了这个内存被释放。

签名
int dropEventOperation (NdbEventOperation *eventOp)
参数

这个方法需要一个输入参数,指针的一个实例NdbEventOperation

返回值

0在成功;任何其他结果表明失败。

Ndb: EventBufferMemoryUsage

本节描述了EventBufferMemoryUsage结构。

父类

Ndb

描述

这种结构在NDB 7.4.3添加处理事件缓冲区内存使用统计数据。使用它作为参数Ndb: get_event_buffer_memory_usage ()

属性

EventBufferMemoryUsage下表所示的属性:

表2.26 EventBufferMemoryUsage结构属性与类型、初始值和描述

的名字 类型 初始值 描述
allocated_bytes 无符号 没有一个 总事件缓冲区分配的内存,在字节
used_bytes 无符号 没有一个 总内存使用,在字节
usage_percent 无符号 没有一个 事件缓冲区内存使用量为百分之一(100 * used_bytes / allocated_bytes)

Ndb: getDictionary ()

描述

该方法用于获取一个对象检索或操纵数据库模式信息。这字典对象包含了集群中的所有表的元信息。

该方法返回的字典是独立运营的任何事务。看到2.3.3节,“Dictionary类”为更多的信息。

签名
NdbDictionary:字典* getDictionary(空白)常量
参数

没有一个

返回值

的一个实例字典类。

Ndb: getDatabaseName ()

描述

这种方法可以用来获取当前数据库的名称。

签名
const char * getDatabaseName(空白)
参数

一个也没有。

返回值

当前数据库的名称。

Ndb: getDatabaseSchemaName ()

描述

该方法可用于获取当前数据库模式名。

签名
const char * getDatabaseSchemaName(空白)
参数

没有一个

返回值

当前的数据库模式的名称。

Ndb:: getGCIEventOperations()(弃用)

描述

遍历不同的事件操作当前GCI的一部分,成为有效后调用nextEvent ()。您可以使用这个方法来获得时代的摘要信息(如所有表的列表)前处理事件数据。

在NDB 7.4.3弃用此方法,在将来发布的版本中移除。在NDB 7.4.3,之后,您应该使用getNextEventOpInEpoch2 ()代替。

签名
const NdbEventOperation * getGCIEventOperations (Uint32 *iter,Uint32 *event_types)
参数

迭代器和一个事件类型的面具。集*iter= 0开始。

返回值

下一个事件操作;返回当没有更多的事件操作。如果event_types不是,然后在调用该方法包含事件类型的位掩码。。

Ndb: get_eventbuf_max_alloc ()

描述

得到了最大内存字节,可用于事件缓冲区。这是一样的阅读的价值ndb_eventbuffer_max_alloc系统变量的MySQL服务器。

该方法在NDB 7.3.3补充道。

签名
无符号get_eventbuf_max_alloc(空白)
参数

没有一个

返回值

mamximum内存用于事件缓冲区,以字节为单位。

Ndb: get_eventbuffer_free_percent ()

描述

得到ndb_eventbuffer_free_percent,也就是事件缓冲区内存的百分比应该缓冲简历之前,可用一次ndb_eventbuffer_max_alloc已经达到了。这个值计算使用* 100 /ndb_eventbuffer_max_alloc,在那里使用实际使用事件缓冲区内存的数量,在字节。

该方法在NDB 7.4.3补充道。

签名
无符号get_eventbuffer_free_percent(空白)
参数

(百分比pct)的事件缓冲存储器,必须存在。有效范围是1到99场。

返回值

没有一个

Ndb: get_event_buffer_memory_usage ()

描述

得到事件缓冲区使用的比例ndb_eventbuffer_max_alloc。不像get_eventbuffer_free_percent (),这种方法使完整的使用信息的形式EventBufferMemoryUsage数据结构。

该方法在NDB 7.4.3补充道。

签名
空白get_event_buffer_memory_usage (EventBufferMemoryUsage&)
参数

的引用EventBufferMemoryUsage结构,使用接收数据。

返回值

没有一个

Ndb: getHighestQueuedEpoch ()

描述

NDB 7.4.3补充说,这种方法取代getLatestGCI ()现在已经弃用,去除在未来NDB集群中释放。

NDB 7.4.7之前,此方法返回时代数量最高的事件队列。在NDB 7.4.7,后来,它返回后发现数量最高的时代使命pollEvents2 ()(错误# 20700220)。

签名
Uint64 getHighestQueuedEpoch(空白)
参数

没有一个

返回值

最近的时代,一个整数。

Ndb:: getLatestGCI()(弃用)

描述

全球指数最近的检查点。

在NDB 7.4.3弃用此方法,在将来发布的版本中移除。在NDB 7.4.3,之后,您应该使用getHighestQueuedEpoch ()代替。

签名
Uint64 getLatestGCI(空白)
参数

没有一个

返回值

最近快一个整数。

Ndb: getNdbError ()

描述

该方法为你提供了两种不同的方式来获取一个NdbError对象代表一个错误条件。更详细的信息关于错误处理的NDB API,明白了NDB集群API错误

签名

getNdbError ()方法实际上有两个变种。

第一个简单的得到最新的错误发生:

const NdbError& getNdbError(空白)

第二个变量返回对应于给定的错误代码的错误:

const NdbError& getNdbError (int错误代码)

无论使用哪个版本的方法,NdbError对象返回继续直到下一次NDB API方法被调用。

参数

获得最新的错误,简单地调用getNdbError ()没有任何参数。获取匹配一个特定的错误错误代码,调用该方法通过代码(一个int)作为参数。NDB API错误代码的清单和相应的错误消息,明白了2.4节,“NDB API的错误和错误处理”

返回值

一个NdbError对象包含关于错误的信息,包括它的类型和适用,上下文信息是如何出现的错误。看到2.3.15节,“NdbError结构”的细节。

Ndb: getNdbErrorDetail ()

描述

这种方法提供了一种简便的和安全的方式访问任何额外的一个错误的信息。而不是阅读这些额外的细节NdbError对象的细节属性(现在弃用的getNdbErrorDetail ()见错误# 48851)。这种方法使存储这些细节的用户提供的缓冲区,返回一个指向这个缓冲区的开始。如果字符串包含细节超过缓冲区的长度,是截断。

getErrorDetail ()提供了一个错误的来源形式的一个字符串。唯一约束的情况下违反(错误893),这个字符串供应的完全限定名称索引问题的发源地,在格式数据库名称/模式名/表名/索引名,(NdbError.details,另一方面,仅有一个索引ID,它通常不是显而易见这个索引表所属)。不管错误的类型和细节关于这个错误,检索的字符串getErrorDetail ()总是以null结尾。

签名

getNdbErrorDetail ()方法有以下签名:

const char * getNdbErrorDetail (const NdbError&错误,char *缓冲,Uint32bufferLength)常量
参数

得到一个错误的详细信息,电话getNdbErrorDetail ()与相应的参考NdbError对象,缓冲,这个缓冲区的长度(表示为一个32位无符号整数)。

返回值

当额外的细节错误可用,该方法返回一个指针的开始吗缓冲供应。如前所述,如果字符串包含长于细节bufferLength字符串被截断,健康。如果没有添加更多细节,getNdbErrorDetail ()返回

Ndb: getNdbObjectName ()

描述

如果成立的一个名字Ndb对象初始化之前,您可以使用此方法检索它。用于调试。

该方法在NDB 7.3.6补充道。(错误# 18419907)

签名
const char * getNdbObjectName(空白)常量
参数

没有一个

返回值

Ndb对象名称,如果一个人一直使用setNdbObjectName ()。否则,该方法将返回0。

Ndb: getNextEventOpInEpoch2 ()

描述

遍历单项业务占当前全球检查站。使用以下nextEvent2 ()获得时代的摘要信息,如所有表的清单,之前处理事件数据。

特殊时代没有任何事件操作。

签名
const NdbEventOperation * getNextEventOpInEpoch2 (Uint32 *iter,Uint32 *event_types)
参数

iter最初为0;这是当没有更多的事件在这个时代。如果event_types不是,它接收到的事件类型的位掩码。

返回值

一个指针NdbEventOperation,如果有一个。

Ndb: getNextEventOpInEpoch3 ()

描述

遍历单项业务占当前全球检查站。使用以下nextEvent2 ()获得时代的摘要信息,如所有表的清单,之前处理事件数据。是一样的getNextEventOpInEpoch3 ()但随着添加第三个参数拥有所有AnyValues收到的合并,显示哪些位设置为所有操作在一个给定的表。

特殊时代没有任何事件操作。

这个方法添加NDB 7.3.20 7.4.18, 7.5.9, 7.6.4。(错误# 26333981)

签名
const NdbEventOperation * getNextEventOpInEpoch2 (Uint32 *iter,Uint32 *event_typesUint32 *cumulative_any_value)
参数

iter最初为0;这是当没有更多的事件在这个时代。如果event_types不是,它接收到的事件类型的位掩码。如果cumulative_any_value不是,它拥有的合并所有AnyValues收到。

返回值

一个指针NdbEventOperation,如果有一个。

Ndb: getReference ()

描述

该方法可用于获得给定的一个参考Ndb对象。这是返回相同的值对于一个给定的操作对应于该对象的输出转储2350

签名
Uint32 getReference(空白)
参数

没有一个

返回值

一个32位无符号整数。

Ndb: init ()

描述

该方法用于初始化Ndb对象。

签名
int init (intmaxNoOfTransactions= 4)
参数

init ()方法接受一个参数maxNoOfTransactions类型的整数。该参数指定的最大数量平行NdbTransaction对象,可以由这个实例Ndb。最大允许的值maxNoOfTransactions是1024;如果没有指定,默认为4。

每个扫描或索引操作使用一个额外的NdbTransaction对象。

返回值

这个方法返回一个int,可以是以下两个值:

  • 0:表示Ndb对象初始化成功。

  • 1:表示失败。

Ndb:: isConsistent()(弃用)

描述

检查是否所有事件是一致的。如果一个节点故障发生在资源耗尽,事件可能会丢失,因此交付的事件数据可能是不完整的。这种方法可以确定是这种情况。

在NDB 7.4.3弃用此方法,在将来发布的版本中移除。在NDB 7.4.3,之后,您应该使用NdbEventOperation: getEventType2 ()确定事件的类型,这种情况下,事件的类型TE_INCONSISTENT。看到事件:TableEvent

签名
bool isConsistent (Uint64&)
参数

参考全球检查点指数。这是第一个不一致的GCI发现,如果任何。

返回值

真正的如果所有事件都是一致的。

Ndb:: isConsistentGCI()(弃用)

描述

如果一个节点故障发生在资源耗尽,事件可能会丢失,因此交付的事件数据可能是不完整的。这种方法可以确定是这种情况通过检查是否所有事件在一个给定的GCI是一致的。

在NDB 7.4.3弃用此方法,在将来发布的版本中移除。在NDB 7.4.3,之后,您应该使用NdbEventOperation: getEventType2 ()确定事件的类型,这种情况下,事件的类型TE_INCONSISTENT。看到事件:TableEvent

签名
bool isConsistentGCI (Uint64)
参数

一个全球检查点指数。

返回值

真正的如果这个GCI是一致的;表明GCI可能会不一致。

Ndb: isExpectingHigherQueuedEpochs ()

描述

检查是否更高排队时代已经被调用Ndb: pollEvents2 (),还是一个TE_CLUSTER_FAILURE事件被发现。

是可能的,在一个集群故障被检测到,最高的排队返回的时代pollEvents2 ()不再增加。在这种情况下,而不是轮询更多的事件时,您应该使用事件nextEvent ()直到它检测到一个TE_CLUSTER_FAILURE检测到,然后重新连接到集群时可用了。

这种方法增加了NDB 7.3.10, 7.4.7(错误# 18753887)。

签名
bool isExpectingHigherQueuedEpochs(空白)
参数

没有一个

返回值

真的如果排队时代看到的最后一个pollEvents2 ()打电话或集群失败的事件。

Ndb: Key_part_ptr

本节描述了Key_part_ptr结构。

父类

Ndb

描述

Key_part_ptr提供了一种方便的方法来定义关键部分数据在开始交易和计算散列值,通过传入指针分配键值。主要分布有多个部件时,应作为一个数组,传递指针设置等于最后一部分。看到Ndb: startTransaction (),Ndb:哈希(),关于如何使用这个结构的更多信息。

属性

一个Key_part_ptr下表所示的属性:

表2.27 Key_part_ptr结构属性与类型、初始值和描述

属性 类型 初始值 描述
ptr const void * 没有一个 指针指向一个或多个键值分布
len 无符号 没有一个 的指针的长度

Ndb:: nextEvent()(弃用)

描述

返回下一个事件从订阅队列操作数据。

从NDB 7.3.6开始,此方法清除不一致数据事件从事件队列在处理他们。为了能够清除所有此类事件在这些后来的版本中,即使在情况下,应用程序必须调用这个方法pollEvents ()已经返回0。(错误# 18716991)

在NDB 7.4.3弃用此方法,在将来发布的版本中移除。在NDB 7.4.3,之后,您应该使用nextEvent2 ()代替。

签名
NdbEventOperation * nextEvent(空白)
参数

一个也没有。

返回值

这个方法返回一个NdbEventOperation订阅队列对象代表下一个事件,如果有这样的一个事件。如果没有事件队列,它返回代替。

Ndb: nextEvent2 ()

描述

返回与数据相关联的事件操作列中移除从事件队列。这应该是后反复调用pollEvents2 ()填充队列,直到事件队列是空的。

NDB 7.4.3补充说,这种方法取代nextEvent ()现在已经弃用,去除在未来NDB集群中释放。

调用该方法之后,使用NdbEventOperation: getEpoch ()确定时代,然后检查返回的事件数据使用的类型NdbEventOperation: getEventType2 ()。所有异常处理必须提供TableEvent类型,包括TE_EMPTY,TE_INCONSISTENT,TE_OUT_OF_MEMORY(也介绍了NDB 7.4.3)。没有其他的NdbEventOperation比两个命名方法应该呼吁一个非凡的时代。返回空时代(TE_EMPTY当数据节点空闲)可能洪水应用程序。如果这是不可取的,应用程序应该过滤掉任何空的时代。

签名
NdbEventOperation * nextEvent2(空白)
参数

一个也没有。

返回值

这个方法返回一个NdbEventOperation对象代表下一个事件在一个事件队列,如果有这样的一个事件。如果没有事件队列,它返回代替。

Ndb: PartitionSpec

本节提供有关的信息PartitionSpec结构。

父类

Ndb

描述

一个PartitionSpec用于描述表分区使用任何以下条件之一:

  • 一个特定分区ID与用户定义的分区表。

  • 数组的一个表的键值分布与本地分区表。

  • 一行在NdbRecord本机格式包含一个分区表键值的分布。

属性

一个PartitionSpec有两个属性,一个SpecType和一个规范这是一个数据结构对应SpecType,见下表:

表2.28与SpecType PartitionSpec属性值,数据结构,并为每个属性描述。

SpecType枚举 SpecType值(Uint32) 数据结构 描述
PS_NONE 0 没有一个 没有提供分区信息。
PS_USER_DEFINED 1 Ndb: PartitionSpec:: UserDefined 对于一个用户定义的分区表,一个特定的分区标识的分区ID。
PS_DISTR_KEY_PART_PTR 2 Ndb: PartitionSpec:: KeyPartPtr 表的本地分区,一个数组,其中包含表的分布键值是用来识别分区。
PS_DISTR_KEY_RECORD 3 Ndb: PartitionSpec:: KeyRecord 使用本地分区表的分区标识键值分布,包含在一行中给出NdbRecord格式。

UserDefined结构。这种结构时使用SpecTypePS_USER_DEFINED

表2.29 partitionId属性的属性类型PS_USER_DEFINED SpecType

属性 类型 描述
partitionId Uint32 的分区ID所需的表。

KeyPartPtr结构。这种结构时使用SpecTypePS_DISTR_KEY_PART_PTR

表2.30的属性PS_DISTR_KEY_PART_PTR SpecType,属性类型和描述

属性 类型 描述
tableKeyParts Key_part_ptr 指针分配表在本地分区键值。
xfrmbuf void * 指针指向一个临时缓冲区用于执行计算。
xfrmbuflen Uint32 临时缓冲区的长度。

KeyRecord结构。这种结构时使用SpecTypePS_DISTR_KEY_RECORD

表2.31 PS_DISTR_KEY_RECORD SpecType属性、属性类型和描述

属性 类型 描述
keyRecord NdbRecord 一行在NdbRecord格式,包含一个表的分布键。
keyRow const char * 关键数据分布。
xfrmbuf void * 指针指向一个临时缓冲区用于执行计算。
xfrmbuflen Uint32 临时缓冲区的长度。

定义从Ndb.hpp因为这是一个相当复杂的结构,我们在这里提供原始的源代码的定义PartitionSpec,鉴于存储/ ndb / include / ndbapi / Ndb.hpp:

struct PartitionSpec {/ * PartitionSpec结构的大小。* /静态内联Uint32大小(){返回sizeof (PartitionSpec);}enum SpecType {PS_NONE = 0, PS_USER_DEFINED = 1, PS_DISTR_KEY_PART_PTR = 2, PS_DISTR_KEY_RECORD = 3};Uint32类型;联盟{struct {Uint32 partitionId;}UserDefined;结构体{const Key_part_ptr * tableKeyParts;void * xfrmbuf;Uint32 xfrmbuflen;}KeyPartPtr; struct { const NdbRecord* keyRecord; const char* keyRow; void* xfrmbuf; Uint32 xfrmbuflen; } KeyRecord; }; };

Ndb: pollEvents ()

描述

该方法等待GCP完成。它是用来确定任何事件订阅队列中可用。

该方法等待下一个时代,而不是下一个质量。看到2.3.16部分,“NdbEventOperation类”为更多的信息。

在NDB 7.4.3,后来,这个方法弃用,如去除在未来NDB集群释放;使用pollEvents2 ()代替。

NDB 7.4.7之前,pollEvents ()不兼容的特殊TableEvent类型中添加NDB 7.4.3(错误# 20646496);在NDB 7.4.7,之后,pollEvents ()这些事件类型兼容,如以后在这一节中所述。

签名
int pollEvents (intmaxTimeToWait,Uint64 *latestGCI= 0)
参数

这里列出的这个方法接受两个参数:

  • 之前的最长时间等,以毫秒为单位放弃和报告任何事件(也就是说,之前的方法自动返回0)。

    一个负值会导致无限期等待,不要超时。这是不推荐(继任者和不支持的方法pollEvents2 ())。

  • 全球指数最近的检查点。通常情况下,这可能安全地允许承担其默认值,这是0

返回值

pollEvents ()返回值的类型int,这可能是解释如下:

  • > 0事件队列中可用。

  • 0:没有可用的事件。

  • 在NDB 7.4.7,后来,负值表示失败NDB_FAILURE_GCI(~ (Uint64) 0)表明集群失败(错误# 18753887);返回1时遇到一个特殊事件,当只有除外TE_EMPTY事件被发现,之后在这一节中所述。

在NDB 7.4.7,后来,当pollEvents ()发现异常事件的事件队列,该方法返回1,否则表现如下:

  • 空的事件(TE_EMPTY)从事件队列中删除头直到找到一个事件包含的数据。当这个结果在整个队列处理没有遇到任何数据,该方法返回0(没有可用的事件)而不是1。这种行为使得这事件类型对应用程序透明使用pollEvents ()

  • 后遇到一个事件包含数据不一致(TE_INCONSISTENT)由于数据节点的缓冲区溢出,下一个电话nextEvent ()电话从事件队列中删除数据不一致事件数据,并返回。您应该检查要求的不一致isConsistent ()之后立即。

    重要的:虽然不一致的事件从事件队列中删除的数据调用nextEvent ()删除,不一致的信息只能由另一个nextEvent ()电话后,发现事件包含的数据。

  • pollEvents ()发现一个数据缓冲区溢出事件(TE_OUT_OF_MEMORY),事件数据添加到事件队列每当事件缓冲区使用超过ndb_eventbuffer_max_alloc。在这种情况下,下一个电话nextEvent ()退出过程。

Ndb: pollEvents2 ()

描述

等待一个事件发生。尽快返回任何事件数据是可用的。这种方法也移动时代的完整事件数据到事件队列。

NDB 7.4.3补充说,这种方法取代pollEvents ()现在已经弃用,去除在未来NDB集群中释放。

签名
int pollEvents2 (intaMillisecondNumber,Uint64 *highestQueuedEpoch= 0)
参数

这里列出的这个方法接受两个参数:

  • 的最长时间等,以毫秒为单位,在放弃和报告任何事件(也就是说,之前的方法自动返回0)。

    在NDB 7.4.7,之后,为这个参数指定一个负值的原因pollEvents2 ()返回1,显示一个错误(错误# 20762291)。

  • 该指数最高的排队时代。通常情况下,这可能安全地允许承担其默认值,这是0。如果这个值是不和新事件在事件队列数据可用,它被设置为最高的时代中找到可用的事件数据。

返回值

pollEvents2 ()返回一个整数,其价值可以解释如下:

  • > 0事件队列中可用。

  • 0:没有可用的事件。

  • < 0:指示失败(可能的错误)。

Ndb: setDatabaseName ()

描述

该方法用于设置当前数据库的名称。

签名
空白setDatabaseName (const char *数据库名)
参数

setDatabaseName ()需要一个,所需参数,新数据库的名称设置为当前数据库。

返回值

没有一个

Ndb: setDatabaseSchemaName ()

描述

该方法集当前数据库模式的名称。

签名
空白setDatabaseSchemaName (const char *databaseSchemaName)
参数

数据库模式的名称。

返回值

没有一个

Ndb: setEventBufferQueueEmptyEpoch ()

描述

排队的空时代默认情况下是禁用的。这个方法可以用来支持这样排队,在这种情况下,任何新的空时代进入事件缓冲区方法调用后排队。

当启用队列空时代时,nextEvent ()同事一个空时代的一个且只有一个订阅(事件操作)连接到订阅Ndb对象。这意味着可以有不超过一个空每订阅时代,尽管用户可能有很多订阅相关的相同Ndb对象。

setEventBufferQueueEmptyEpoch ()没有相关的getter方法。这是故意的,是由于setter适用于排队时代,而队列本身可能仍然反映了之前的状态,它们调用setter。因此,在过渡时期,一个空的队列中发现的时代可能即使排队是关闭的。

setEventBufferQueueEmptyEpoch ()添加在NDB 7.4.11, NDB是7.5.2。

签名
空白setEventBufferQueueEmptyEpoch (boolqueue_empty_epoch)
参数

这个方法接受一个输入参数,一个布尔值。调用的方法真正的使排队的空事件;通过方法禁用这种排队。

返回值

没有一个

Ndb: set_eventbuf_max_alloc ()

描述

设置最大内存字节,可用于事件缓冲区。这同样的效果,设置的值ndb_eventbuffer_max_alloc系统变量的MySQL服务器。

该方法在NDB 7.3.3补充道。

签名
空白set_eventbuf_max_alloc(无符号大小)
参数

所需的最大大小事件缓冲区的字节。

返回值

没有一个

Ndb: set_eventbuffer_free_percent ()

描述

ndb_eventbuffer_free_percent,也就是事件缓冲区内存的百分比应该缓冲简历之前,可用一次ndb_eventbuffer_max_alloc已经达到了。

该方法在NDB 7.4.3补充道。

签名
int set_eventbuffer_free_percent(无符号pct)
参数

(百分比pct)的事件缓冲存储器,必须存在。有效范围是1到99场。

返回值

值集。

Ndb: setNdbObjectName ()

描述

从NDB 7.3.6开始,你可以设置任意的、人类可读名称来标识一个Ndb对象用于调试目的。这个名字可以检索使用getNdbObjectName ()。(错误# 18419907)这个调用之前必须完成init ()这个对象;试图设置一个名字初始化失败后一个错误。

你可以设置一个名称为给定的只有一次Ndb对象;随后尝试这个名字已经设置失败后一个错误。

签名
int setNdbObjectName (const char *的名字)
参数

一个的名字这是人类可读的。

返回值

0的成功。

Ndb: startTransaction ()

描述

该方法用于开始一个新事务。有三个变种,最简单的使用一个表和一个分区键或分区ID指定事务协调员(TC)。第三个变量可以让您指定的TC通过指针指向数据的关键。

当事务完成它必须关闭NdbTransaction: close ()Ndb: closeTransaction ()。否则中止交易。必须这样做不管事务的最终结果,即使不能由于一个错误。

看到Ndb: closeTransaction (),NdbTransaction: close ()为更多的信息。

签名
NdbTransaction表* * startTransaction (const NdbDictionary::= 0,const char *keyData= 0,Uint32 *keyLen= 0)
参数

该方法以以下三个参数:

  • :一个指向对象。这是用来确定哪个节点事务协调员应运行。

  • keyData:一个指向一个分区键对应

  • keyLen:分区键的长度,以字节表示。

Distribution-aware startTransaction形式()。也可以使用分布的意识用这种方法;也就是说,建议哪个节点应该充当事务的协调者。

签名
NdbTransaction表* * startTransaction (const NdbDictionary::,const struct Key_part_ptr *keyData,void *xfrmbuf= 0,Uint32xfrmbuflen= 0)
参数

当指定事务协调员,该方法以这里列出的四个参数:

  • 一个指向(对象)用来决定哪些节点应该充当事务的协调者。

  • 一个以null结尾的指针数组的值分布键列。关键部分的长度是读取元数据和检查传递的价值。

    一个Ndb: Key_part_ptr所示的定义是Ndb: Key_part_ptr

  • 一个指针指向一个临时缓冲区,用来计算哈希值。

    如果xfrmbuf(默认),然后调用malloc ()free ()自动,是适当的。startTransaction ()没有如果xfrmbuf不是xfrmbuflen太小了。

  • 缓冲区的长度。

返回值

成功,一个NdbTransaction对象。如果失败,返回。

例子

假设是一个单一的表的分区键长整型数字列。然后你将宣布分布键数组如下所示:

Key_part_ptr distkey [2];

分布键的值将被定义如下所示:

无符号长长的distkeyValue = 23;

分布键数组的指针将设置如下:

distkey [0] .ptr = (const void *) &distkeyValue;

这个指针的长度将会设置:

distkey [0]。len= sizeof(distkeyValue);

分布键数组必须终止元素。这是必要的,以避免产生额外的参数提供的数量分布键列:

distkey [1] .ptr =零;distkey [1]。len =零;

设置缓冲许可证startTransaction ()自动分配和释放内存:

xfrmbuf =零;xfrmbuflen = 0;
请注意

您还可以指定缓冲区保存必须明确malloc ()free ()电话,但计算适合这个缓冲区的大小不是一件简单的事;如果缓冲但是它的长度太短,startTransaction()调用会失败。然而,如果你选择指定缓冲区,1 MB通常是足够的大小。

现在,当你开始交易时,您可以直接访问节点包含所需的信息。

另一个distribution-aware版本的这个方法可以让您指定一个表和分区(使用分区ID)的提示选择事务协调员,和定义如下所示:

NdbTransaction表* * startTransaction (const NdbDictionary::,Uint32partitionId)

如果集群有相同数量的数据节点,因为它有片段副本,指定事务协调员收益没有改善性能,因为每个数据节点包含整个数据库。然而,数据节点的数量大于片段复制的数量(例如,NoOfReplicas等于2设置在一个集群中有四个数据节点),您应该看到一个显著改善性能通过使用distribution-aware版本的这个方法。

仍然可以使用这种方法,不指定事务协调员。在这两种情况下,您必须显式地关闭交易,是否调用startTransaction ()是成功的。