本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
了解 Amazon 中的驅動程式的工作階段管理 QLDB
重要
支援結束通知:現有客戶將能夠使用 Amazon,QLDB直到 2025 年 7 月 31 日終止支援為止。有關更多詳細信息,請參閱將 Amazon QLDB 分類帳遷移到 Amazon Aurora 郵政. SQL
如果您有使用關聯式資料庫管理系統 (RDBMS) 的經驗,您可能熟悉並行連線。QLDB不具有傳統RDBMS連接的相同概念,因為事務與HTTP請求和響應消息一起運行。
在中QLDB,類似的概念是使用中的工作階段。工作階段在概念上與使用者登入類似,它會管理您對總帳之資料交易請求的相關資訊。使用中的工作階段是主動執行交易的工作階段。它也可以是最近完成交易的工作階段,服務預期會立即啟動另一個交易。QLDB每個會話支持一個主動運行的事務。
在中定義每個分類帳的並行作用中階段作業限制Amazon 的配額和限制 QLDB。達到此限制之後,任何嘗試啟動交易的工作階段都會導致 error (LimitExceededException
)。
如需使用QLDB驅動程式在應用程式中設定工作階段集區的最佳實務,請參閱 Amazon QLDB 驅動程式建議配置對 QldbDriver 象中的。
工作階段生
下列QLDB工API作階段作業順序代表工作階QLDB段的典型生命週期:
-
StartSession
-
StartTransaction
-
ExecuteStatement
-
CommitTransaction
-
重複步驟 2—4 以啟動更多交易 (一次一個交易)。
-
EndSession
工作階段過期
QLDB無論工作階段是否正在主動執行交易,都會在總生命週期 13 到 17 分鐘後過期並捨棄工作階段。工作階段可能會因為多種原因而遺失或受損,例如硬體故障、網路故障或應用程式重新啟動。QLDB在工作階段上強制執行最長存留期,以確保用戶端應用程式能夠抵禦工作階段失敗。
QLDB驅動程序中的會話處理
雖然您可以使用 AWS SDK直接與QLDB工作階段互動API,但這會增加複雜性,並要求您計算提交摘要。QLDB使用此提交摘要來確保交易的完整性。我們建議您使用驅動程式API,而不是直接與此互QLDB動。
該驅動程序提供了事務性數據API上方的高級抽象層。它透過管理SendCommandAPI呼叫,簡化在分類帳資料上執行 PartiQL 陳述式的程序。這些API調用需要驅動程序為您處理的幾個參數,包括會話,事務的管理,並在發生錯誤時重試策略。
階段作業集區概觀
在舊版QLDB驅動程式 (例如 Java v1.1.0QldbDriver
和. PooledQldbDriver
顧名思義,PooledQldbDriver
維護跨交易重複使用的工作階段集區。
根據用戶反饋,開發人員更喜歡默認情況下獲得池功能及其優點,而不是使用標準驅動程序。因此,我們移除PooledQldbDriver
並將工作階段集區功能移至。QldbDriver
此變更包含在每個驅動程式的最新版本中 (例如,Java v2.0.0
驅動程式提供三個層級的抽象:
-
驅動程序(池驅動程序實現)-頂級抽象。驅動程式會維護和管理工作階段集區。當您要求驅動程序運行事務時,驅動程序從池中選擇一個會話並使用它來運行事務。如果交易因為工作階段錯誤 (
InvalidSessionException
) 而失敗,則驅動程式會使用另一個工作階段來重試該交易。基本上,驅動程式提供完全受控的工作階段體驗。 -
工作階段 — 低於驅動程式抽象的一個層級。會話包含在池中,驅動程序管理會話的生命週期。如果交易失敗,驅動程式會在使用相同工作階段嘗試指定次數的情況下重試。但是,如果會話遇到 error (
InvalidSessionException
),則在內部QLDB丟棄它。然後,驅動程序負責從池中獲取另一個會話以重試該事務。 -
交易 — 抽象的最低層級。事務包含在會話中,並且會話管理事務的生命週期。工作階段負責在發生錯誤的情況下重試交易。工作階段也可確保它不會洩漏尚未提交或取消的開啟交易。
在每個驅動程序的最新版本中,您只能在抽象的驅動程序級別執行操作。您無法直接控制個別工作階段和交易 (也就是說,沒有可以手動啟動新工API作階段或交易的作業)。
階段作業集區和交易邏輯
每個驅動程式的最新版本不再提供驅動程式物件的非集區實作。依預設,QldbDriver
物件會管理工作階段集區。當您撥打電話來執行交易時,驅動程式會執行下列步驟:
-
驅動程式會檢查是否已達到工作階段集區限制。如果是這樣,驅動程序立即拋出
NoSessionAvailable
異常。否則,它會繼續進行下一個步驟。 -
驅動程式會檢查集區是否有可用的工作階段。
-
如果集區中有工作階段可用,則驅動程式會使用它來執行交易。
-
如果池中沒有可用的會話,驅動程序將創建一個新的會話並使用它來運行事務。
-
-
驅動程序在步驟 2 中獲得會話後,驅動程序調用會話實例上的
execute
操作。 -
在會話的
execute
操作中,驅動程序嘗試通過調用啟動事務startTransaction
。-
如果工作階段無效,
startTransaction
呼叫會失敗,且驅動程式會返回到步驟 1。 -
如果
startTransaction
呼叫成功,驅動程式會繼續進行下一個步驟。
-
-
驅動程序運行您的 lambda 表達式。這個 lambda 表達式可以包含一個或多個運行 PartiQL 語句的調用。lambda 表達式完成運行沒有任何錯誤之後,驅動程序繼續提交交易。
-
交易的提交可以有以下兩種結果之一:
-
提交成功,驅動程序將控制權返回到您的應用程序代碼。
-
由於樂觀的並發控制(OCC)衝突,提交失敗。在此情況下,驅動程式會使用相同的工作階段重試步驟 4-6。您可以在應用程式程式碼中設定重試次數上限。預設限制為
4
。
-
注意
如果在步驟 4 到 6 期間擲回,驅動程式會將工作階段標示為已關閉,並返回步驟 1 以重試交易。InvalidSessionException
如果在步驟 4-6 期間擲回任何其他例外狀況,驅動程式會檢查是否可以重試例外狀況。如果是這樣,它會重試交易,直到指定的重試嘗試次數。如果沒有,它會將異常傳播(冒泡並拋出)到您的應用程序代碼中。
將工作階段傳回集區
如果InvalidSessionException
在使用中交易過程中的任何時間發生,驅動程式不會將工作階段傳回集區。QLDB而是丟棄會話,驅動程序從池中獲取另一個會話。在所有其他情況下,驅動程式會將工作階段傳回至集區。