extend ../_components/base.pug

block pagetitle
    title Distributed Key-Value APIs - Apache Ignite
    meta(name="description", content="Apache Ignite as a distributed key-value store is supported for different caching techniques. Ignite key-value APIs allow to create database key-value tables on-chain and increase processing performance.")
    link(rel="canonical", href="https://ignite.apache.org/features/key-value-apis.html")

    meta(property="og:title", content="Distributed Key-Value APIs - Apache Ignite")
    meta(property="og:type", content="article")
    meta(property="og:url", content="https://ignite.apache.org/features/key-value-apis.html")
    meta(property="og:image", content="/img/og-pic.png")
    meta(property="og:description", content="Apache Ignite as a distributed key-value store is supported for different caching techniques. Ignite key-value APIs allow to create database key-value tables on-chain and increase processing performance.")

block css 
    link(rel="stylesheet", href="../css/native-persistence.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/key-value-api.css?ver=" + config.version)



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="/img/features/key-value/hero.svg", alt="Distributed Key-Value APIs")
    // /.innerhero



    section.keyvalue1.container.flexi
        .keyvalue1__left
            h2.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="/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
            h3.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="/img/features/key-value/key-value-api-2.svg", alt="").keyvalue2__pic
    // /.keyvalue2





    section.keyvalue3.container.flexi
        .keyvalue3__right
            h3.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 <strong>in&nbsp;microseconds.</strong> 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="/img/features/key-value/key-value-api-3.svg", alt="").keyvalue3__pic
                .keyvalue3__picdescr
                    p 1. Call to the near cache
                    p 2. Call to the Ignite cluster 
                        span (if a record is not found in the near cache)
                    p 3. Read-through from the external database
                        span (if the record is not in the Ignite cluster yet)
    // /.keyvalue3



    section.keyvalue4.container.flexi.pb-1
        .keyvalue4__left
            h3.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="/img/features/key-value/key-value-api-4.svg", alt="").keyvalue4__pic
    // /.keyvalue3




    section.native-bottom.container
        .native-bottom__grid 
            article.nativebotblock
                .h4.nativebotblock__title
                    img(src="/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
                .h4.nativebotblock__title
                    img(src="/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