You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dm...@apache.org on 2020/02/05 16:41:53 UTC
svn commit: r1873655 - in /ignite/site/branches/ignite-redisign: ./
features/ includes/ use-cases/ use-cases/database/
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>