extend ../_components/base.pug

block pagetitle
    | Key-Value Store 

block css 
    link(rel="stylesheet", href="../css/native-persistence.css")
    link(rel="stylesheet", href="../css/compute-apis.css")
    link(rel="stylesheet", href="../css/digital-hub.css")
    link(rel="stylesheet", href="../css/datagrid.css")
    link(rel="stylesheet", href="../css/hadoop.css")
    link(rel="stylesheet", href="../css/key-value-store.css")

  



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


    section.innerhero
        .container.innerhero__cont
            .innerhero__main
                
                h1.h1.innerhero__h1 Key-Value Store
                  <br> 
                  span.with-apache  With Apache Ignite
                .innerhero__descr.pt-2.h5.
                    Distributed store for high-performance data access
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--key(src="/public/img/usecases/key-value/hero-image.svg", alt="hero-image")
    // /.innerhero

    
    section.key1 
       .container
          .hub1__block.key1__block.flexi
            .hub1__info
              h3.h5.hub1__title What is a key-value store?
              p.hub1__text A key-value store is a data storage software. It stores, retrieves, and manages data as a set of unique keys. Each one is associated with one and only one value.
              h3.h5.hub1__title.hub1__titleend How a key-value store works
              p.hub1__text A key-value store, or a key-value database, holds a collection of data records in various fields. The data records have unique keys to retrieve and modify records quickly. 

            img.hub1__image(src="/public/img/usecases/key-value/image.svg", alt="image")
    // /.hub1 

    

  
    
   
    section.compute2
     .container
       .doop2__block
          h2.compute2__h2 Benefits Of Key-Value Store
          .compute2__grid.flexi.hub2__grid.doop2__grid 
               .compute2item.hub2item.doop2__item
                 .compute2-points__item.fz20
                 .compute2item__block
                   h3.fz20.compute2item__title Low-latency access and high-performance
                   p.compute2__text.base2__text Thanks to their design, key-value stores can perform many more operations in a given amount of time than other database models
             
               .compute2item.hub2item.doop2__item
                 .compute2-points__item.fz20
                 .compute2item__block
                   h3.fz20.compute2item__title Horizontal scalability
                   p.compute2__text.base2__text Key-value stores can keep and process large volumes of data by scaling horizontally
                   
            
    // /.compute2

    section.key4 
       .container
          .grid4__blocks.flexi
            h2.grid4__h2.h5.key4__h2 With Apache Ignite, key-value store can cache data in memory and persist it on disk
            .grid4__block
               p.grid4__text The <a href="/arch/native-persistence.html">native persistence</a> feature eliminates the time-consuming cache warm-up step as well as the data reloading phase from external databases.
               p.grid4__text.pt-1 Since the native persistence always keeps a full copy of data on disk, you are free to cache a subset of records in memory. 
               p.grid4__text.pt-1 If a required data record is missing in memory, then Ignite reads it from disk automatically, regardless of the API you use.
    // /.grid4

    section.key5
       .container
          h2.grid5__h2.key5__h2.h4 Key-value store is used when <strong>speed and scale are top priorities</strong>
          .grid5__blocks.flexi
             article.native2item.grid5__item
               h3.key5__h3 User sessions caching
               p.grid5__text.key5__text Key-value stores are used to accumulate user session details in web applications to personalize content.
             article.native2item.grid5__item
               h3.key5__h3 360 Customer View
               p.grid5__text.key5__text Applications can collect user preferences and behavioral patterns to offer better services. The records can be stored in a key-value database to enable fast customer data lookups.
             article.native2item.grid5__item
               h3.key5__h3 Back-end systems acceleration
               p.grid5__text.key5__text Developers use key-value stores to cache specific records that don’t require a regular update. This reduces load on core back-end systems and databases.

    // /.key5  


    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 Discover our quick start guide and build your first<br> application in 5-10 minutes
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/", target="_blank") Quick Start Guide
            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 Ignite key-value APIs article
                a.nativebotblock__link.arrowlink(href="/features/distributed-key-value-store.html") Key-Value APIs Article





