chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

掃碼添加小助手

加入工程師交流群

Fujitsu OSS團(tuán)隊(duì)和PostgreSQL開(kāi)源社區(qū)合作在PG14中添加了在邏輯復(fù)制中對(duì)兩階段提交進(jìn)行解密的功能。下面看看這項(xiàng)功能是什么?

背景

兩階段提交是事務(wù)以?xún)呻A段進(jìn)行提交的一種機(jī)制。通常在分布式數(shù)據(jù)庫(kù)中用于保證一致性。事務(wù)的兩階段是PREPARE階段和COMMIT/ROLLBACK階段。PG中兩階段提交的命令是:

PREPARE TRANSACTION

COMMIT PREPARED

ROLLBACK PREPARED

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

什么是兩階段提交

兩階段提交是一種原子提交協(xié)議,有助于維護(hù)分布式數(shù)據(jù)庫(kù)之間的一致性。提供數(shù)據(jù)庫(kù)內(nèi)原子性的普通提交不足以為跨數(shù)據(jù)庫(kù)的事務(wù)提供一致性。為說(shuō)明這個(gè)問(wèn)題,我們舉一個(gè)例子:

1) John在A銀行有300$

2) Mark在B銀行有100$

3) John想給Mark轉(zhuǎn)100$

事務(wù)進(jìn)行過(guò)程中,需要從A銀行提取100$到銀行B。事務(wù)結(jié)束的時(shí)候,應(yīng)該都有200$.如果在轉(zhuǎn)賬的過(guò)程中,任何時(shí)候任何一筆交易失敗,那么賬戶(hù)狀態(tài)應(yīng)該恢復(fù)到轉(zhuǎn)賬開(kāi)始前的狀態(tài)。事務(wù)可能因各種原因而失敗。如果在事務(wù)提交之前發(fā)生任何中斷,則該事務(wù)會(huì)回滾。在我們的示例中,如果John的賬戶(hù)中扣除金額時(shí)發(fā)生中斷,那么中斷口John的賬戶(hù)不應(yīng)該減少。這就是簡(jiǎn)單的提交如何保持?jǐn)?shù)據(jù)庫(kù)內(nèi)的一致性。

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

分布式事務(wù)的分步執(zhí)行

對(duì)于兩階段提交,其中一個(gè)數(shù)據(jù)庫(kù)充當(dāng)分布式事務(wù)的協(xié)調(diào)器。

階段1

一個(gè)數(shù)據(jù)庫(kù)開(kāi)始應(yīng)用事務(wù),然后做Prepare。它以prepare消息形式發(fā)送prepared事務(wù)到其它數(shù)據(jù)庫(kù)。第2個(gè)數(shù)據(jù)庫(kù)獲取到Prepare消息,然后prepare該事務(wù)。Prepare涉及事務(wù)中的修改,但不提交。這些臟數(shù)據(jù)寫(xiě)到磁盤(pán)以持久化。一旦所有數(shù)據(jù)庫(kù)都prepare了事務(wù),并且有關(guān)該事務(wù)的所有信息都存儲(chǔ)到磁盤(pán)上,prepare階段就完成了。

階段2

接下來(lái),仲裁器啟動(dòng)提交階段。如果第2個(gè)數(shù)據(jù)庫(kù)由于某種原因未能準(zhǔn)備事務(wù),則仲裁器啟動(dòng)回滾階段。因此根據(jù)prepare是否成功,事務(wù)要么提交,要么回滾。在最后提交階段發(fā)生中斷是可以恢復(fù)的,因?yàn)樗璧膒repare事務(wù)已經(jīng)寫(xiě)入磁盤(pán)并可以重新應(yīng)用。

兩階段提交與單實(shí)例數(shù)據(jù)庫(kù)并不相關(guān),但若數(shù)據(jù)復(fù)制跨多個(gè)數(shù)據(jù)庫(kù)實(shí)例時(shí),就相關(guān)了。

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

功能概述

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

pYYBAGJCuz2AAk9VAADt58QBQP8805.jpg

提交時(shí)解碼事務(wù)

PG14的邏輯復(fù)制支持PREPARE TRANSACTION、COMMIT PREPARED和ROOLBACK PREPARED命令。當(dāng)PREPARE TRANSACTION命令解碼時(shí),事務(wù)被解碼并復(fù)制。PREPARE TRANSACTION就像WAL SENDER中COMMIT一樣啟動(dòng)事務(wù)重放和解碼。

poYBAGJCuz2AXylOAAD6e9PW35o258.jpg

prepare時(shí)解碼事務(wù)

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

回調(diào)函數(shù)

描述

filter_prepare_cb

允許插件根據(jù)PREPARE TRANSACTION命令中使用的GID過(guò)濾Prepare時(shí)不需要解碼的事務(wù)

begin_prepare_cb

Prepare事務(wù)的開(kāi)始

prepare_cb

當(dāng)PREPARE TRANSACTION命令被解碼時(shí)調(diào)用

commit_prepared_cb

當(dāng)COMMIT PREPARED命令解碼時(shí)調(diào)用

rollback_prepared_cb

當(dāng)ROLLBACK PREPARED命令解碼時(shí)調(diào)用

插件修改

test_decoding

該插件是一個(gè)邏輯解碼輸出插件,作為一個(gè)示例幫助用戶(hù)開(kāi)發(fā)自己的邏輯解碼插件。test_decoding通過(guò)邏輯解碼機(jī)制接收WAL,并將其解碼為所執(zhí)行操作的文本表示。

它被修改為能夠在prepare時(shí)使用新的兩階段回調(diào)函數(shù)和解碼事務(wù)

APIs的修改

pg_create_logical_replication_slot()

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

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

案例

看下怎么檢測(cè)兩階段提交的事務(wù)解碼輸出:

1) 創(chuàng)建一個(gè)復(fù)制槽

使用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) 創(chuàng)建一個(gè)表

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

CREATE TABLE

3) 檢測(cè)prepare事務(wù)和commit事務(wù)的解碼輸出內(nèi)容

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)

未來(lái)

PG14對(duì)此功能的更改,有了解碼器端的基礎(chǔ)架構(gòu),允許在prepare時(shí)解碼兩階段提交。我們還修改了test_decoding插件以利用此基礎(chǔ)架構(gòu)。

下一步就是把對(duì)兩階段的支持實(shí)現(xiàn)到PG內(nèi)部最大的邏輯解碼插件--pgoutput插件中。這個(gè)插件支持邏輯復(fù)制的PUBLISHER/SUBSCRIBER 模式。他是邏輯復(fù)制中使用最廣泛的插件。富士通OSS團(tuán)隊(duì)正在和開(kāi)源社區(qū)合作,以在PG15中添加此功能。

對(duì)于分布式數(shù)據(jù)庫(kù)中的兩階段事務(wù),PG也需要支持:備機(jī)通知主機(jī)PREPARE失敗了,發(fā)起回滾。這種反饋機(jī)制在PG中不支持,是未來(lái)改進(jìn)的方向之一。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 解碼器
    +關(guān)注

    關(guān)注

    9

    文章

    1218

    瀏覽量

    43257
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    4013

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    TLV320AIC14:高性能語(yǔ)音編解碼器的深度剖析與應(yīng)用指南

    器,廣泛應(yīng)用于無(wú)線(xiàn)配件、免提車(chē)載套件、VOIP、電纜調(diào)制解調(diào)器和語(yǔ)音處理等領(lǐng)域。今天,我們就來(lái)深入探討一下這款編解碼器的特性、功能以及實(shí)際應(yīng)用的注意事項(xiàng)。 文件下載: tlv320aic14.pdf 一、產(chǎn)品概述 TLV320
    的頭像 發(fā)表于 02-04 11:25 ?320次閱讀

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

    探索SN54AHCT138與SN74AHCT138:高性能3 - 8線(xiàn)解碼器的深度剖析 在電子設(shè)計(jì)領(lǐng)域,解碼器作為關(guān)鍵的邏輯元件,廣泛應(yīng)用于各類(lèi)系統(tǒng)。今天,我們聚焦于德州儀器(TI
    的頭像 發(fā)表于 01-16 17:40 ?1616次閱讀

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

    高速CMOS邏輯3 - 8線(xiàn)解碼器/解復(fù)用器:CDx4HC(T)138和'238的技術(shù)解析 在電子設(shè)計(jì)領(lǐng)域,解碼器和解復(fù)用器是非常重要的邏輯器件,它們能夠?qū)崿F(xiàn)地址
    的頭像 發(fā)表于 01-16 15:30 ?506次閱讀

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

    CDx4HC(T)138和CDx4HC(T)238:高速CMOS邏輯3 - 8線(xiàn)解碼器的深度解析 在電子設(shè)計(jì)的世界里,解碼器是一種至關(guān)重要的邏輯器件,它們?cè)诘刂?/div>
    的頭像 發(fā)表于 01-16 15:30 ?316次閱讀

    發(fā)布元服務(wù)提交審核

    完成所有應(yīng)用信息和版本信息的配置后,可將元服務(wù)提交至華為方進(jìn)行發(fā)布審核。 登錄AppGallery Connect,點(diǎn)擊“APP與元服務(wù)”。 選擇要發(fā)布的元服務(wù)。 左側(cè)導(dǎo)航選擇“應(yīng)用上架 &
    發(fā)表于 12-04 14:23

    流水線(xiàn)基本結(jié)構(gòu)

    個(gè)階段: 取指 + 解碼(Fetch + Decode):同時(shí)完成指令讀取和初步解碼。 執(zhí)行(Execute):完成運(yùn)算或數(shù)據(jù)操作。 特點(diǎn): 減少流水線(xiàn)層級(jí),簡(jiǎn)化控制
    發(fā)表于 11-21 07:35

    小紅書(shū)獲取筆記正文和點(diǎn)贊數(shù)的API接口

    ? ?小紅書(shū)(RED)是一個(gè)流行的社交平臺(tái),用戶(hù)分享筆記(類(lèi)似博客文章)。開(kāi)發(fā)者和數(shù)據(jù)分析師常需要通過(guò)API接口獲取筆記正文和點(diǎn)贊數(shù),用于內(nèi)容分析或應(yīng)用開(kāi)發(fā)。本文將詳細(xì)介紹如何實(shí)現(xiàn)這一功能,包括
    的頭像 發(fā)表于 11-18 16:27 ?994次閱讀
    小紅書(shū)獲取筆記<b class='flag-5'>正文</b>和點(diǎn)贊數(shù)的API接口

    分享一個(gè)嵌入式學(xué)習(xí)階段規(guī)劃

    )項(xiàng)目進(jìn)階階段(約 20 天) 核心目標(biāo):積累實(shí)戰(zhàn)項(xiàng)目,沉淀簡(jiǎn)歷成果基礎(chǔ)工具:可選學(xué) Git(代碼提交、沖突解決)核心項(xiàng)目(1)STM32綜合項(xiàng)目:做顯示屏交互、ESP8266模組應(yīng)用,搭配小程序開(kāi)發(fā)
    發(fā)表于 09-12 15:11

    0.1-2.7 GHz SP4T 開(kāi)關(guān),帶集成邏輯解碼器 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()0.1-2.7 GHz SP4T 開(kāi)關(guān),帶集成邏輯解碼器相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有0.1-2.7 GHz SP4T 開(kāi)關(guān),帶集成邏輯解碼器的引腳圖、接線(xiàn)圖、封
    發(fā)表于 08-08 18:32
    0.1-2.7 GHz SP4T 開(kāi)關(guān),帶集成<b class='flag-5'>邏輯</b><b class='flag-5'>解碼</b>器 skyworksinc

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

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

    CMOS的邏輯門(mén)如何應(yīng)用在電路

    CMOS的邏輯門(mén)如何應(yīng)用在電路 前言 在如今的電子電路,CMOS邏輯門(mén)有著接近零靜態(tài)功耗和超高集成度的特點(diǎn),是數(shù)字電路不可或缺的存在。其獨(dú)特之處在于PMOS與NMOS晶體管的互補(bǔ)設(shè)
    的頭像 發(fā)表于 06-19 16:07 ?1753次閱讀
    CMOS的<b class='flag-5'>邏輯</b>門(mén)如何應(yīng)用在電路<b class='flag-5'>中</b>

    Transformer架構(gòu)解碼器的工作流程

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

    下一代物聯(lián)網(wǎng):芯科科技和Arduino借助邊緣AI和ML簡(jiǎn)化Matter設(shè)計(jì)和應(yīng)用

    Silicon Labs(芯科科技)和Arduino宣布建立合作伙伴關(guān)系,旨在通過(guò)Arduino Nano Matter開(kāi)發(fā)板(基于芯科科技的MGM240系列多協(xié)議無(wú)線(xiàn)模塊)的兩階段合作來(lái)簡(jiǎn)化Matter協(xié)議的設(shè)計(jì)和應(yīng)用
    的頭像 發(fā)表于 05-19 11:15 ?759次閱讀
    下一代物聯(lián)網(wǎng):芯科科技和Arduino借助邊緣AI和ML簡(jiǎn)化Matter設(shè)計(jì)和應(yīng)用

    NVMe協(xié)議分析之提交隊(duì)列

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

    展望PostgreSQL 18的新特性

    距離 PostgreSQL 17 正式發(fā)布已近半年,按照每年發(fā)布一個(gè)大版本的慣例,PostgreSQL 18 預(yù)計(jì)將在 2025 年底發(fā)布。距離正式發(fā)布還有一段時(shí)間,社區(qū)的開(kāi)發(fā)工作仍在如火如荼地進(jìn)行。
    的頭像 發(fā)表于 03-03 16:51 ?1542次閱讀
    展望<b class='flag-5'>PostgreSQL</b> 18的新特性