Author: dmagda Date: Fri Jan 31 20:53:39 2020 New Revision: 1873446 URL: http://svn.apache.org/viewvc?rev=1873446&view=rev Log: Updated in-memory caching and data grid pages
Added: ignite/site/branches/ignite-redisign/use-cases/in-memory-cache.html - copied, changed from r1873445, ignite/site/branches/ignite-redisign/use-cases/caching/database-caching.html ignite/site/branches/ignite-redisign/use-cases/spark-acceleration.html - copied unchanged from r1873445, ignite/site/branches/ignite-redisign/use-cases/spark/spark-acceleration.html Removed: ignite/site/branches/ignite-redisign/use-cases/caching/database-caching.html ignite/site/branches/ignite-redisign/use-cases/database/distributed-database-2.html ignite/site/branches/ignite-redisign/use-cases/database/sql-database-2.html ignite/site/branches/ignite-redisign/use-cases/spark/ Modified: ignite/site/branches/ignite-redisign/.htaccess ignite/site/branches/ignite-redisign/features/datagrid.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=1873446&r1=1873445&r2=1873446&view=diff ============================================================================== --- ignite/site/branches/ignite-redisign/.htaccess (original) +++ ignite/site/branches/ignite-redisign/.htaccess Fri Jan 31 20:53:39 2020 @@ -12,7 +12,8 @@ Redirect 301 /memorycentric.html /arch/m Redirect 301 /features/persistence.html /arch/persistence.html Redirect 301 /features/deploy.html /arch/clustering.html Redirect 301 /features/igniterdd.html /use-cases/spark/shared-memory-layer.html -Redirect 301 /use-cases/spark/shared-memory-layer.html /use-cases/spark/spark-acceleration.html +Redirect 301 /use-cases/spark/shared-memory-layer.html /use-cases/spark-acceleration.html +Redirect 301 /use-cases/caching/database-caching.html /use-cases/in-memory-cache.html RewriteEngine On Modified: ignite/site/branches/ignite-redisign/features/datagrid.html URL: http://svn.apache.org/viewvc/ignite/site/branches/ignite-redisign/features/datagrid.html?rev=1873446&r1=1873445&r2=1873446&view=diff ============================================================================== --- ignite/site/branches/ignite-redisign/features/datagrid.html (original) +++ ignite/site/branches/ignite-redisign/features/datagrid.html Fri Jan 31 20:53:39 2020 @@ -33,15 +33,16 @@ under the License. <!DOCTYPE html> <html lang="en"> <head> - <link rel="canonical" href="https://ignite.apache.org/features/datagrid.html" /> + <link rel="canonical" href="https://ignite.apache.org/features/datagrid.html"/> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> - <meta http-equiv="Pragma" content="no-cache" /> - <meta http-equiv="Expires" content="0" /> - <meta name="description" content="Apache Ignite In-Memory Data Grid is a distributed transactional key-value store that stores data - in-memory and on-disk and supports key-value, SQL, and processing APIs"/> + + <meta name="description" + content="Apache Ignite as an In-Memory Data Grid accelerates and scales your databases, services, and APIs + with support of ANSI SQL, ACID transactions, co-located compute, and machine learning."/> + <title>In-Memory Data Grid - Apache Ignite</title> + <!--#include virtual="/includes/styles.html" --> <!--#include virtual="/includes/sh.html" --> @@ -55,30 +56,49 @@ under the License. <h1 class="first">Key-Value In-Memory Data Grid</h1> <div class="col-sm-12 col-md-12 col-xs-12" style="padding:0 0 20px 0;"> <p> - Ignite provides extensive and rich key-value APIs and can act as an in-memory data grid. - You can think of Ignite as of a distributed partitioned hash map with every - cluster node owning a portion of the overall data set. Unlike other in-memory data grids (IMDG), - Ignite enables storing data both, in memory and on disk, and - therefore is able to store more data than can fit in the physical memory. + Apache Ignite provides an extensive set of APIs to act as an in-memory data grid that integrates into + your existing architecture and accelerates databases, services, or custom APIs. + </p> + <p> + An in-memory data grid type of deployment is also known as a read-through/write-through caching + strategy. With this strategy, Ignite plugs into your existing architecture seamlessly, and the + application layer starts treating it as a primary store. Your application layer writes to and reads + from Ignite, while the latter ensures that any underlying external databases stay updated and + consistent with in-memory data. + </p> + <p> + As an in-memory data grid, Ignite provides all the essential developer APIs needed to simplify its + adoption. The APIs include distributed key-value and ANSI SQL queries, ACID transactions, + co-located computations, and machine learning models. While key-value and SQL calls let you request, + join, and group distributed data sets, the compute and machine learning components help to eliminate + data shuffling over the network, thus, boosting compute and data-intensive calculations. </p> <p> - Ignite data grid is one of the fastest implementations of ACID transactions or - atomic data updates in distributed clusters today. We know it because we constantly benchmark it ourselves. + Ignite is capable of storing data both in memory and on disk with two options for data persistence + -- you can persist changes in an external database or let Ignite keep data in its native persistence. + Let's review two of them. </p> + <div class="col-sm-8 col-md-8 col-xs-12" style="padding-left:0; padding-right:0"> - <div class="page-heading">3rd Party Databases</div> + <div class="page-heading">Ignite and External Databases</div> + <p> + Ignite as an in-memory data grid can improve performance and scalability of existing external + databases such as RDBMS, NoSQL or Hadoop, by sliding in as an in-memory cache between the application + and database layers. Ignite will automatically write-through or write-behind all the changes to + an external store. It also includes ACID transactions - Ignite coordinates and commits a + transaction across its in-memory cluster as well as a relational database. + </p> <p> - Ignite in-memory data grid can improve performance and scalability of existing 3rd party databases - RDBMS, - NoSQL, or Hadoop-based storages, by sliding in as a distributed cache between the application and database layers. - Ignite will automatically write-through or read-through all the updates - or reads to or from the underlying database. Ignite will also merge with the underlying database - transactions, providing transparent transactional behavior to the users. + In addition to that, Ignite can be deployed as a shared and unified in-memory layer that stores + data sets originating from disjointed databases. Your applications can consume all the data from + Ignite as a single store while Ignite can keep the original databases in sync whenever in-memory + data gets updated. </p> <p> - However, this approach has its limitations. For example, SQL or scan queries will only include the - results stored in memory, and not in the external database, since Ignite cannot index the external data. - If you require that data on disk should be indexed and accessible via SQL queries, we recommend that you look at - <a href="/arch/persistence.html">Ignite native persistence</a>. + However, there are some limitations if an external database is used as a persistence layer for + Ignite deployments. For instance, if you run Ignite SQL or scan queries, you need to ensure + that all the data has already been preloaded to the in-memory cluster. Note that Ignite SQL or + scan queries can read data from disk only if it's stored in Ignite native persistence. </p> </div> @@ -86,435 +106,65 @@ under the License. <img class="img-responsive" src="/images/IMDG.png" width="300px" style="float:right;"/> </div> </div> + <div class="col-sm-12 col-md-12 col-xs-12" style="padding:0 0 20px 0;"> <div class="col-sm-8 col-md-8 col-xs-12" style="padding-left:0; padding-right:0"> - <div class="page-heading">Native Persistence</div> + <div class="page-heading">Ignite Native Persistence</div> <p> - Ignite <a href="/arch/persistence.html">native persistence</a> is a distributed ACID and SQL-compliant disk store that transparently - integrates with Ignite's durable memory. Ignite persistence is optional and can be turned on and off. - When turned off, Ignite becomes a pure in-memory store. When native persistence is enabled, Ignite stores - both data and indexes on disk. A subset of data and the most frequently used indexes are stored in memory. - Additionally, since Ignite persists indexes on disk, they do not have to be rebuilt on cluster - restart making the system faster than other in-memory databases. + Ignite native persistence is a distributed ACID and SQL-compliant disk store that transparently + integrates with Ignite in-memory layer. When native persistence is enabled, Ignite stores + both data and indexes on disk. + The native 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 -- let it be SQL, key-value, or scan queries. </p> </div> <div class="col-sm-4 col-md-4 col-xs-12" style="padding-right:0"> - <img class="img-responsive" src="/images/native_persistence_key_value.png" width="300px" style="float:right;"/> + <img class="img-responsive" src="/images/native_persistence_key_value.png" width="300px" + style="float:right;"/> </div> </div> - <div class="page-heading">Key-Value APIs</div> + <div class="page-heading">Learn More</div> <p> - In addition to the standard <a href="/use-cases/caching/jcache-provider.html">JCache (JSR 107)</a> API, Ignites supports distributed ACID transactions, - scan and continuous queries, collocated processing and more. + <a href="/features/sql.html"> + <b>Distributed SQL <i class="fa fa-angle-double-right"></i></b> + </a> </p> - <p> - The data grid has been built from the ground up to linearly scale to hundreds of nodes with strong - semantics for data locality and affinity data routing to reduce redundant data noise. 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 cache. + <a href="/features/collocatedprocessing.html"> + <b>Co-located processing <i class="fa fa-angle-double-right"></i></b> + </a> </p> - - <div class="page-heading">Affinity Collocation</div> <p> - To improve performance and scalability of an application, Ignite allows collocating data with data or compute with data. - By collocating related cache keys together, you can make sure that all keys will be cached on the same processing node, - hence avoiding costly network trips to fetch data from remote nodes. - It is also possible to route computations to the nodes where the data is cached. + <a href="/features/machinelearning.html"> + <b>Machine Learning <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="/arch/persistence.html"> + <b>Native Persistence <i class="fa fa-angle-double-right"></i></b> + </a> + </p> + <p> + <a href="/use-cases/database/in-memory-database.html"> + <b>Ignite as an In-Memory Database <i class="fa fa-angle-double-right"></i></b> + </a> + </p> + <p> + <a href="TODO"> + <b>Ignite as a Digital Integration Hub <i class="fa fa-angle-double-right"></i></b> + </a> </p> - <div class="videos"> - <div class="page-heading">Videos</div> - <ul class="page-list"> - <li> - <i class="fa fa-lg fa-play-circle-o"></i> - <span class="video-title"> - <a target="youtube" href="https://www.youtube.com/watch?v=pFbDWpOiMOU">Getting Started with Data Grid</a> - </span> - <span class="video-duration">03:49</span> - </li> - </ul> - </div> - - <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> - <li><a href="#datagrid-example-sqlquery" role="tab" data-toggle="tab">SQL Query</a></li> - <li><a href="#datagrid-example-sqljoin" role="tab" data-toggle="tab">SQL Join</a></li> - <li><a href="#datagrid-example-sqlaggregation" role="tab" data-toggle="tab">SQL Aggregation</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 role="tabpanel" class="tab-pane" id="datagrid-example-sqlquery"> - <pre class="brush:java"> - IgniteCache<Long, Person> cache = ignite.cache("mycache"); - - SqlFieldsQuery sql = new SqlFieldsQuery( - "select concat(firstName, ' ', lastName) from Person"); - - // Select concatinated first and last name for all persons. - try (QueryCursor<List<?>> cursor = cache.query(sql)) { - for (List<?> row : cursor) - System.out.println("Full name: " + row.get(0)); - } - </pre> - </div> - <div role="tabpanel" class="tab-pane" id="datagrid-example-sqljoin"> - <pre class="brush:java"> - IgniteCache<Long, Person> personCache = ignite.cache("personCache"); - - // Select with join between Person and Organization to - // get the names of all the employees of a specific organization. - SqlFieldsQuery sql = new SqlFieldsQuery( - "select p.name " - + "from Person p, \"orgCache\".Organization o where " - + "p.orgId = o.id " - + "and o.name = ?"); - - // Execute the query and obtain the query result cursor. - try (QueryCursor<List<?>> cursor = personCache.query(sql.setArgs("Ignite"))) { - for (List<?> row : cursor) - System.out.println("Person name=" + row); - } - </pre> - </div> - <div role="tabpanel" class="tab-pane" id="datagrid-example-sqlaggregation"> - <pre class="brush:java"> - IgniteCache<Long, Person> personCache = ignite.cache("personCache"); - - // Select average age of people working within different departments. - SqlFieldsQuery sql = new SqlFieldsQuery( - "select avg(p.age) as avg_age, d.name as dpmt_name, o.name as org_name " - + "from Person p, \"depCache\".Department d, \"orgCache\".Organization o " - + "where p.depid = d.id and d.orgid = o.id " - + "group by d.name, o.name " - + "order by avg_age"; - - // Execute the query and obtain the query result cursor. - try (QueryCursor<List<?>> cursor = personCache.query(sql.setArgs("Ignite"))) { - for (List<?> row : cursor) - System.out.println("Average age by department and organization: " + row); - } - </pre> - </div> - </div> - </div> - </section> - - <section id="key-features" class="page-section"> - <h2>More on Data Grid</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">Key-Value Store</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="/use-cases/database/key-value-store.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 supports distributed ACID transactions for key-value as well as SQL operations. - </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> </main> Modified: ignite/site/branches/ignite-redisign/includes/header.html URL: http://svn.apache.org/viewvc/ignite/site/branches/ignite-redisign/includes/header.html?rev=1873446&r1=1873445&r2=1873446&view=diff ============================================================================== --- ignite/site/branches/ignite-redisign/includes/header.html (original) +++ ignite/site/branches/ignite-redisign/includes/header.html Fri Jan 31 20:53:39 2020 @@ -54,14 +54,14 @@ onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'distributed_sql');"> Distributed SQL</a> </li> - <li><a href="/features/datagrid.html" aria-label="DataGrid" + <li><a href="#TODO" aria-label="DataGrid" onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'distributed_key_value');"> Distributed Key-Value</a> </li> - <!--<li><a href="/arch/persistence.html"--> - <!--onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'persistence');">--> - <!--Distributed Persistence</a>--> - <!--</li>--> + <li><a href="/arch/persistence.html" + onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'persistence');"> + Native Persistence</a> + </li> <li><a href="/features/transactions.html" aria-label="Transactions" onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'acid_transactions');"> ACID Transactions</a> @@ -103,7 +103,8 @@ <a class="dropdown-toggle" data-toggle="dropdown" aria-label="Use Cases">Use Cases<span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> - <li><a href="/use-cases/caching/database-caching.html" + <li role="presentation" class="submenu-header">Caching & Database</li> + <li><a href="/use-cases/in-memory-cache.html" aria-label="In-Memory Cache" onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'in_memory_cache');"> In-Memory Cache</a> @@ -116,15 +117,26 @@ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'distributed-database');"> In-Memory Database</a> </li> - <li><a href="#" aria-label="Digital Integration Hub" - onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'digital_integration_hub');"> - Digital Integration Hub</a> - </li> <li><a href="/use-cases/database/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> - <li><a href="/use-cases/spark/spark-acceleration.html" + <li class="divider"> + + <li role="presentation" class="submenu-header">Data & Compute Hubs</li> + <li><a href="#TODO" aria-label="Digital Integration Hub" + onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'digital_integration_hub');"> + Digital Integration Hub</a> + </li> + <li><a href="#TODO" aria-label="Compute Engine" + onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'massive_parallel_processing');"> + Compute Engine</a> + </li> + + <li class="divider"> + + <li role="presentation" class="submenu-header">Faster Analytics</li> + <li><a href="/use-cases/spark-acceleration.html" aria-label="Apache Spark Acceleration" onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'apache_spark_acceleration');"> Apache Spark Acceleration</a> @@ -134,7 +146,11 @@ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'hadoop_acceleration');"> Apache Hadoop Acceleration</a> </li> - <li><a href="/provenusecases.html" aria-label="Proven Use Cases" + + <li class="divider"> + + <li role="presentation" class="submenu-header">Ignite in Production</li> + <li><a href="/provenusecases.html" aria-label="Powered by Ignite" onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'proven_usecases');"> Powered by Ignite</a> </li> Copied: ignite/site/branches/ignite-redisign/use-cases/in-memory-cache.html (from r1873445, ignite/site/branches/ignite-redisign/use-cases/caching/database-caching.html) URL: http://svn.apache.org/viewvc/ignite/site/branches/ignite-redisign/use-cases/in-memory-cache.html?p2=ignite/site/branches/ignite-redisign/use-cases/in-memory-cache.html&p1=ignite/site/branches/ignite-redisign/use-cases/caching/database-caching.html&r1=1873445&r2=1873446&rev=1873446&view=diff ============================================================================== --- ignite/site/branches/ignite-redisign/use-cases/caching/database-caching.html (original) +++ ignite/site/branches/ignite-redisign/use-cases/in-memory-cache.html Fri Jan 31 20:53:39 2020 @@ -36,7 +36,13 @@ under the License. <link rel="canonical" href="https://ignite.apache.org/use-cases/caching/database-caching.html" /> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Distributed In-Memory Cache With SQL and ACID Transactions - Apache Ignite</title> + + <meta name="description" + content="Apache Ignite as an In-Memory Cache accelerates and scales your databases, services, and APIs + with support of ANSI SQL, ACID transactions, co-located compute, and machine learning."/> + + <title>In-Memory Cache - Apache Ignite</title> + <!--#include virtual="/includes/styles.html" --> <!--#include virtual="/includes/sh.html" --> @@ -47,16 +53,14 @@ under the License. <main id="main" role="main" class="container"> <section id="database-caching" class="page-section"> - <h1 class="first">Distributed In-Memory Cache With SQL and ACID Transactions</h1> + <h1 class="first">In-Memory Cache With ANSI SQL, ACID Transactions and Compute APIs</h1> <div class="col-sm-12 col-md-12 col-xs-12" style="padding:0 0 20px 0;"> <div class="col-sm-6 col-md-6 col-xs-12" style="padding-left:0;"> <p> - Distributed in-memory cache that supports ANSI SQL, ACID transactions and co-located - computations is one of the usage scenarios Apache Ignite is selected for. From web sessions - and financial instruments caching to external APIs and existing databases acceleration, Ignite - provides all essential components needed to speed up enterprise applications as well as - microservices-based architectures that require more than standard key-value look-ups for data - processing. + Distributed in-memory cache that supports ANSI SQL, ACID transactions, and co-located + computations is one of the usage scenarios Apache Ignite is selected for. From sessions and + APIs caching to databases and microservices acceleration, Ignite provides all essential + components needed to speed things up. </p> </div> <div class="col-sm-6 col-md-5 col-xs-12" style="padding-right:0"> @@ -65,65 +69,63 @@ under the License. </div> <p> - As a typical distributed cache, you would span Ignite cluster across several interconnected - physical or virtual machines letting it utilize all the available memory and CPU resources. - However, the difference comes in a way you can utilize the cluster once it's up and running. In - addition to classic key-value APIs you can run distributed SQL queries joining and grouping - various data sets. If strong consistency is required, you can execute multi-records and - cross-cache ACID transactions in both pessimistic and optimistic modes. Next, if an - application runs compute or data-intensive logic, you can minimize data shuffling and network - utilization by running co-located computations and distributed machine learning APIs on the cluster - nodes that store actual data. + As with classic distributed caches, you would span an Ignite cluster across several interconnected + physical or virtual machines letting it utilize all the available memory and CPU resources. However, + the difference comes in a way you can use the cluster once it's up and running. In addition to + standard key-value APIs, you can run distributed SQL queries joining and grouping various data sets. + If strong consistency is required, you can execute multi-records and cross-cache ACID transactions in + both pessimistic and optimistic modes. Next, if an application runs compute or data-intensive logic, + you can minimize data shuffling with network utilization by running co-located computations and + distributed machine learning APIs right on the cluster nodes that store your data. </p> <p> There are two primary deployment strategies for Ignite as an in-memory cache -- the cache-aside one and - read-through/write-through caching. Let's review both separately. + read-through/write-through caching. Let's review two of them. </p> <div class="page-heading">Cache-Aside Deployment</div> <p> - With the cache-aside deployment strategy, the cache is deployed separately from a primary data store - and might not even know about existence of the latter. An application layer becomes in charge of - synchronization between a cache and a primary data store. If a record gets updated in the data store - then either the application or some change-data-capture (CDC) process needs to refresh a similar - record in the cache. - </p> - <p> - This strategy works well when the cached data is rather static and not updated frequently or - temporary data lag/inconsistency is allowed between the primary store and the in-memory cache. It's - assumed that the cache and the store will become consistent eventually as soon as soon as changes are - replicated in full. - </p> - <p> - If Apache Ignite is deployed in this configuration, then its native persistence can be used as a disk - store. This lets eliminate time-consuming data reloading phase from the primary store as well as - a cache warm-up step. Furthermore, the native persistence allows you to cache a subset of the data - by keeping the full copy on disk. If any piece of data is not cached in RAM then Ignite will take - it from disk automatically regardless of the API you use let it be SQL, key-value or scan queries. + With the cache-aside deployment strategy, a cache is deployed separately from a primary data store and + might not even know that the latter exists. An application or change-data-capture process (CDC) becomes + responsible for data synchronization between these two storage locations. For instance, if any record + gets updated in the primary store, then its new value needs to be replicated to the cache. + </p> + <p> + This strategy works well when the cached data is rather static and not updated frequently, or + temporary data lag/inconsistency is allowed between the two storage locations. It's usually assumed + that the cache and the primary store will become consistent eventually as soon as changes are replicated + in full. + </p> + <p> + If Apache Ignite is deployed in a cache-aside configuration, then its native persistence can be used as + a disk store for Ignite data sets. The native persistence lets eliminate time-consuming data reloading + phase from the primary store 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 -- let it be SQL, key-value, or scan queries. </p> <div class="page-heading">Read-Through/Write-Through Caching</div> <p> - The read-through/write-through caching strategy can also be classified as an in-memory data grid type - of deployment. When Apache Ignite is deployed as a data grid, the application layer starts - treating an Ignite cluster as the primary store. The applications write to and read from Ignite only - and it becomes Ignite's responsobility to keep an underlying external database updated and - consistent with the in-memory data. + The read-through/write-through caching strategy can also be classified as an in-memory data grid type of + deployment. When Apache Ignite is deployed as a data grid, the application layer starts treating Ignite + as the primary store. The applications write to and read from Ignite while the latter ensures that any + underlying external databases stay updated and consistent with the in-memory data. </p> <p> - This strategy is favorable for architectures that need to accelerate performance or scale external - disk-based databases such as RDBMS or NoSQL. Ignite integrates with many databases out-of-the box and - can write-through or write-behind all the changes to them. This also includes ACID transactions - - Ignite will coordinate and commit a transaction across its own in-memory cluster as well as to a - relational database. + This strategy is favorable for architectures that need to accelerate existing disk-based databases or + create a shared caching layer across many disconnected data sources. Ignite integrates with many + databases out-of-the box and can write-through or write-behind all the changes to them. This also + includes ACID transactions - Ignite will coordinate and commit a transaction across its own in-memory + cluster as well as to a relational database. </p> <p> - The read-through capability assumes that a cache can read data from the external database if a record - is missing in memory. Ignite fully supports this capability for key-value APIs. However, if Ignite - SQL is at use then you have to preload an entire data set from the underlying database first. (Note, - that Ignite SQL can query disk if data is persisted in its own native persistence). + The read-through capability implies that a cache can read data from an external database if a record is + missing in memory. Ignite fully supports this capability for key-value APIs. However, if Ignite SQL is + at use then you have to preload an entire data set in memory first. (Note, that Ignite SQL can query + data on disk only if it's located in its native persistence). </p> <div class="page-heading">Learn More</div> <p> @@ -142,7 +144,7 @@ under the License. </a> </p> <p> - <a href="https://apacheignite.readme.io/docs/distributed-persistent-store" target="docs"> + <a href="/arch/persistence.html"> <b>Native Persistence <i class="fa fa-angle-double-right"></i></b> </a> </p>