extend _components/base.pug

block pagetitle
    title Use-Cases - Apache Ignite
    meta(name="description", content="The most common use-cases for Apache Ignite. Learn more how companies deploy Apache Ignite in production.")
    link(rel="canonical", href="https://ignite.apache.org/use-cases.html")

    meta(property="og:title", content="Use-Cases - Apache Ignite")
    meta(property="og:type", content="article")
    meta(property="og:url", content="https://ignite.apache.org/use-cases.html")
    meta(property="og:image", content="/img/og-pic.png")
    meta(property="og:description", content="The most common use-cases for Apache Ignite. Learn more how companies deploy Apache Ignite in production.")

block css 
    link(rel="stylesheet", href="/css/usecases.css?ver=" + config.version)



block main
    - global.pageHref = "usecases.html"
    - 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 Use Cases
                .innerhero__descr.pt-2.h5.
                    With plenty of capabilities, Apache Ignite finds its route in many use-cases, ranging from a basic distributed cache, distributed database for hybrid transactional/analytical processing, to a sophisticated digital integration hub.
            img.innerhero__pic.innerhero__pic--usecase(src="/img/usecases/head-bg.svg", alt="Apache Ignite Use Cases")



    section.usecase2#usecase2
        .container 
            p.blockcapslead Widespread use-cases
            header.blockheader.flexi
                h2.h4.blockheader__left Application Acceleration<br> And Scale Out
                .blockheader__right.fz20
                    p Accelerate your existing applications by 100x or more by using in-memory computing. There are several deployment options.
            .usecase2__wrap
                .usecasecard.cardsimple
                    h4.cardsimple__title In-Memory Cache
                    .cardsimple__text Cache data with extra capabilities: query with SQL and update atomically by using ACID transactions.
                    .cardsimple__bottom
                        a(href="/use-cases/in-memory-cache.html").cardsimple__button.button.button--shadow Learn More
                .usecasecard.cardsimple
                    h4.cardsimple__title In-Memory Data Grid
                    .cardsimple__text Use an advanced read-through / write-through cache that is deployed on top of one or several databases.
                    .cardsimple__bottom
                        a(href="/use-cases/in-memory-data-grid.html").cardsimple__button.button.button--shadow Learn More
                .usecasecard.cardsimple
                    h4.cardsimple__title In-Memory Database
                    .cardsimple__text Use Apache Ignite as an ultra-fast and horizontally scalable in-memory database.
                    .cardsimple__bottom
                        a(href="/use-cases/in-memory-database.html").cardsimple__button.button.button--shadow Learn More
                .usecasecard.cardsimple
                    h4.cardsimple__title High-Performance Computing
                    .cardsimple__text.cardsimple__text--long Execute kilobyte-size custom code over petabytes of data. Turn your Ignite database into a distributed supercomputer for low-latency calculations, complex analytics, and machine learning.
                    .cardsimple__bottom
                        a(href="/use-cases/high-performance-computing.html").cardsimple__button.button.button--shadow Learn More
    // /.usecase2




    section.usecase3#database
        .container
            .blockheader.usecase3__block.flexi
                h2.h4.blockheader__left Distributed Database For HTAP Workloads
                .blockheader__right.fz20
                    p Build modern applications that support transactional and analytical workloads by using Ignite as&nbsp;a&nbsp;database that scales beyond available memory capacity. 
                    p#digitalhub Ignite allocates memory for your hot data and goes to disk whenever applications query cold records.
            .blockheader.usecase3__block.flexi
                h2.h4.blockheader__left Digital Integration Hub
                .blockheader__right.fz20
                    p Аn advanced platform architecture that aggregates multiple back-end systems and databases into a low-latency and shared data store.
                    a(href="/use-cases/digital-integration-hub.html").blockheader__button.button.button--shadow Learn More
    // /.usecase3



    section.usecase4
        .container
            p.blockcapslead Other use-cases
            .usecase4__wrap

                .usecasecard.cardsimple
                    h4.cardsimple__title Key-Value Store
                    .cardsimple__text Access the cluster with key-value requests or take advantage of APIs available exclusively in Ignite.
                    .cardsimple__bottom
                        a(href="/use-cases/key-value-store.html").cardsimple__button.button Learn More
                .usecasecard.cardsimple
                    h4.cardsimple__title Apache Spark Performance Acceleration
                    .cardsimple__text Accelerate the performance of Apache Spark® by keeping data in a shared Apache Ignite® in-memory cluster.
                    .cardsimple__bottom
                        a(href="/use-cases/spark-acceleration.html").cardsimple__button.button Learn More
                .usecasecard.cardsimple
                    h4.cardsimple__title Apache Hadoop Performance Acceleration
                    .cardsimple__text Get real-time analytics across Apache™ Hadoop® operational and&nbsp;historical data silos.
                    .cardsimple__bottom
                        a(href="/use-cases/hadoop-acceleration.html").cardsimple__button.button Learn More
    // /.usecase4


            


                