extend ../_components/base.pug

block pagetitle
    | Use Cases 

block css 
    link(rel="stylesheet", href="../css/usecases.css")



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


            


                