extend ../_components/base.pug

block pagetitle
    | Use Cases 

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="/public/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 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


            


                