Utvecklarna av OrioleDB har föreslagit förbÀttringar av API:n för alternativa PostgreSQL-motorer.

Utvecklarna av OrioleDB har analyserat det aktuella tillstÄndet för det lÄgnivÄ-API som anvÀnds för att ge tillgÄng till utökningar av tabeller och index i PostgreSQL (Table/Index Access Method (AM) API) och föreslagit sÀtt att förbÀttra det. Sedan detta API introducerades i PostgreSQL 12 har utvecklarna haft möjlighet att skapa alternativa datalagringsmekanismer. Trots detta har det inte blivit nÄgra fullt fungerande transaktionella lagringsmotorer, som uteslutande implementeras som utökningar.

De mest efterfrÄgade funktionerna för alternativa tabellmotorer i PostgreSQL Àr:

  • Alternativa implementeringar av MVCC, till exempel lagring baserad pĂ„ UNDO-loggar.
  • Indexorganiserade tabeller dĂ€r index inte Ă€r ett valfritt tillĂ€gg till tabellen, vilket pĂ„skyndar frĂ„gorna, utan fungerar som den primĂ€ra datalagringsstrukturen dĂ€r tabellens data lagras.

De förÀndringar som krÀvs i API Table/Index AM för att stödja alternativa implementeringar av MVCC övervÀgs med hÀnsyn till OrioleDB-utvidgningen, som utvecklats för att ÄtgÀrda kÀnda brister i den inbyggda lagringsmekanismen i PostgreSQL. Problemet Àr att fullstÀndig integration av OrioleDB med PostgreSQL krÀver Àndringar i PostgreSQL-koden, vilket komplicerar projektets genomförande och understryker behovet av att modernisera det nuvarande API:et för Table AM.

API Table AM pĂ„tvingar inte direkt hur MVCC ska implementeras. ÄndĂ„ gör API Table AM och API Index AM följande antagande: varje TID (Tuple/row Identifier) antingen indexeras av alla index eller inte indexeras alls. Även om Index AM har flera referenser till en TID (till exempel GIN), mĂ„ste alla dessa referenser överensstĂ€mma med samma indexerade vĂ€rde.

Utvecklarna av OrioleDB har föreslagit förbÀttringar av API:n för alternativa PostgreSQL-motorer.

Detta princip har kritiserats för att öka antalet skrivoperationer ('write amplification') — om en indexerad attribut uppdateras, mĂ„ste varje index i tabellen uppdateras. Om man helt vill utnyttja fördelarna med UNDO-loggen eller bygga en annan lagringsmetod utan 'förstĂ€rkning av skrivningar' (till exempel WARM-metoden), krĂ€vs det att detta antagande bryts.

Utvecklarna av OrioleDB har föreslagit förbÀttringar av API:n för alternativa PostgreSQL-motorer.

Tabell AM, baserad pÄ UNDO, kommer inte att bryta mot denna förutsÀttning och liknar den befintliga metoden HOT (Heap-Only Tuples), förutom att gamla versioner av rader sparas i UNDO-loggen och inte behöver fÄ plats pÄ samma sida. Men enligt författarna Àr denna fördel inte tillrÀcklig för att rÀttfÀrdiga existensen av en separat Table AM.

Praktiska begrÀnsningar med det befintliga API:et:

  • Vid uppdatering av tabellrader uppdateras indexen enligt principen 'allt eller inget'.
  • Avsaknad av API Index AM för möjligheten att punktligt ta bort specifika tuples. För nĂ€rvarande kan tuples tas bort frĂ„n index massivt med metoderna ambulkdelete och amvacuumcleanup. Att försöka implementera punktvis borttagning genom detta API skulle leda till lĂ„g effektivitet, eftersom de flesta nuvarande implementationer mĂ„ste skanna hela indexet. Dessutom tillĂ„ter API:et inte att ange vilka av de tuples som refererar till samma TID som ska tas bort. Det kan endast ta bort dem alla.
  • Index hĂ€nvisar för nĂ€rvarande till tabellrader genom blocknummer (32 bitar) och förskjutningsnummer (16 bitar). Endast 11 bitar av förskjutningsnumret kan sĂ€kert överföras frĂ„n TID till alla indexĂ„tkomstmetoder. Dessutom kan alternativa MVCC-implementationer behöva lagra en extra nyttolast tillsammans med TID. Till exempel krĂ€ver OrioleDB en eller flera bitar för att implementera 'delete-marking'-index eller fullstĂ€ndig synlighetinformation.

TvÄ sÀtt har föreslagits för att övervinna begrÀnsningarna i praktiken:

    TillvÀgagÄngssÀtt 1: API Index AM tillhandahÄller möjligheter för alternativ MVCC-implementering.

    Medan Table AM fortsÀtter att ansvara för alla komponenter av MVCC, erbjuder Index AM de nödvÀndiga funktionerna för alternativ MVCC-implementering, nÀmligen: lagring av anvÀndarnytolasten tillsammans med TID, metod för punktvis borttagning och till och med metod för punktvis uppdatering (om TID i indexet inte kan Àndras, kan anvÀndarnytolasten Àndras). Dessutom, eftersom flera tuples kan referera till samma TID, behöver de API-metoder som anvÀnds vid indexskanning ocksÄ uppdateras.

    TillvÀgagÄngssÀtt 2: Index som stödjer MVCC.

    Ett alternativ skulle vara att tillÄta index som stöder MVCC. Det vill sÀga att "executor" (eller eventuellt Table AM) helt enkelt anropar metoder som insert() och delete() i Index AM, medan Index AM erbjuder möjlighet att skanna med hÀnsyn till MVCC. Detta skulle avsevÀrt förenkla scanning med endast index (index-only). Till och med hela Table AM skulle i sÄ fall kunna bli ett mellanlager som lagrar data i indexet.

    I diagrammet nedan visas ett exempel. IndexvÀrdet 2 uppdateras av transaktion 11 frÄn vÀrdet "A" till vÀrdet "B". DÀrför markeras vÀrdet "A" som xmax == 11, och vÀrdet "B" markeras som xmin == 11. SÄledes kan index 2 skannas och endast synliga tuples erhÄllas i enlighet med MVCC utan kontroller av heapen. SkrÀputvinning av index 2 kan ocksÄ utföras utan anvÀndning av heapen.

    Utvecklarna av OrioleDB har föreslagit förbÀttringar av API:n för alternativa PostgreSQL-motorer.

    Vid implementeringen av alla de nÀmnda nyheterna i API:et för indexmetoder Àr det osannolikt att det gÄr att samtidigt revidera alla index för att stödja alla nya funktioner. Det Àr mer realistiskt att tillÄta flera implementationer för en indexmetod. Till exempel, utöver den vanliga B-tree, kan utvidgningen implementera en alternativ B-tree med stöd för MVCC inuti indexet och stöd för postidentifierare av godtycklig lÀngd.

    Utvecklarna av OrioleDB har föreslagit förbÀttringar av API:n för alternativa PostgreSQL-motorer.

    SÄledes föreslÄs det att inte bara revidera API:et för Table AM, utan ocksÄ API:et för Index AM, som har tjÀnat PostgreSQL-gemenskapen troget under mÄnga Är. Dessutom föreslÄs det att dela upp Index AM i ett logiskt lager och ett implementationslager. Denna omdefinierade arkitektur kommer att möjliggöra för PostgreSQL att stödja olika lagringsmodeller.

    KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster