本节提供有关Event
该类的信息。
- 家长班
- 儿童班
没有任何
- 描述
此类表示 NDB Cluster 中的数据库事件。
- 方法
-
下表列出了
Event
该类的公共方法以及每个方法的用途或用途:表 2.13 事件类方法及说明
姓名 描述 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
.一些新方法直接替换或替代已弃用的方法,但并非所有已弃用的方法都映射到新方法,其中一些是全新的。下表第一列显示了旧的(已弃用的)方法,第二列显示了新方法;新方法对应的旧方法显示在同一行中。
表 2.14 NDB API,NDB 7.4 中弃用的和新的事件 API 方法
使用新 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.15 事件类类型及说明
姓名 描述 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
——这必须作为指向字符指针的指针传递。
- 返回值
没有。
- 描述
-
构造函数创建一个具有给定名称的
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.16 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.17 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())获得。- 返回值
指向
Column
对应的指针no
。
- 描述
此方法获取事件的对象状态。
- 签名
virtual Object::Status getObjectStatus ( void ) const
- 参数
没有。
- 返回值
事件的对象状态。有关可能的值,请参阅 Object::Status。
- 描述
此方法获取事件的对象版本(请参阅 NDB Schema Object Versions)。
- 签名
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
值。- 返回值
如果将检测到类型
true
的事件,则 此方法返回。否则,返回值为。TableEvent
te
false
- 描述
此方法获取与事件关联的表的名称,并且可以作为 的方便替代方法
getTable()
。(请参阅 事件::getTable()。)- 签名
const char* getTableName ( void ) const
- 参数
没有。
- 返回值
与此事件关联的表的名称,作为字符指针。
- 描述
-
该方法用于设置 合并事件标志,
false
默认情况下。将其设置为true
意味着事件合并如下:对于
NdbEventOperation
与此事件关联的给定,同一全局检查点索引 (GCI) 中同一主键上的事件将合并为一个事件。为每个 blob 属性创建一个 blob 表事件,并将 blob 事件作为主表事件的一部分进行处理。
-
来自 blob 部分事件的 Blob post/pre 数据可以通过
NdbBlob
方法作为单个值读取。此标志未由
NdbEventOperation
, 继承,必须NdbEventOperation
显式设置为 on。
- 签名
void mergeEvents ( bool flag )
- 参数
一个布尔
flag
值。- 返回值
没有。
- 描述
此方法设置事件的持久性,即它的生命周期和范围。
- 签名
void setDurability(EventDurability ed)
- 参数
此方法需要单个
EventDurability
值作为参数。- 返回值
没有。
- 描述
此方法用于为事件设置报告选项。可能的选项值可以在 Event::EventReport中找到。
- DDL事件上报
-
您必须
setReport()
使用该EventReport
值 进行调用ER_DDL
(在相同的 NDB Cluster 版本中添加)。例如,要在
Event
名为 的对象 上启用 DDL 事件报告myEvent
,您必须调用此方法,如下所示:myEvent.setReport(NdbDictionary::Event::ER_DDL);
- 签名
void setReport ( EventReport er )
- 参数
期权
EventReport
价值。- 返回值
没有。
- 描述
-
此方法用于设置事件的名称。该名称在当前应用程序可见的所有事件中必须是唯一的(请参阅Event::getDurability())。
您还可以在首次创建事件时设置事件名称。请参阅事件构造函数。
- 签名
void setName ( const char* name )
- 参数
将
name
被赋予事件(作为常量字符指针)。- 返回值
没有。
- 描述
-
此方法定义了一个表,在该表上要检测事件。
默认情况下,事件检测发生在表中的所有列上。用于
addEventColumn()
覆盖此行为。有关详细信息,请参阅 Event::addEventColumn()。 - 签名
-
void setTable ( const NdbDictionary::Table& table )
NDB 7.3.3 和更高版本的 NDB Cluster 版本支持将指针与此方法一起使用,如下所示:
void setTable ( const NdbDictionary::Table*; table )
如此使用时,
setTable()
如果表指针为 ,则此版本的返回 -1NULL
。(漏洞 #16329082) - 参数
此方法需要一个参数,即对要在其上检测事件的表(请参阅第 2.3.27 节,“表类” )的引用。NDB 7.3.3 及更高版本:可以使用对表的引用或指针。
- 返回值
没有。NDB 7.3.3 及更高版本:-1,如果使用空表指针。
本节描述TableEvent
, 类定义的Event
类型。
- 描述
TableEvent
用于对可能与 NDB API 中的表关联的事件类型进行分类。- 枚举值
-
下表显示了可能的值以及说明:
表 2.18 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 中添加的。