extend ../_components/base.pug

block pagetitle
    | Multi-Tier Storage   

block css 
    link(rel="stylesheet", href="../css/native-persistence.css")
    link(rel="stylesheet", href="../css/multi-tier.css")



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(
                        "",
                        "/public/img/features/multitier/video-2.png",
                        "",
                        "In-Memory + External <br>Database Mode Case-Study",
                        "comvideo__txt--small",
                        false
                    )
                        .multitiervid__descr Short description
            .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






