extend ../_components/base.pug

block pagetitle
    | Distributed Key-Value APIs 

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