extend ../_components/base.pug

block pagetitle
    | Distributed Key-Value APIs 

block css 
    link(rel="stylesheet", href="../css/native-persistence.css")
    link(rel="stylesheet", href="../css/key-value-api.css")



block main
    - global.pageHref = "features"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero.innerhero--keyvalue
        .container.innerhero__cont
            .innerhero__main
                .innerhero__pre.pb-5 Apache Ignite
                h1.h1.innerhero__h1 Distributed <br>Key-Value APIs
                .innerhero__descr.pt-2.h5.
                    Query your distributed data in the fastest way possible <br>with key-value APIs 
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--keyvalue(src="/public/img/features/key-value/hero.svg", alt="Distributed Key-Value APIs")
    // /.innerhero



    section.keyvalue1.container.flexi
        .keyvalue1__left
            .capstext Key-Value APIs Overview
            .keyvaluetext.pt-5
                p Every record in Ignite is stored as a key-value pair. All the records are distributed evenly across the cluster nodes. Your key-value queries are directed automatically to the nodes that store requested data. This is how Ignite utilizes all the given memory, disk, and CPU resources.
                p Key-value APIs are supported by all existing Ignite client libraries:
            .keyvalue1__libs.pt-5
                p.h5.leyvalue__lang Java <small>(implements JSR-107 specification known as JCache)</small>
                p.h5.leyvalue__lang .NET
                p.h5.leyvalue__lang Python
                p.h5.leyvalue__lang Node.JS
                p.h5.leyvalue__lang Your language
        .keyvalue1__right 
            .keyvalue1__picwrap.picwrap
                img(src="/public/img/features/key-value/key-value-api-pic.svg", alt="").keyvalue1__pic
    // /.keyvalue1



    section.keyvalueplank.container 
        .keyvalueplank__inner Apache Ignite key-value APIs provide additional capabilities such as&nbsp;<strong>automatic synchronization</strong> with external databases, <strong>near caching</strong> and <strong>ACID transactions.</strong>



    section.keyvalue2.container.flexi
        .keyvalue2__left
            .keyvalue__title Automatic Synchronization With External <br>Databases To Keep A Consistent Copy Of Data
            .keyvaluetext.pt-2.pb-5
                p Two synchronization strategies are available in Apache Ignite: <br>write-through/behind and read-through.
            dl.keyvalue2__box.pb-2
                dt Write-through and write-behind capabilities
                dd.pt-2 Ignite can automatically write-through or&nbsp;write-behind all the changes to&nbsp;an&nbsp;external database for every key-value request issued by&nbsp;your applications.
            dl.keyvalue2__box
                dt Read-through capabilities
                dd Read-through means that Ignite can automatically load data from an&nbsp;external database if&nbsp;a&nbsp;record is&nbsp;missing in&nbsp;memory.
        .keyvalue2__right 
            .keyvalue2__picwrap.picwrap
                img(src="/public/img/features/key-value/key-value-api-2.svg", alt="").keyvalue2__pic
    // /.keyvalue2





    section.keyvalue3.container.flexi
        .keyvalue3__right
            .keyvalue__title Near Cache To Process Your Requests In&nbsp;Microseconds
            .keyvaluetext.pt-2.pb-5
                p A near cache is a local client-side cache that stores the most frequently <br>used data on the application end.
            .keyvalue__title How it works
            .keyvaluetext.pt-2.pb-5
                p It&nbsp;is&nbsp;applied for applications that require a&nbsp;consistent response time ranging in&nbsp;microseconds. Ignite automatically invalidates and updates the near cache.
                p Whenever the primary copy of&nbsp;a&nbsp;record gets updated on&nbsp;a&nbsp;server node, Ignite propagates the change to&nbsp;all the nodes that store the record&rsquo;s backup copy, as&nbsp;well as&nbsp;to&nbsp;the applications that keep the record&rsquo;s copy in&nbsp;their near caches.
        .keyvalue3__left
            .keyvalue3__picwrap.picwrap
                img(src="/public/img/features/key-value/key-value-api-3.svg", alt="").keyvalue3__pic
    // /.keyvalue3



    section.keyvalue4.container.flexi.pb-1
        .keyvalue4__left
            .keyvalue__title ACID Transactions To Update Your Distributed Records Consistently
            .keyvaluetext.pt-2.pb-5
                p Apache Ignite key-value APIs are fully transactional which means that data can be&nbsp;updated consistently and reliably.
            .keyvalue__title How it works
            .keyvaluetext.pt-2.pb-5
                p An&nbsp;Ignite transaction can update multiple records from different tables stored on&nbsp;different cluster nodes. Ignite can even span a&nbsp;transaction to&nbsp;an&nbsp;underlying relational database. Ignite implements <a href="/features/acid-transactions.html">two-phase-commit protocol to&nbsp;ensure data consistency at&nbsp;scale.</a>
        .keyvalue4__right
            .keyvalue4__picwrap.picwrap
                img(src="/public/img/features/key-value/key-value-api-4.svg", alt="").keyvalue4__pic
    // /.keyvalue3




    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 Create your first application using <br>Ignite key-value APIs
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/key-value-api/basic-cache-operations", target="_blank") Using Key-Value APIs
            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 out how Apache Ignite can be configured <br>and used as a standard key-value store
                a.nativebotblock__link.arrowlink(href="/use-cases/key-value-store.html") Key-Value Store