本节提供有关 Event
类的信息。
- 父类
- 子类
无
- 描述
此类表示 NDB Cluster 中的数据库事件。
- 方法
-
下表列出了
Event
类 的公共方法,以及每个方法的用途或作用表 2.14 Event 类方法及其描述
名称 描述 Event()
类构造函数 ~Event()
析构函数 addEventColumn()
添加应检测事件的列 addEventColumns()
添加应检测事件的多个列 addTableEvent()
添加应检测的事件类型 getDurability()
获取事件的持久性 getEventColumn()
获取定义了事件的列 getName()
获取事件的名称 getNoOfEventColumns()
获取定义了事件的列数 getObjectId()
获取事件的对象 ID getObjectStatus()
获取事件的对象状态 getObjectVersion()
获取事件的对象版本 getReport()
获取事件的报告选项 getTable()
获取定义了事件的 Table
对象getTableEvent()
检查是否要检测事件 getTableName()
获取定义了事件的表的名称 mergeEvents()
设置事件的合并标志 setDurability()
设置事件的持久性 setName()
设置事件的名称 setReport()
设置事件的报告选项 setTable()
设置定义了事件的 Table
对象改进的事件 API (NDB 7.4 及更高版本)。 NDB 7.4 引入了一个基于纪元的事件 API,它取代了早期的基于 GCI 的模型。新版本的 API 还简化了错误检测和处理。这些更改在 NDB API 中通过为
Ndb
和NdbEventOperation
实现了许多新方法,弃用这两个类中的其他一些方法,以及向TableEvent
添加新的类型值而实现。一些新方法直接替换或替代已弃用的方法,但并非所有已弃用的方法都映射到新的方法,其中一些是全新的。旧的(已弃用的)方法显示在下表的第 1 列,新的方法显示在第 2 列;与新方法对应的旧方法显示在同一行。
表 2.15 NDB API 中已弃用和新的事件 API 方法,NDB 7.4
使用新 API 处理错误是通过检查从
getEventType2()
返回的值来完成的,不再使用hasError()
和clearError()
方法来处理,这些方法现在已弃用,并在 NDB Cluster 的未来版本中可能会被移除。为了支持此更改,TableEvent
类型的可能范围已通过此处列出的内容进行了扩展TE_EMPTY
: 空纪元TE_INCONSISTENT
: 不一致的纪元;缺少数据或溢出TE_OUT_OF_MEMORY
: 不一致的数据;事件缓冲区内存不足或溢出
这些更改的结果是,在 NDB 7.4 及更高版本中,您可以在检查表事件的类型时检查错误,如下所示
NdbDictionary::Event::TableEvent* error_type = 0; NdbEventOperation* pOp = nextEvent2(); if (pOp->isErrorEpoch(error_type) { switch (error_type) { case TE_INCONSISTENT : // Handle error/inconsistent epoch... break; case TE_OUT_OF_MEMORY : // Handle error/inconsistent data... break; // ... } }
有关更多信息,请参阅之前表格中显示的
Ndb
和NdbEventOperation
方法的详细说明,以及 Event::TableEvent。 - 类型
-
这些是
Event
类 的公共类型表 2.16 Event 类类型及其描述
名称 描述 TableEvent()
表示表事件的类型 EventDurability()
指定事件的范围、可访问性和生存期 EventReport()
指定表事件的报告选项
- 描述
-
此方法用于添加应检测事件的列。可以使用列的 ID 或名称来标识该列。
您必须先调用
Dictionary::createEvent()
,然后才会检测到任何错误。请参阅 Dictionary::createEvent()。如果您知道几个列的名称,则可以使用
addEventColumns()
在一次操作中启用对所有列的事件检测。请参阅 Event::addEventColumns()。 - 签名
-
此方法可以通过以下两种方式之一调用
-
使用列 ID 标识事件
void addEventColumn ( unsigned attrId )
-
按名称标识列
void addEventColumn ( const char* columnName )
-
- 参数
-
此方法接受一个参数,该参数可以是以下任一参数
列 ID (
attrId
),它应该是一个大于或等于0
的整数,并且小于getNoOfEventColumns()
返回的值。列的
name
(作为常量字符指针)。
- 返回值
无.
- 描述
-
此方法用于在一次操作中启用对几个列的事件检测。您必须使用列的名称。
与
addEventColumn()
相似,必须先调用Dictionary::createEvent()
,才能检测到任何错误。请参阅 Dictionary::createEvent()。 - 签名
void addEventColumns ( int n, const char** columnNames )
- 参数
-
此方法需要以下两个参数
列数
n
(整数)。列名称
columnNames
— 此参数必须以指向字符指针的形式传递。
- 返回值
无.
- 描述
-
The
Event
构造函数使用给定的名称创建一个新实例,并可选择将其与一个表关联。请注意,NDB API 不会跟踪分配的事件对象,这意味着用户必须在不再使用
Event
后显式地删除它。 - 签名
-
可以使用两种方法调用此方法,第一种方法仅使用名称,如下所示
Event ( const char* name )
或者,可以使用事件名称和关联的表,如下所示
Event ( const char* name, const NdbDictionary::Table& table )
- 参数
至少需要一个事件的
name
(作为常量字符指针)。可选地,事件还可以与一个表关联;当存在此参数时,它是一个指向Table
对象的引用(请参阅 第 2.3.27 节,“表类”)。- 返回值
一个新的
Event
实例。
析构函数。 此类的析构函数作为虚方法提供,它不接受任何参数,其返回类型为 void
。
本节提供有关 EventDurability
的信息,它是 Event
类定义的类型。
- 描述
此类型的值用于描述事件的生命周期或持久性及其范围。
- 枚举值
-
下表显示了可能的值及其描述
表 2.17 Event::EventDurability 数据类型的值和描述
名称 描述 ED_UNDEFINED
事件未定义或类型不受支持。 ED_SESSION
此事件仅在当前会话期间持续存在,并且仅对当前应用程序可用。在应用程序断开连接或集群重新启动后,它将被删除。 重要值
ED_SESSION
预留供将来使用,目前在任何 NDB Cluster 版本中都不支持。ED_TEMPORARY
任何应用程序都可以使用此事件,但在集群重新启动后,它将被删除。 重要值
ED_TEMPORARY
预留供将来使用,目前在任何 NDB Cluster 版本中都不支持。ED_PERMANENT
任何应用程序都可以使用此事件,它将持续存在,直到应用程序将其删除(即使在集群重新启动后也是如此)。 重要值
ED_PERMANENT
预留供将来使用,目前在任何 NDB Cluster 版本中都不支持。
本节提供有关 EventReport
的信息,它是 Event
类定义的类型。
- 描述
此类型的值用于指定表事件的报告选项。
- 枚举值
-
下表显示了可能的值及其描述
表 2.18 Event::EventReport 类型的值和描述
名称 描述 ER_UPDATED
报告更新事件 ER_ALL
报告所有事件,除了不会导致对 blob 列的内联部分进行任何更新的事件之外 ER_SUBSCRIBE
报告订阅事件 ER_DDL
报告 DDL 事件(请参阅 Event::setReport(),了解更多信息)
- 描述
此方法获取事件的生命周期和范围(即其
EventDurability
)。- 签名
EventDurability getDurability ( void ) const
- 参数
无.
- 返回值
一个
EventDurability
值。
- 描述
此方法用于从定义了事件的列中获取特定列。
- 签名
const Column* getEventColumn ( unsigned no ) const
- 参数
列号 (
no
),通过使用getNoOfColumns()
获取(请参阅 Event::getNoOfEventColumns())。- 返回值
指向与
no
相对应的Column
的指针。
- 描述
此方法获取事件的对象状态。
- 签名
virtual Object::Status getObjectStatus ( void ) const
- 参数
无.
- 返回值
事件的对象状态。有关可能的值,请参阅 Object::Status。
- 描述
此方法获取事件的对象版本(请参阅 NDB 架构对象版本)。
- 签名
virtual int getObjectVersion ( void ) const
- 参数
无.
- 返回值
事件的对象版本,作为整数。
- 描述
此方法用于获取对该事件生效的报告选项。
- 签名
EventReport getReport ( void ) const
- 参数
无.
- 返回值
在 Event::EventReport 中指定的报告选项之一。
- 描述
此方法用于查找与事件关联的表。它返回指向相应
Table
对象的引用。您还可以使用getTableName()
直接获取表的名称。- 签名
const NdbDictionary::Table* getTable ( void ) const
- 参数
无.
- 返回值
与事件关联的表(如果有)作为指向
Table
对象的指针;否则,此方法将返回NULL
。(请参阅 第 2.3.27 节,“表类”。)
- 描述
此方法用于检查是否将检测到给定的表事件。
- 签名
bool getTableEvent ( const TableEvent te ) const
- 参数
此方法接受一个参数,即表事件的类型,即
TableEvent
值。- 返回值
如果将检测到
TableEvent
类型为te
的事件,则此方法返回true
。否则,返回值为false
。
- 描述
此方法获取与事件关联的表的名称,可以作为
getTable()
的便捷替代方法。(请参阅 Event::getTable()。)- 签名
const char* getTableName ( void ) const
- 参数
无.
- 返回值
与该事件关联的表的名称,作为字符指针。
- 描述
-
此方法用于设置 合并事件标志,该标志默认情况下为
false
。将其设置为true
意味着事件将按如下方式合并对于与该事件关联的给定
NdbEventOperation
,在同一全局检查点索引(GCI)内具有相同主键的事件将合并为单个事件。将为每个 blob 属性创建一个 blob 表事件,并且 blob 事件将作为主表事件的一部分进行处理。
-
blob 部分事件的 blob 前/后数据可以通过
NdbBlob
方法以单个值的形式读取。此标志不会被
NdbEventOperation
继承,必须在NdbEventOperation
上显式地设置它。
- 签名
void mergeEvents ( bool flag )
- 参数
一个布尔
flag
值。- 返回值
无.
- 描述
此方法设置事件的持久性,即其生命周期和范围。
- 签名
void setDurability(EventDurability ed)
- 参数
此方法需要一个
EventDurability
值作为参数。- 返回值
无.
- 描述
此方法用于设置事件的报告选项。可能的值可以在 Event::EventReport 中找到。
- 报告 DDL 事件
-
您必须使用
EventReport
值ER_DDL
(在同一 NDB Cluster 版本中添加)调用setReport()
。例如,要启用对名为
myEvent
的Event
对象的 DDL 事件报告,您必须按如下所示调用此方法myEvent.setReport(NdbDictionary::Event::ER_DDL);
- 签名
void setReport ( EventReport er )
- 参数
一个
EventReport
选项值。- 返回值
无.
- 描述
-
此方法用于设置事件的名称。名称在从当前应用程序可见的所有事件中必须是唯一的(请参阅 Event::getDurability())。
您还可以首次创建事件时设置事件的名称。请参阅 Event 构造函数。
- 签名
void setName ( const char* name )
- 参数
要赋予事件的
name
(作为常量字符指针)。- 返回值
无.
- 描述
-
此方法定义要检测事件的表。
默认情况下,事件检测在表中的所有列上进行。使用
addEventColumn()
覆盖此行为。有关详细信息,请参阅 Event::addEventColumn()。 - 签名
-
void setTable ( const NdbDictionary::Table& table )
您还可以使用此方法中的指针,如下所示
void setTable ( const NdbDictionary::Table*; table )
当这样使用时,此版本的
setTable()
将在表指针为NULL
时返回 -1。 - 参数
此方法需要一个参数,即要检测事件的表的引用或指针(请参阅 第 2.3.27 节,“表类”)。
- 返回值
如果使用了空表指针,则为
-1
,否则为 null。
本节介绍 TableEvent
,它是 Event
类定义的类型。
- 描述
TableEvent
用于对可能与 NDB API 中的表关联的事件类型进行分类。- 枚举值
-
下表显示了可能的值及其描述
表 2.19 Event::TableEvent 类型的值和描述
名称 描述 TE_INSERT
表上的插入事件 TE_DELETE
表上的删除事件 TE_UPDATE
表上的更新事件 TE_DROP
在删除表时发生 TE_ALTER
在更改表定义时发生 TE_CREATE
在创建表时发生 TE_GCP_COMPLETE
在完成全局检查点时发生 TE_CLUSTER_FAILURE
在集群故障时发生 TE_STOP
在停止事件操作时发生 TE_NODE_FAILURE
当集群节点故障时发生 TE_SUBSCRIBE
当集群节点订阅事件时发生 TE_UNSUBSCRIBE
当集群节点取消订阅事件时发生 TE_EMPTY
从数据节点接收到的空纪元 TE_INCONSISTENT
数据节点丢失数据或缓冲区溢出 TE_OUT_OF_MEMORY
事件缓冲区溢出 TE_ALL
当表上发生任何事件时发生(接收特定事件时不相关) TE_EMPTY
、TE_INCONSISTENT
和TE_OUT_OF_MEMORY
在 NDB 7.4 中添加。