extend ../_components/base.pug

block pagetitle
    | ACID transactions  

block css 
    link(rel="stylesheet", href="../css/native-persistence.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/acid-transactions.css?ver=" + config.version)



block main
    - global.pageHref = "features"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero
        .container.innerhero__cont
            .innerhero__main
                .innerhero__pre.pb-5 Apache Ignite
                h1.h1.innerhero__h1 Distributed ACID <br>Transactions
                //- .pt-2.h3 with Apache Ignite
                .innerhero__descr.pt-4.h5.
                    Classical ACID transactions that let you update distributed data <br>consistently, durably and with in-memory speed
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--acid(src="/public/img/features/acid/hero.svg", alt="Distributed ACID transactions")
    // /.innerhero






    section.acid1.container 
        h2.acid1__h2.h4 Update multiple records from different tables that span across many cluster nodes
        .acid1__wrap.flexi
            .acid1__item
                .acid1__title.fz20 Consistency
                .acid1__text.pt-3
                    p Ignite transactional APIs are used by&nbsp;banks to&nbsp;implement payments services that transfer money between accounts in&nbsp;real-time.
            .acid1__item
                .acid1__title.fz20 Durability
                .acid1__text.pt-3
                    p Multi-tier storage persists changes durably to&nbsp;disk. Committed transactions always survive failures, incomplete transactions are rolled back.
            .acid1__item
                .acid1__title.fz20 Fault-Tolerance
                .acid1__text.pt-3
                    p The transactional engine avoids inconsistencies even if&nbsp;your transaction is&nbsp;failed in&nbsp;the middle of&nbsp;a&nbsp;commit.
    // /.acid1




    section.acid2.container 
        h2.acid2__h2 To guarantee data consistency, durability and fault-tolerance<br> <strong>Ignite implements the two-phase commit protocol</strong>
        .acid2__wrap.flexi.pt-5
            .acid2__main
                p In distributed systems, a transaction usually spans across multiple cluster nodes. 
                p To handle possible distributed failures properly and avoid data inconsistencies cluster-wide, a two-phase commit protocol (2PC) is used.
                h3.acid2__subtitle.h5.pb-2 How ACID transactions work
                p Whenever the records get updated within a&nbsp;transaction, Ignite keeps the transactional state in&nbsp;a&nbsp;local transaction map until the changes are committed.
                p At&nbsp;which point, the data is&nbsp;transferred to&nbsp;the participating remote nodes. Only the nodes that hold primary or&nbsp;backup copies of&nbsp;the data participate in&nbsp;the transaction.
                p If&nbsp;a&nbsp;transaction is&nbsp;mapped to&nbsp;a&nbsp;single node, then, Ignite optimizes the transaction execution by&nbsp;switching to&nbsp;the one-phase-commit (1PC) protocol.
            aside.acid2__right
                img(src="/public/img/features/acid/acid-func.svg", alt="").acid2__funcimg
    // /.acid2



    section.acid3.container.pt-5
        h2.h4.acid3__title Records are updated consistently across <br>memory and disk tiers
        .acid3__wrap.pt-5.flexi
            .acid3__col 
                h3.h5.pb-2 Transactions with Ignite native persistence
                p.fz20.acid3__collead In case of any failure you can always recover to a consistent state
                .acid3__small.pt-4
                    p When native persistence mode is&nbsp;enabled and Apache Ignite is&nbsp;used as&nbsp;a&nbsp;database that scales beyond available memory capacity, the distributed transactions update data across memory and disk in&nbsp;a&nbsp;consistent way.
                    p All the changes stay durable, because they are written to&nbsp;the write-ahead log (WAL) files. It&nbsp;guarantees data consistency even if&nbsp;the cluster or&nbsp;individual nodes go&nbsp;down in&nbsp;the middle of&nbsp;a&nbsp;transaction.
                a.acid3__detlink(href="#", data-hideopen="acidbox")  WAL in details
                .acid3__detwrap(data-hidebox="acidbox")
                    .acid3__detmore
                        button.acid3__close(data-hideopen="acidbox")
                            img(src="/public/img/features/acid/icon-cross.svg", alt="")
                        p The purpose of&nbsp;the WAL is&nbsp;to&nbsp;propagate updates to&nbsp;the disk in&nbsp;the append-only mode, which is&nbsp;the fastest way to&nbsp;persist data to&nbsp;disk.
                        p.pt-1 The WAL provides a&nbsp;recovery mechanism for failure scenarios when a&nbsp;single node or&nbsp;the whole cluster goes down. A&nbsp;cluster can always be&nbsp;recovered to&nbsp;the latest successfully committed transaction.
            .acid3__col
                h3.h5.pb-2 Transactions with external databases
                p.fz20.acid3__collead Your transactions will be updated both i&nbsp;external database and Apache Ignite
                .acid3__small.pt-4
                    p When Apache Ignite is&nbsp;used as&nbsp;a&nbsp;caching layer for an&nbsp;external database, such as&nbsp;RDBMS, transactions span the cached data in&nbsp;Ignite as&nbsp;well as&nbsp;the data persisted in&nbsp;a&nbsp;database supporting transactional APIs.
                    p For instance, if&nbsp;a&nbsp;relational database is&nbsp;configured as&nbsp;a&nbsp;disk tier, Ignite writes the transactional changes to&nbsp;the database before sending a&nbsp;commit message to&nbsp;participating cluster nodes.
                    p This way, if&nbsp;a&nbsp;transaction fails at&nbsp;the database level, Ignite can still send the rollback message to&nbsp;the cluster nodes, keeping the data consistent across memory and disk tiers.

    
    section.native-bottom.container
        .native-bottom__grid 
            article.nativebotblock
                h3.h4.nativebotblock__title
                    img(src="/public/img/features/native-rocket.svg", alt="").nativebotblock__icon
                    span Ready to Start?
                p.nativebotblock__text Create your transactional application <br>with Apache Ignite
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/key-value-api/transactions", target="_blank") Performing ACID Transactions
            article.nativebotblock.nativebotblock--learn
                h3.h4.nativebotblock__title
                    img(src="/public/img/features/native-docs.svg", alt="").nativebotblock__icon
                    span Want to&nbsp;Learn More?
                p.nativebotblock__text Ignite&nbsp;3.0 advances its replication and transactional components with the support of&nbsp;the <strong>Raft consensus algorithm</strong>
                a.nativebotblock__link.arrowlink(href="https://cwiki.apache.org/confluence/display/IGNITE/IEP-61%3A+Common+Replication+Infrastructure", target="_blank") Ignite 3.0 and Raft Details