本節提供有關 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 引入以 epoch 為基礎的事件 API,取代先前的以 GCI 為基礎的模型。新版本的 API 也簡化了錯誤偵測與處理。這些變更藉由為
Ndb
和NdbEventOperation
實作一些新方法、棄用這兩個類別的數個其他方法,以及將新的類型值新增至TableEvent
來實作在 NDB API 中。某些新方法直接取代或替代已棄用的方法,但並非所有已棄用的方法都會對應至新的方法,其中有些是完全新的。舊 (已棄用) 方法顯示在下表的第一欄中,而新方法則顯示在第二欄中;對應至新方法的舊方法顯示在同一列中。
表 2.15 NDB API 中已棄用與新的事件 API 方法,NDB 7.4
使用新 API 的錯誤處理,藉由檢查從
getEventType2()
傳回的值來完成,而且不再使用方法hasError()
和clearError()
來處理,這些方法現在已棄用,而且可能會在 NDB Cluster 的未來版本中移除。為了支援此變更,TableEvent
類型的可能範圍已由此處列出的類型擴充TE_EMPTY
:空的 epochTE_INCONSISTENT
:不一致的 epoch;遺失資料或溢位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()
傳回的值。欄位的
名稱
(以常數字元指標表示)。
- 回傳值
無.
- 說明
-
此方法用於同時在數個欄位上啟用事件偵測。您必須使用欄位的名稱。
與
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 )
- 參數
至少需要事件的
名稱
(以常數字元指標表示)。您可以選擇性地將事件與資料表相關聯;此引數 (如果存在) 是對Table
物件的參考 (請參閱 第 2.3.27 節,「Table 類別」)。- 回傳值
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
- 參數
無.
- 回傳值
- 說明
此方法用於從已定義事件的欄位中取得特定的欄位。
- 簽名
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 節,「Table 類別」。)
- 說明
此方法用於檢查是否會偵測到指定的資料表事件。
- 簽名
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 事件將作為主要資料表事件的一部分進行處理。
-
可以透過
NdbBlob
方法以單一值形式讀取來自 blob 部分事件的 blob 後置/前置資料。此旗標不會由
NdbEventOperation
繼承,必須在NdbEventOperation
上明確設定。
- 簽名
void mergeEvents ( bool 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 )
- 參數
要提供給事件的
名稱
(以常數字元指標表示)。- 回傳值
無.
- 說明
-
此方法會定義要在其上偵測事件的資料表。
預設情況下,事件偵測會發生在表格中的所有欄位。使用
addEventColumn()
來覆寫此行為。詳細資訊請參閱 Event::addEventColumn()。 - 簽名
-
void setTable ( const NdbDictionary::Table& table )
您也可以在此方法中使用指標,如下所示
void setTable ( const NdbDictionary::Table*; table )
當這樣使用時,如果表格指標為
NULL
,此版本的setTable()
會回傳 -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
從資料節點接收到的空 epoch TE_INCONSISTENT
資料節點中遺失資料或緩衝區溢位 TE_OUT_OF_MEMORY
事件緩衝區溢位 TE_ALL
當表格上發生任何事件時發生(當接收到特定事件時不相關) TE_EMPTY
、TE_INCONSISTENT
和TE_OUT_OF_MEMORY
是在 NDB 7.4 中新增的。