extend ../_components/base.pug

block pagetitle
    | Multi-Tier Storage   

block css 
    link(rel="stylesheet", href="../css/native-persistence.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/multi-tier.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-3 Apache Ignite
                h1.h1.innerhero__h1 Multi-Tier Storage
                .innerhero__descr.pt-2.h5.
                    Store and access your data across memory <br>and disk with no compromises
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--multitier(src="/public/img/usecases/in-memory-hero.svg", alt="Distributed In-Memory Cache")
    // /.innerhero


    section.multitier2
    .container 
        h2.h3.multitier2__title.
            Apache Ignite multi-tier storage implements a cutting-edge storage architecture that combines performance benefits of&nbsp;memory with the scalability and durability advantages of disk-based databases.


    section.multitiers.container
        header.blockheader.blockheader--spl.flexi
                h2.h4.blockheader__left.blockheader__left--full Primary Multi-Tier Storage Usage Modes
        .multitier3.flexi
            .multitiers__left
                article.multitierblock
                    h3.multitierblock__title In-Memory Mode
                    p.fz20.pt-2 Get all the benefits of in-memory computing solutions. Store and process data at the lowest latency and highest throughput.
                    img.multitierblock__pic(src="/public/img/features/multitier/01-bd.svg", alt="")
            .multitiers__right.multitiers__text
                h4.multitier3__h4.fz20.pb-1x How It Works
                p The whole data set is available in memory tier only.
                p In order to survive node failures, we recommend keeping at least one backup copy of the data in the cluster. DRAM or Intel® Optane™ operating in the Memory Mode can be used as a storage device.
                h4.multitier3__h4.fz20.pt-3 Use-Cases
                ul.dashlist.pt-2
                    li In-memory caching
                    li High-performance computing
                    li Web-session caching
                    li Real-time processing of continuous data streams
                .multitiervid.pt-3
                    .multitiervid__link.pb-2
                        span In-Memory Mode Case-Study
                    +powvideo(
                        "https://www.youtube.com/watch?v=Mhtt2QL_qCQ&t=639s",
                        "/public/img/features/multitier/video-1.png",
                        "",
                        "How To Use Apache Ignite To&nbsp;Resque The Backend <br>Of The Bank",
                        "comvideo__txt--black  comvideo__txt--small"  
                    )
                        .multitiervid__descr Raiffeisen Bank uses in-memory mode to store their data
        // /.multitier3

        .multitier4.flexi
            .multitiers__left.multitiers__text
                h4.multitier3__h4.fz20.pb-1x How It Works
                p Ignite slides in between your existing application and data layer. Ignite <a href="https://ignite.apache.org/docs/latest/persistence/external-storage#read-through-and-write-through" target="_blank">writes-through</a> or <a href="https://ignite.apache.org/docs/latest/persistence/external-storage#write-behind-caching" target="_blank">writes-behind</a> all data modifications to the underlying external databases.
                h4.multitier3__h4.fz20.pt-3.pb-2 Use-Cases
                p Offloading and acceleration of existing databases, backend-systems, applications and APIs.
                .multitiervid.pt-4
                    .multitiervid__link.pb-2
                        span In-Memory + External Database Mode Case-Study
                    +powvideo(
                        "https://www.youtube.com/watch?v=CPmwnjDJ1Sk",
                        "/public/img/poweredby/videos/006.png",
                        "",
                        "Embracing The Service Consumption Shift In&nbsp;Banking",
                        "comvideo__txt--small"
                    )
                    .multitiervid__descr ING core banking system transformation with Apache Ignite.
            .multitiers__right 
                article.multitierblock
                    h3.multitierblock__title In-Memory + External Database Mode
                    p.fz20.pt-1x Accelerate and offload your existing databases by deploying Ignite as a caching layer on top of existing disk-based databases and back-end systems.
                    img.multitierblock__pic(src="/public/img/features/multitier/03-bd.svg", alt="")
        // /.multitier4

        .multitier5.flexi
            .multitiers__left
                article.multitierblock
                    h3.multitierblock__title Multi-Tier Database Mode
                    p.fz20.pt-1x Scale beyond the available memory capacity and skip memory warm-ups on restarts 
                    img.multitierblock__pic(src="/public/img/features/multitier/04-bd.svg", alt="")
            .multitiers__right.multitiers__text
                h4.multitier3__h4.fz20.pb-1x How It Works
                p 100% of data is persisted to Ignite native persistence, and the same or smaller amount is cached in memory. The more data cached, the faster the performance.
                p Applications can query both in-memory and disk-only records transparently scaling beyond available memory capacity.
                p There is no need for memory warm-ups on restarts since Ignite can serve data from disk. SSD, Flash, HDD or Intel® Optane™ operating in the AppDirect Mode can be used as a storage device.
                h4.multitier3__h4.fz20.pt-3.pb-2 Use-Cases
                p Ignite as a distributed database for HTAP workloads or digital integration hub with the active persistence layer.
                .multitiervid.pt-4 
                    .multitiervid__link.pb-2
                        span Native Persistence Case-Study
                    +powvideo(
                        "https://www.youtube.com/watch?v=jF9T2cJB6t0&t=137s",
                        "/public/img/features/multitier/video-2.png",
                        "",
                        "How To Use Apache Ignite To&nbsp;Resque The Backend <br>Of The Bank",
                        "comvideo__txt--small"
                    )
                        .multitiervid__descr JP Morgan team use Ignite to achieve persistence, caching and integrated compute
        // /.multitier3
    // /.multitiers



    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 Discover more details about multi-tier storage <br>and configure it for your use-case
                a.nativebotblock__link.arrowlink(href="https://cwiki.apache.org/confluence/display/IGNITE/Ignite+Persistent+Store+-+under+the+hood", target="_blank") Working with SQL Guide 
            article.nativebotblock.nativebotblock--learn
                h3.h4.nativebotblock__title
                    img(src="/public/img/features/native-docs.svg", alt="").nativebotblock__icon
                    span Want to Learn More?
                p.nativebotblock__text Check multi-tier storage implementation <br>details article 
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/persistence/native-persistence", target="_blank") Multi-Tier Storage Implementation Details






