国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PostgreSQL 14中兩階段提交的邏輯解碼正文

li5236 ? 來源:yzsDBA ? 作者:yzsDBA ? 2022-03-29 15:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Fujitsu OSS團隊和PostgreSQL開源社區合作在PG14中添加了在邏輯復制中對兩階段提交進行解密的功能。下面看看這項功能是什么?

背景

兩階段提交是事務以兩階段進行提交的一種機制。通常在分布式數據庫中用于保證一致性。事務的兩階段是PREPARE階段和COMMIT/ROLLBACK階段。PG中兩階段提交的命令是:

PREPARE TRANSACTION

COMMIT PREPARED

ROLLBACK PREPARED

PG在8.0版本已經支持了兩階段提交,10.0版本支持邏輯復制。但是邏輯復制中一直都不支持兩階段提交。單實例中已經支持了PREPARE TRANSACTION、COMMIT PREPARED和ROLLBACK PREPARED命令,但是當這些命令需要邏輯復制到備機時,他們不再保持原始含義。PREPARE TRANSACTION命令被視為NOP,而根本沒有解碼。COMMIT PREPARED命令被視為COMMIT,ROLLBACK PREPARED命令被視為ABORT。

什么是兩階段提交

兩階段提交是一種原子提交協議,有助于維護分布式數據庫之間的一致性。提供數據庫內原子性的普通提交不足以為跨數據庫的事務提供一致性。為說明這個問題,我們舉一個例子:

1) John在A銀行有300$

2) Mark在B銀行有100$

3) John想給Mark轉100$

事務進行過程中,需要從A銀行提取100$到銀行B。事務結束的時候,應該都有200$.如果在轉賬的過程中,任何時候任何一筆交易失敗,那么賬戶狀態應該恢復到轉賬開始前的狀態。事務可能因各種原因而失敗。如果在事務提交之前發生任何中斷,則該事務會回滾。在我們的示例中,如果John的賬戶中扣除金額時發生中斷,那么中斷口John的賬戶不應該減少。這就是簡單的提交如何保持數據庫內的一致性。

但是我們考慮這樣一種情況,即從John賬戶中扣除100$的事務在一次提交時成功,但向Mark在B銀行的賬戶中添加100$的事務失敗而被回滾。然后此操作結束后,雖然John賬戶已扣款,但Mark將不會收到該金額。100$消失了。在處理分布式事務時,簡單的提交有可能失敗。

分布式事務的分步執行

對于兩階段提交,其中一個數據庫充當分布式事務的協調器。

階段1

一個數據庫開始應用事務,然后做Prepare。它以prepare消息形式發送prepared事務到其它數據庫。第2個數據庫獲取到Prepare消息,然后prepare該事務。Prepare涉及事務中的修改,但不提交。這些臟數據寫到磁盤以持久化。一旦所有數據庫都prepare了事務,并且有關該事務的所有信息都存儲到磁盤上,prepare階段就完成了。

階段2

接下來,仲裁器啟動提交階段。如果第2個數據庫由于某種原因未能準備事務,則仲裁器啟動回滾階段。因此根據prepare是否成功,事務要么提交,要么回滾。在最后提交階段發生中斷是可以恢復的,因為所需的prepare事務已經寫入磁盤并可以重新應用。

兩階段提交與單實例數據庫并不相關,但若數據復制跨多個數據庫實例時,就相關了。

邏輯復制中支持兩階段提交非常重要。

功能概述

在PG14版本前,邏輯復制事務僅在事務提交后才被解碼和復制。這是為了避免復制事務可能最終被中止。

pYYBAGJCuz2AAk9VAADt58QBQP8805.jpg

提交時解碼事務

PG14的邏輯復制支持PREPARE TRANSACTION、COMMIT PREPARED和ROOLBACK PREPARED命令。當PREPARE TRANSACTION命令解碼時,事務被解碼并復制。PREPARE TRANSACTION就像WAL SENDER中COMMIT一樣啟動事務重放和解碼。

poYBAGJCuz2AXylOAAD6e9PW35o258.jpg

prepare時解碼事務

我們還定義了新的插件回調,允許邏輯解碼插件支持兩階段提交。

回調函數

描述

filter_prepare_cb

允許插件根據PREPARE TRANSACTION命令中使用的GID過濾Prepare時不需要解碼的事務

begin_prepare_cb

Prepare事務的開始

prepare_cb

當PREPARE TRANSACTION命令被解碼時調用

commit_prepared_cb

當COMMIT PREPARED命令解碼時調用

rollback_prepared_cb

當ROLLBACK PREPARED命令解碼時調用

插件修改

test_decoding

該插件是一個邏輯解碼輸出插件,作為一個示例幫助用戶開發自己的邏輯解碼插件。test_decoding通過邏輯解碼機制接收WAL,并將其解碼為所執行操作的文本表示。

它被修改為能夠在prepare時使用新的兩階段回調函數和解碼事務

APIs的修改

pg_create_logical_replication_slot()

該API添加了新的選項指定slot是否支持兩階段提交。輸出插件可以使用帶有兩階段選項的復制槽以支持兩階段提交。

pg_create_logical_replication_slot(slot_name name, plugin name [, temporary boolean, two_phase boolean ] )

案例

看下怎么檢測兩階段提交的事務解碼輸出:

1) 創建一個復制槽

使用test_decoding作為輸出插件,傳入true,這樣slot支持兩階段提交解碼。

postgres=# SELECT * FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding', false, true);

slot_name | lsn

-----------------+-----------

regression_slot | 0/16B1970

(1 row)

2) 創建一個表

postgres=# CREATE TABLE data(id serial primary key, data text);

CREATE TABLE

3) 檢測prepare事務和commit事務的解碼輸出內容

postgres=# BEGIN;

postgres=*# INSERT INTO data(data) VALUES('5');

postgres=*# PREPARE TRANSACTION 'test_prepared1';

postgres=# SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL);

lsn | xid | data

-----------+-----+-----------------

0/1689DC0 | 529 | BEGIN 529

0/1689DC0 | 529 | table public.data: INSERT: id[integer]:3 data[text]:'5'

0/1689FC0 | 529 | PREPARE TRANSACTION 'test_prepared1', txid 529

(3 rows)

postgres=# COMMIT PREPARED 'test_prepared1';

postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NULL);

lsn | xid | data

-----------+-----+------------------

0/168A060 | 529 | COMMIT PREPARED 'test_prepared1', txid 529

(4 rows)

postgres=# select * from data;

id | data

----+------

1 | 5

(1 row)

未來

PG14對此功能的更改,有了解碼器端的基礎架構,允許在prepare時解碼兩階段提交。我們還修改了test_decoding插件以利用此基礎架構。

下一步就是把對兩階段的支持實現到PG內部最大的邏輯解碼插件--pgoutput插件中。這個插件支持邏輯復制的PUBLISHER/SUBSCRIBER 模式。他是邏輯復制中使用最廣泛的插件。富士通OSS團隊正在和開源社區合作,以在PG15中添加此功能。

對于分布式數據庫中的兩階段事務,PG也需要支持:備機通知主機PREPARE失敗了,發起回滾。這種反饋機制在PG中不支持,是未來改進的方向之一。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 解碼器
    +關注

    關注

    9

    文章

    1219

    瀏覽量

    43426
  • 數據庫
    +關注

    關注

    7

    文章

    4020

    瀏覽量

    68353
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    TLV320AIC14:高性能語音編解碼器的深度剖析與應用指南

    器,廣泛應用于無線配件、免提車載套件、VOIP、電纜調制解調器和語音處理等領域。今天,我們就來深入探討一下這款編解碼器的特性、功能以及實際應用的注意事項。 文件下載: tlv320aic14.pdf 一、產品概述 TLV320
    的頭像 發表于 02-04 11:25 ?381次閱讀

    探索SN54AHCT138與SN74AHCT138:高性能3 - 8線解碼器的深度剖析

    探索SN54AHCT138與SN74AHCT138:高性能3 - 8線解碼器的深度剖析 在電子設計領域,解碼器作為關鍵的邏輯元件,廣泛應用于各類系統。今天,我們聚焦于德州儀器(TI
    的頭像 發表于 01-16 17:40 ?1658次閱讀

    高速CMOS邏輯3 - 8線解碼器/解復用器:CDx4HC(T)138和'238的技術解析

    高速CMOS邏輯3 - 8線解碼器/解復用器:CDx4HC(T)138和'238的技術解析 在電子設計領域,解碼器和解復用器是非常重要的邏輯器件,它們能夠實現地址
    的頭像 發表于 01-16 15:30 ?820次閱讀

    CDx4HC(T)138和CDx4HC(T)238:高速CMOS邏輯3 - 8線解碼器的深度解析

    CDx4HC(T)138和CDx4HC(T)238:高速CMOS邏輯3 - 8線解碼器的深度解析 在電子設計的世界里,解碼器是一種至關重要的邏輯器件,它們在地址
    的頭像 發表于 01-16 15:30 ?399次閱讀

    CDx4HC(T)138/238 高速CMOS邏輯3 - 8線解碼器/解復用器深度解析

    CDx4HC(T)138/238 高速CMOS邏輯3 - 8線解碼器/解復用器深度解析 在電子設計領域,解碼器和解復用器是非常重要的邏輯器件,它們能夠實現地址
    的頭像 發表于 01-16 15:00 ?304次閱讀

    發布元服務提交審核

    完成所有應用信息和版本信息的配置后,可將元服務提交至華為方進行發布審核。 登錄AppGallery Connect,點擊“APP與元服務”。 選擇要發布的元服務。 左側導航選擇“應用上架 &
    發表于 12-04 14:23

    流水線基本結構

    階段: 取指 + 解碼(Fetch + Decode):同時完成指令讀取和初步解碼。 執行(Execute):完成運算或數據操作。 特點: 減少流水線層級,簡化控制
    發表于 11-21 07:35

    小紅書獲取筆記正文和點贊數的API接口

    ? ?小紅書(RED)是一個流行的社交平臺,用戶分享筆記(類似博客文章)。開發者和數據分析師常需要通過API接口獲取筆記正文和點贊數,用于內容分析或應用開發。本文將詳細介紹如何實現這一功能,包括
    的頭像 發表于 11-18 16:27 ?1112次閱讀
    小紅書獲取筆記<b class='flag-5'>正文</b>和點贊數的API接口

    分享一個嵌入式學習階段規劃

    )項目進階階段(約 20 天) 核心目標:積累實戰項目,沉淀簡歷成果基礎工具:可選學 Git(代碼提交、沖突解決)核心項目(1)STM32綜合項目:做顯示屏交互、ESP8266模組應用,搭配小程序開發
    發表于 09-12 15:11

    0.1-2.7 GHz SP4T 開關,帶集成邏輯解碼器 skyworksinc

    電子發燒友網為你提供()0.1-2.7 GHz SP4T 開關,帶集成邏輯解碼器相關產品參數、數據手冊,更有0.1-2.7 GHz SP4T 開關,帶集成邏輯解碼器的引腳圖、接線圖、封
    發表于 08-08 18:32
    0.1-2.7 GHz SP4T 開關,帶集成<b class='flag-5'>邏輯</b><b class='flag-5'>解碼</b>器 skyworksinc

    LOTO示波器自定義解碼功能—CANFD解碼

    的CANFD解碼功能進行講解。 首先進行設備連接,使用USB轉CAN/CANFD模塊與一塊開發板進行通信,之后使用BNC公轉雙夾子測試線接入模塊間的通信線,紅色夾子接入CANH,黑色接入CA
    的頭像 發表于 07-11 10:34 ?1060次閱讀
    LOTO示波器自定義<b class='flag-5'>解碼</b>功能—CANFD<b class='flag-5'>解碼</b>

    CMOS的邏輯門如何應用在電路

    CMOS的邏輯門如何應用在電路 前言 在如今的電子電路,CMOS邏輯門有著接近零靜態功耗和超高集成度的特點,是數字電路不可或缺的存在。其獨特之處在于PMOS與NMOS晶體管的互補設
    的頭像 發表于 06-19 16:07 ?1768次閱讀
    CMOS的<b class='flag-5'>邏輯</b>門如何應用在電路<b class='flag-5'>中</b>

    Transformer架構解碼器的工作流程

    解碼器的作用主要是制作文本序列。與編碼器類似,解碼器也配備了一組類似的子層。它具有個Multi-Head attention層,一個點前饋層,并且在每個子層之后都包含剩余連接和層歸一化。
    的頭像 發表于 06-10 14:32 ?1220次閱讀
    Transformer架構<b class='flag-5'>中</b><b class='flag-5'>解碼</b>器的工作流程

    下一代物聯網:芯科科技和Arduino借助邊緣AI和ML簡化Matter設計和應用

    Silicon Labs(芯科科技)和Arduino宣布建立合作伙伴關系,旨在通過Arduino Nano Matter開發板(基于芯科科技的MGM240系列多協議無線模塊)的兩階段合作來簡化Matter協議的設計和應用
    的頭像 發表于 05-19 11:15 ?787次閱讀
    下一代物聯網:芯科科技和Arduino借助邊緣AI和ML簡化Matter設計和應用

    NVMe協議分析之提交隊列

    NVMe指令提交與完成機制是NVMe協議的核心,該機制制定了NVMe指令的交互流程和處理步驟。
    的頭像 發表于 05-15 23:25 ?684次閱讀
    NVMe協議分析之<b class='flag-5'>提交</b>隊列