Author: dmagda Date: Wed Feb 5 16:41:53 2020 New Revision: 1873655 URL: http://svn.apache.org/viewvc?rev=1873655&view=rev Log: Updated key-value store use case page
Added: ignite/site/branches/ignite-redisign/use-cases/key-value-store.html - copied, changed from r1873654, ignite/site/branches/ignite-redisign/use-cases/database/key-value-store.html Removed: ignite/site/branches/ignite-redisign/features/igfs.html ignite/site/branches/ignite-redisign/features/mapreduce.html ignite/site/branches/ignite-redisign/test.php ignite/site/branches/ignite-redisign/use-cases/database/ ignite/site/branches/ignite-redisign/usecases.html ignite/site/branches/ignite-redisign/whatisignite-bk.html Modified: ignite/site/branches/ignite-redisign/.htaccess ignite/site/branches/ignite-redisign/download.html ignite/site/branches/ignite-redisign/includes/footer.html ignite/site/branches/ignite-redisign/includes/header.html Modified: ignite/site/branches/ignite-redisign/.htaccess URL: http://svn.apache.org/viewvc/ignite/site/branches/ignite-redisign/.htaccess?rev=1873655&r1=1873654&r2=1873655&view=diff ============================================================================== --- ignite/site/branches/ignite-redisign/.htaccess (original) +++ ignite/site/branches/ignite-redisign/.htaccess Wed Feb 5 16:41:53 2020 @@ -6,7 +6,7 @@ Redirect 301 /features/java.html /featur Redirect 301 /features/dotnet.html /features/multilanguage.html Redirect 301 /features/cpp.html /features/multilanguage.html Redirect 301 /features/clientprotos.html /features/multilanguage.html -Redirect 301 collocatedprocessing.html /features/collocatedprocessing.html +Redirect 301 /collocatedprocessing.html /features/collocatedprocessing.html Redirect 301 /features/durablememory.html /arch/memorycentric.html Redirect 301 /arch/durablememory.html /arch/memorycentric.html Redirect 301 /memorycentric.html /arch/memorycentric.html @@ -20,6 +20,10 @@ Redirect 301 /use-cases/database/distrib Redirect 301 /use-cases/database/sql-database.html /use-cases/in-memory-database.html Redirect 301 /use-cases/hadoop/mapreduce.html /use-cases/hadoop-acceleration.html Redirect 301 /use-cases/hadoop/hdfs-cache.html /use-cases/hadoop-acceleration.html +Redirect 301 /features/igfs.html /use-cases/hadoop-acceleration.html +Redirect 301 /features/mapreduce.html /use-cases/hadoop-acceleration.html +Redirect 301 /use-cases/database/key-value-store.html /use-cases/key-value-store.html +Redirect 301 /usecases.html / RewriteEngine On Modified: ignite/site/branches/ignite-redisign/download.html URL: http://svn.apache.org/viewvc/ignite/site/branches/ignite-redisign/download.html?rev=1873655&r1=1873654&r2=1873655&view=diff ============================================================================== --- ignite/site/branches/ignite-redisign/download.html (original) +++ ignite/site/branches/ignite-redisign/download.html Wed Feb 5 16:41:53 2020 @@ -1774,7 +1774,6 @@ under the License. <!--<ul class="list-unstyled">--> <!--<li><a href="/index.html#overview">Overview</a></li>--> <!--<li><a href="/features.html">Features</a></li>--> - <!--<li><a href="/usecases.html">Use Cases</a></li>--> <!--<li><a href="http://apacheignite.readme.io/docs">Documentation</a></li>--> <!--<li><a href="http://apache-ignite-users.70518.x6.nabble.com/">Ask Question</a></li>--> <!--<li><a href="/community/resources.html">Community</a></li>--> Modified: ignite/site/branches/ignite-redisign/includes/footer.html URL: http://svn.apache.org/viewvc/ignite/site/branches/ignite-redisign/includes/footer.html?rev=1873655&r1=1873654&r2=1873655&view=diff ============================================================================== --- ignite/site/branches/ignite-redisign/includes/footer.html (original) +++ ignite/site/branches/ignite-redisign/includes/footer.html Wed Feb 5 16:41:53 2020 @@ -10,7 +10,6 @@ <!--<ul class="list-unstyled">--> <!--<li><a href="/index.html#overview">Overview</a></li>--> <!--<li><a href="/features.html">Features</a></li>--> - <!--<li><a href="/usecases.html">Use Cases</a></li>--> <!--<li><a href="http://apacheignite.readme.io/docs">Documentation</a></li>--> <!--<li><a href="http://apache-ignite-users.70518.x6.nabble.com/">Ask Question</a></li>--> <!--<li><a href="/community/resources.html">Community</a></li>--> Modified: ignite/site/branches/ignite-redisign/includes/header.html URL: http://svn.apache.org/viewvc/ignite/site/branches/ignite-redisign/includes/header.html?rev=1873655&r1=1873654&r2=1873655&view=diff ============================================================================== --- ignite/site/branches/ignite-redisign/includes/header.html (original) +++ ignite/site/branches/ignite-redisign/includes/header.html Wed Feb 5 16:41:53 2020 @@ -54,7 +54,7 @@ onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'distributed_sql');"> Distributed SQL</a> </li> - <li><a href="#TODO" aria-label="DataGrid" + <li><a href="/use-cases/key-value-store.html" aria-label="DataGrid" onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'distributed_key_value');"> Distributed Key-Value</a> </li> @@ -117,7 +117,7 @@ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'distributed-database');"> In-Memory Database</a> </li> - <li><a href="/use-cases/database/key-value-store.html" aria-label="Key-Value Store" + <li><a href="/use-cases/key-value-store.html" aria-label="Key-Value Store" onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'key_value_store');"> Key-Value Store</a> </li> Copied: ignite/site/branches/ignite-redisign/use-cases/key-value-store.html (from r1873654, ignite/site/branches/ignite-redisign/use-cases/database/key-value-store.html) URL: http://svn.apache.org/viewvc/ignite/site/branches/ignite-redisign/use-cases/key-value-store.html?p2=ignite/site/branches/ignite-redisign/use-cases/key-value-store.html&p1=ignite/site/branches/ignite-redisign/use-cases/database/key-value-store.html&r1=1873654&r2=1873655&rev=1873655&view=diff ============================================================================== --- ignite/site/branches/ignite-redisign/use-cases/database/key-value-store.html (original) +++ ignite/site/branches/ignite-redisign/use-cases/key-value-store.html Wed Feb 5 16:41:53 2020 @@ -36,7 +36,13 @@ under the License. <link rel="canonical" href="https://ignite.apache.org/use-cases/database/key-value-store.html"/> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Key-Value Store - Apache Ignite</title> + + <meta name="description" + content="Apache Ignite operates as a distributed key-value store that stores data both in memory and on disk + with support of key-value, SQL, ACID transactions, compute and machine learning APIs."/> + + <title>Distributed Key-Value Store - Apache Ignite</title> + <!--#include virtual="/includes/styles.html" --> <!--#include virtual="/includes/sh.html" --> @@ -47,16 +53,16 @@ under the License. <main id="main" role="main" class="container"> <section id="key-value-store" class="page-section"> - <h1 class="first">Key-Value Store</h1> + <h1 class="first">Distributed Key-Value Store</h1> <div class="col-sm-12 col-md-12 col-xs-12" style="padding:0 0 10px 0;"> <div class="col-sm-6 col-md-6 col-xs-12" style="padding-left:0; padding-right:0"> <p> - Ignite can be accessed with simple key-value APIs and, thus, act as a distributed key-value store - (aka. <a href="/features/datagrid.html">data grid</a>). In this scenario, you can think of Ignite as of a distributed partitioned - hash map with every cluster node owning a portion of the overall data set. It's worth mentioning, - that even if you see or use Ignite as a key-value store, you're not limited to the key-value operations - and can always leverage from other available APIs such as SQL, collocated computations, machine - learning, streaming. + Apache Ignite can operate as a distributed key-value store that stores data both in memory + and on disk. In this deployment mode, you can think of Ignite as of a distributed partitioned + hash map with every cluster node owning a portion of the overall data set. As with + standard key-value stores, you can access the cluster with key-value requests or take + advantage of APIs available exclusively in Ignite - distributed ACID transactions, SQL, + co-located computations, and machine learning. </p> </div> <div class="col-sm-6 col-md- col-xs-12" style="padding-right:0"> @@ -64,349 +70,94 @@ under the License. </div> </div> - <div class="page-heading">JCache APIs</div> + <div class="page-heading">JCache and Extended Key-Value APIs</div> <p> - Ignite key-value APIs comply with <a href="/use-cases/caching/jcache-provider.html">JCache (JSR 107)</a> - specification that supports the following: + Ignite key-value APIs comply with JCache (JSR 107) specification supporting the following: </p> + <ul class="page-list"> - <li>In-Memory Key Value Store</li> - <li>Basic Cache Operations</li> + <li>Basic Cache Put/Get Operations</li> <li>ConcurrentMap APIs</li> - <li>Collocated Processing (EntryProcessor)</li> + <li>EntryProcessor and CacheInterceptor APIs</li> <li>Events and Metrics</li> - <li>Pluggable Persistence</li> </ul> - <div class="page-heading">Extended Key-Value APIs</div> <p> - In addition to the standard JCache API, Ignites supports distributed ACID transactions, - scan and continuous queries, collocated processing and more. + In addition to that, Ignite extends JCache specification supporting distributed key-value ACID + transactions, scan and continuous queries, co-located computations, and much more. For instance, + continuous queries are handy for cases when you want an application to be notified whenever any record + gets updated on the server nodes. While ACID transactions let you update a set of records stored in + different caches/tables consistently. </p> - <div class="code-examples"> - <div class="page-heading">Code Examples</div> - <!-- Nav tabs --> - <ul id="datagrid-examples" class="nav nav-tabs"> - <li class="active"><a href="#datagrid-example-basic" role="tab" data-toggle="tab">Put and Get</a></li> - <li><a href="#datagrid-example-transactions" role="tab" data-toggle="tab">Transactions</a></li> - <li><a href="#datagrid-example-locks" role="tab" data-toggle="tab">Locks</a></li> - </ul> - - <!-- Tab panes --> - <div class="tab-content"> - <div role="tabpanel" class="tab-pane active" id="datagrid-example-basic"> - <pre class="brush:java"> - Ignite ignite = Ignition.ignite(); - - // Get an instance of named cache. - final IgniteCache<Integer, String> cache = ignite.cache("cacheName"); - - // Store keys in cache. - for (int i = 0; i < 10; i++) - cache.put(i, Integer.toString(i)); - - // Retrieve values from cache. - for (int i = 0; i < 10; i++) - System.out.println("Got [key=" + i + ", val=" + cache.get(i) + ']'); - - // Remove objects from cache. - for (int i = 0; i < 10; i++) - cache.remove(i); - - // Atomic put-if-absent. - cache.putIfAbsent(1, "1"); - - // Atomic replace. - cache.replace(1, "1", "2"); - </pre> - </div> - <div role="tabpanel" class="tab-pane" id="datagrid-example-transactions"> - <pre class="brush:java"> - Ignite ignite = Ignition.ignite(); - - // Clone every object we get from cache, so we can freely update it. - IgniteCache<Integer, Account> cache = ignite.cache("cacheName"); - - try (IgniteTx tx = Ignition.ignite().transactions().txStart()) { - Account acct = cache.get(acctId); - - assert acct != null; - - // Deposit $20 into account. - acct.setBalance(acct.getBalance() + 20); - - // Store updated account in cache. - cache.put(acctId, acct); - - tx.commit(); - } - </pre> - </div> - <div role="tabpanel" class="tab-pane" id="datagrid-example-locks"> - <pre class="brush:java"> - Ignite ignite = Ignition.ignite(); - - // Get an instance of named cache. - final GridCache<String, Integer> cache = ignite.cache("cacheName"); - - // Lock cache key "Hello". - Lock lock = cache.lock("Hello"); - - lock.lock(); - - try { - cache.put("Hello", 11); - cache.put("World", 22); - } - finally { - lock.unlock(); - } - </pre> - </div> - </div> - </div> + <div class="page-heading">Near Cache</div> + + <p> + Near cache is a local client-side cache that stores the most frequently used data on the application end. + This caching technique is supported for key-value APIs only and can be considered for applications that + require a consistent response time withing a low microseconds range. The near cache is invalidated and + updated by Ignite automatically. Whenever a primary copy of a record gets updated on a server node, + the change will be propogated to all the nodes that store its backup copy as well as to your applications + that keep a record's copy in their near caches. + </p> + + <div class="page-heading">Read-through and Write-Through/Behind</div> + + <p> + If Ignite is deployed as a key-value store on top of an external database, then it can automatically + write-through or write-behind all the changes to that external store for every key-value request + issued by your applications. It also includes key-value ACID transactions - Ignite coordinates and + commits a transaction across its in-memory cluster as well as a relational database. + </p> + + <p> + The read-through capability implies that Ignite can read data from an external database if a record is + missing in memory. This feature is fully supported for both JCache and extended key-value APIs. + </p> - <section id="key-features" class="page-section"> - <h2>More on Key-Value APIs</h2> - <table class="formatted" name="key-value-apis"> - <thead> - <tr> - <th width="35%" class="left">Feature</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td class="left">Data Grid</td> - <td> - <p> - Ignite data grid is a <code>key-value store</code> which can store data both, in-memory - and on-disk. It can be viewed as a distributed partitioned hash map, with every cluster - node owning a portion of the overall data. This way the more cluster nodes we add, - the more data we can store: - </p> - - <div class="page-links"> - <a href="/features/datagrid.html">Docs for this Feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">Durable Memory</td> - <td> - <p> - Ignite <code>Durable Memory</code> allows storing and processing data and indexes - both, in memory and on disk. The in-memory data, including indexes, is always - stored and managed <code>off-heap</code>, completely removing any type of Garbage - Collection overhead. - </p> - <div class="page-links"> - <a href="https://apacheignite.readme.io/docs/durable-memory" target="docs">Docs for this Feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">JCache (JSR 107)</td> - <td> - <p> - Ignite is a 100% compliant implementation of <span style="white-space: nowrap">JCache (JSR 107)</span> specification. - JCache provides a very simple to use, yet very powerful API for data caching: - </p> - <div class="page-links"> - <a href="/use-cases/caching/jcache-provider.html">Docs for this Feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">Memory-Centric Storage</td> - <td> - <p> - Apache Ignite is based on distributed <i>memory-centric architecture</i> that combines the - performance and scale of in-memory computing together with the disk durability and strong - consistency in one system: - </p> - <div class="page-links"> - <a href="/arch/memorycentric.html">Docs for this Feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">Collocated Processing</td> - <td> - <p> - Ignite allows executing any native Java, C++, and .NET/C# code directly on the server-side, - close to the data, in collocated fashion: - </p> - <div class="page-links"> - <a href="/features/collocatedprocessing.html" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">Client-side Near Caches</td> - <td> - <p> - Near cache is local client-side cache that stores the most recently and most frequently accessed data. - </p> - <div class="page-links"> - <a href="http://apacheignite.readme.io/docs/near-caches" target="docs">Docs for this Feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">ACID Transactions</td> - <td> - <p> - Ignite provides fully ACID compliant distributed transactions that ensure guaranteed consistency. - </p> - <div class="page-links"> - <a href="/features/transactions.html">Docs for this Feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left" width="35%">Deadlock-Free Transactions</td> - <td> - <p> - Ignite supports deadlock-free, optimistic transactions, which do not acquire any locks, - and free users from worrying about the lock order. - Such transactions also provide much better performance: - </p> - <div class="page-links"> - <a href="https://apacheignite.readme.io/docs/transactions" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left" width="35%">Transactional Entry Processor</td> - <td> - <p> - Ignite transactional entry processor allows executing collocated user logic on the server - side within a transaction: - </p> - <div class="page-links"> - <a href="https://apacheignite.readme.io/docs/affinity-collocation#ignitecompute-vs-entryprocessor" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left" width="35%">Cross-Partition Transactions</td> - <td> - <p> - In Ignite, transactions can be performed on all partitions of a cache across the whole - cluster: - </p> - <div class="page-links"> - <a href="https://apacheignite.readme.io/docs/transactions#ignitetransactions" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left" width="35%">Locks</td> - <td> - <p> - Ignite allows developers to define explicit locks enforcing mutual exclusion on cached objects: - </p> - <div class="page-links"> - <a href="https://apacheignite.readme.io/docs/distributed-locks" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left" width="35%">Continuous Queries</td> - <td> - <p> - Continuous queries are useful for cases when you want to execute a query and then - continue to get notified about the data changes that fall into your query filter: - </p> - <div class="page-links"> - <a href="https://apacheignite.readme.io/docs/continuous-queries" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left" width="35%">Write-Through</td> - <td> - <p> - Write-Through mode allows updating the data in the database. - </p> - <div class="page-links"> - <a href="https://apacheignite.readme.io/docs/3rd-party-store#read-through-and-write-through" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">Read-Through</td> - <td> - <p> - Read-Through mode allows reading the data from the database. - </p> - <div class="page-links"> - <a href="https://apacheignite.readme.io/docs/3rd-party-store#read-through-and-write-through" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">Write-Behind Caching</td> - <td> - <p> - Ignite provides an option to asynchronously perform updates to the database via Write-Behind Caching. - </p> - <div class="page-links"> - <a href="https://apacheignite.readme.io/docs/3rd-party-store#section-write-behind-caching" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">Hibernate L2 Caching</td> - <td> - <p> - Ignite data grid can be used as <code>Hibernate Second-Level Cache</code> (or L2 cache), - which can significantly speed-up the persistence layer of your application. - </p> - <div class="page-links"> - <a href="https://apacheignite-mix.readme.io/docs/hibernate-l2-cache" target="docs">Docs for this Feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">Spring Caching</td> - <td> - <p> - Ignite provides Spring-annotation-based way to enable caching for Java methods so that - the result of a method execution is stored in the Ignite cache. If later the same - method is called with the same set of parameters, the result will be retrieved from - the cache instead of actually executing the method. - </p> - <div class="page-links"> - <a href="http://apacheignite-mix.readme.io/docs/spring-caching" target="docs">Docs for this Feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">Spring Data</td> - <td> - <p> - Apache Ignite implements Spring Data <code>CrudRepository</code> interface that not only supports basic CRUD operations but also provides access to the Apache Ignite SQL capabilities via the unified Spring Data API. - </p> - <div class="page-links"> - <a href="https://apacheignite-mix.readme.io/docs/spring-data" target="docs">Docs for this Feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - <tr> - <td class="left">OSGI Support</td> - <td> - <p></p> - <div class="page-links"> - <a href="https://apacheignite-mix.readme.io/docs/starting-inside-an-osgi-container" target="docs">Docs for this feature <i class="fa fa-angle-double-right"></i></a> - </div> - </td> - </tr> - </tbody> - </table> - </section> + <div class="page-heading">Ignite Native Persistence</div> + + <p> + If you want Ignite to function as a key-value store that caches data in memory and persists it to + disk, then, alternatively to an external database, you can enable Ignite native persistence. Ignite + persistence lets eliminate time-consuming data reloading phase from external databases as well as a + cache warm-up step. Furthermore, since the native persistence always keeps a full copy of data on disk, + you are free to cache a subset of records in memory. If Ignite finds that a record is missing in memory, + then it will read it from disk automatically + regardless of the API you use. + </p> + + <div class="page-heading">Learn More</div> + <p> + <a href="/arch/memorycentric.html"> + <b>Memory-Centric Storage <i class="fa fa-angle-double-right"></i></b> + </a> + </p> + <p> + <a href="/arch/persistence.html"> + <b>Native Persistence <i class="fa fa-angle-double-right"></i></b> + </a> + </p> + <p> + <a href="/features/transactions.html"> + <b>ACID Transactions <i class="fa fa-angle-double-right"></i></b> + </a> + </p> + <p> + <a href="/features/collocatedprocessing.html"> + <b>Co-located Processing <i class="fa fa-angle-double-right"></i></b> + </a> + </p> + <p> + <a href="/features/sql.html"> + <b>Distributed SQL <i class="fa fa-angle-double-right"></i></b> + </a> + </p> + <p> + <a href="/features/machinelearning.html"> + <b>Machine and Deep Learning <i class="fa fa-angle-double-right"></i></b> + </a> + </p> </section> </main>