blob: cb32e9e9e2c093ba346166e48573e9f909528a39 [file] [log] [blame]
<!--
▄▄▄ ██▓███ ▄▄▄ ▄████▄ ██░ ██ ▓█████ ██▓ ▄████ ███▄ █ ██▓▄▄▄█████▓▓█████
▒████▄ ▓██░ ██▒▒████▄ ▒██▀ ▀█ ▓██░ ██▒▓█ ▀ ▓██▒ ██▒ ▀█▒ ██ ▀█ █ ▓██▒▓ ██▒ ▓▒▓█ ▀
▒██ ▀█▄ ▓██░ ██▓▒▒██ ▀█▄ ▒▓█ ▄ ▒██▀▀██░▒███ ▒██▒▒██░▄▄▄░▓██ ▀█ ██▒▒██▒▒ ▓██░ ▒░▒███
░██▄▄▄▄██ ▒██▄█▓▒ ▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ▒▓█ ▄ ░██░░▓█ ██▓▓██▒ ▐▌██▒░██░░ ▓██▓ ░ ▒▓█ ▄
▓█ ▓██▒▒██▒ ░ ░ ▓█ ▓██▒▒ ▓███▀ ░░▓█▒░██▓░▒████▒ ░██░░▒▓███▀▒▒██░ ▓██░░██░ ▒██▒ ░ ░▒████▒
▒▒ ▓▒█░▒▓▒░ ░ ░ ▒▒ ▓▒█░░ ░▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░ ░▓ ░▒ ▒ ░ ▒░ ▒ ▒ ░▓ ▒ ░░ ░░ ▒░ ░
▒ ▒▒ ░░▒ ░ ▒ ▒▒ ░ ░ ▒ ▒ ░▒░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░ ▒░ ▒ ░ ░ ░ ░ ░
░ ▒ ░░ ░ ▒ ░ ░ ░░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
-->
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="canonical" href="https://ignite.apache.org/use-cases/in-memory-data-grid.html"/>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description"
content="The Apache Ignite® in-memory data grid accelerates and scales out databases, services, and APIs and supports key-value, ANSI SQL, and machine learning APIs"/>
<title>In-Memory Data Grid - Apache Ignite</title>
<!--#include virtual="/includes/styles.html" -->
</head>
<body>
<!--#include virtual="/includes/header.html" -->
<article>
<header>
<div class="container">
<h1><strong>In-Memory Data Grid</strong> with Apache Ignite</h1>
</div>
</header>
<div class="container">
<p>
The Apache Ignite® in-memory data grid accelerates and scales your databases, services,
and APIs. It supports key-value and ANSI SQL APIs, ACID transactions, co-located processing,
and machine learning libraries. As an in-memory data grid, Ignite is frequently used to increase the performance and
scalability of existing real-time applications, for <a href="/use-cases/high-performance-computing.html">
high-performance computing</a>, or for caching of data scattered across databases.
</p>
<img class="img-fluid diagram-right" src="/images/svg-diagrams/data_grid.svg" alt="In-Memory Data Grid with Apache Ignite"/>
<h2>What is an In-Memory Data Grid?</h2>
<p>An in-memory data grid is a read-through/write-through caching strategy in which the application
layer treats the data grid as the primary data store. Applications write to and read
from the in-memory cluster that propagates all the changes to any underlying databases automatically keeping them
updated and consistent with the in-memory data.</p>
<p>Ignite as an in-memory data grid provides all essential APIs needed to simplify its adoption. The
APIs include <a href="/use-cases/key-value-store.html">distributed key-value</a> and <a href="/features/sql.html">ANSI SQL</a> queries, <a href="/features/acid-transactions.html">ACID transactions</a>, <a href="/features/collocated-processing.html">co-located processing</a>,
and <a href="/features/machinelearning.html">machine learning</a> 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 can store data both in memory and on disk with two options for data persistence. You
can persist changes in an external database or have Ignite keep data in its <a href="/arch/native-persistence.html">native persistence</a>. </p>
<h2>IGNITE as an in-memory data grid AND EXTERNAL DATABASES</h2>
<p>Ignite can improve the performance and scalability of any external
database such as RDBMS, NoSQL or Hadoop, by sliding in as an in-memory data grid between the
application and the database layer. When an application writes data to the cache, Ignite
automatically writes-through or writes-behind all data modifications to the underlying
external store. Ignite also performs ACID transactions where it coordinates and commits
a transaction across the cluster as well as the database.</p>
<p>Additionally, 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, there are some limitations if an external database is used as a persistence
layer for Ignite in-memory data grid deployments. For instance, if you run Ignite SQL
or scan queries, you need to ensure that all data is preloaded to the in-memory cluster.
Note that Ignite SQL or scan queries can read data from disk only if the data is stored
in the Ignite native persistence.</p>
<h2>IGNITE NATIVE PERSISTENCE</h2>
<p>Ignite native persistence is a distributed ACID and SQL-compliant disk store that
transparently integrates with the Ignite in-memory layer. With native persistence
enabled, Ignite stores both data and indexes on disk and eliminates the time-consuming
cache warm-up step. The native persistence always keeps a full copy of data on disk so
you are free to cache a subset of records in memory. If a required data record is missing
in memory, Ignite reads it from the disk automatically regardless of the API, whether
you use SQL, key-value, or scan queries.</p>
<div class="jumbotron jumbotron-fluid">
<div class="container">
<div class="display-6 title">Learn More</div>
<hr class="my-4">
<div class="row">
<div class="col-sm-6">
<ul>
<li>
<a href="/features/sql.html">
Distributed SQL <i class="fas fa-angle-double-right"></i>
</a>
</li>
<li>
<a href="/features/collocated-processing.html">
Co-located Processing <i class="fas fa-angle-double-right"></i>
</a>
</li>
<li><a href="/features/acid-transactions.html">
ACID Transactions <i class="fas fa-angle-double-right"></i>
</a></li>
<li><a href="/features/machinelearning.html">
Machine and Deep Learning <i class="fas fa-angle-double-right"></i>
</a></li>
</ul>
</div>
<div class="col-sm-6">
<ul>
<li>
<a href="/arch/native-persistence.html">
Native Persistence <i class="fas fa-angle-double-right"></i>
</a>
</li>
<li><a href="/use-cases/in-memory-database.html">
Ignite as an In-Memory Database <i class="fas fa-angle-double-right"></i>
</a></li>
<li><a href="/use-cases/digital-integration-hub.html">
Ignite as a Digital Integration Hub <i class="fas fa-angle-double-right"></i>
</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</article>
<!--#include virtual="/includes/footer.html" -->
<!--#include virtual="/includes/scripts.html" -->
</body>
</html>