2.3.5 事件类

本节提供有关Event 该类的信息。

事件类概述

家长班

NdbDictionary

儿童班

没有任何

描述

此类表示 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.

一些新方法直接替换或替代已弃用的方法,但并非所有已弃用的方法都映射到新方法,其中一些是全新的。下表第一列显示了旧的(已弃用的)方法,第二列显示了新方法;新方法对应的旧方法显示在同一行中。


使用新 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;

    //  ...
  }
}

有关详细信息,请参阅前面表格中显示的 NdbNdbEventOperation方法以及 Event::TableEvent的详细说明。

类型

这些是Event 该类的公共类型:

表 2.15 事件类类型及说明

姓名 描述
TableEvent() 表示表事件的类型
EventDurability() 指定事件的范围、可访问性和生命周期
EventReport() 指定表事件的报告选项

事件::addEventColumn()

描述

此方法用于添加应在其上检测事件的列。该列可以通过其 ID 或名称来指示。

Dictionary::createEvent() 您必须在检测到任何错误之前 调用 。参见 Dictionary::createEvent()

如果您知道多个列的名称,则可以使用 一次对所有列启用事件检测 addEventColumns()。请参阅 Event::addEventColumns()

签名

可以通过以下任一方式调用此方法:

  • 使用列 ID 识别事件:

    void addEventColumn
        (
          unsigned attrId
        )
  • 按名称识别列:

    void addEventColumn
        (
          const char* columnName
        )
参数

此方法采用单个参数,可以是以下之一:

  • 列 ID ( attrId),应为大于或等于 0且小于 返回值的整数getNoOfEventColumns()

  • 列的name(作为常量字符指针)。

返回值

没有

事件::addEventColumns()

描述

此方法用于同时在多个列上启用事件检测。您必须使用列的名称。

与 一样,您必须 在检测到任何错误之前addEventColumn()调用 。Dictionary::createEvent()参见 Dictionary::createEvent()

签名
void addEventColumns
    (
      int          n,
      const char** columnNames
    )
参数

此方法需要此处列出的两个参数:

  • 列数n(整数)。

  • 列的名称 columnNames——这必须作为指向字符指针的指针传递。

返回值

没有

事件::添加表格事件()

描述

此方法用于添加应检测的事件类型。

签名
void addTableEvent
    (
      const TableEvent te
    )
参数

此方法需要一个 TableEvent值。

返回值

没有

事件构造器

描述

构造函数创建一个具有给定名称的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() )

事件::getDurability()

描述

此方法获取事件的生命周期和范围(即它的 EventDurability)。

签名
EventDurability getDurability
    (
      void
    ) const
参数

没有

返回值

一个EventDurability 值。

事件::getEventColumn()

描述

此方法用于从定义了事件的列中获取特定列。

签名
const Column* getEventColumn
    (
      unsigned no
    ) const
参数

列的编号 ( no),使用getNoOfColumns()(请参阅 Event::getNoOfEventColumns())获得。

返回值

指向Column 对应的指针no

事件::获取名称()

描述

此方法获取事件的名称。

签名
const char* getName
    (
      void
    ) const
参数

没有

返回值

事件的名称,作为字符指针。

事件::getNoOfEventColumns()

描述

此方法获取定义事件的列数。

签名
int getNoOfEventColumns
    (
      void
    ) const
参数

没有

返回值

列数(作为整数),或者 -1在出现错误的情况下。

事件::getObjectStatus()

描述

此方法获取事件的对象状态。

签名
virtual Object::Status getObjectStatus
    (
      void
    ) const
参数

没有

返回值

事件的对象状态。有关可能的值,请参阅 Object::Status

事件::getObjectVersion()

描述

此方法获取事件的对象版本(请参阅 NDB Schema Object Versions)。

签名
virtual int getObjectVersion
    (
      void
    ) const
参数

没有

返回值

事件的对象版本,作为整数。

事件::getObjectId()

描述

此方法检索事件的对象 ID。

签名
virtual int getObjectId
    (
      void
    ) const
参数

没有

返回值

事件的对象 ID,作为整数。

事件::getReport()

描述

此方法用于获取对此事件有效的报告选项。

签名
EventReport getReport
    (
      void
    ) const
参数

没有

返回值

Event::EventReport 中指定的报告选项 之一。

事件::getTable()

描述

此方法用于查找与事件关联的表。它返回对相应 Table对象的引用。您也可以直接使用 获取表的名称 getTableName()

签名
const NdbDictionary::Table* getTable
    (
      void
    ) const
参数

没有

返回值

与事件关联的表(如果有的话)作为指向 Table对象的指针;否则,此方法返回NULL。(参见 第 2.3.27 节,“表类”。)

事件::getTableEvent()

描述

此方法用于检查是否将检测到给定的表事件。

签名
bool getTableEvent
    (
      const TableEvent te
    ) const
参数

此方法采用单个参数,即表事件的类型,即一个 TableEvent值。

返回值

如果将检测到类型 true的事件,则 此方法返回。否则,返回值为。 TableEventtefalse

事件::getTableName()

描述

此方法获取与事件关联的表的名称,并且可以作为 的方便替代方法getTable()。(请参阅 事件::getTable()。)

签名
const char* getTableName
    (
      void
    ) const
参数

没有

返回值

与此事件关联的表的名称,作为字符指针。

事件::mergeEvents()

描述

该方法用于设置 合并事件标志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() 如果表指针为 ,则此版本的返回 -1 NULL。(漏洞 #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 中添加的。