blob: cd553873f0e3046baa43a22150f1002f78b3dd10 [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
"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/features/datagrid.html"/>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<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" -->
</head>
<body>
<div id="wrapper">
<!--#include virtual="/includes/header.html" -->
<main id="main" role="main" class="container">
<section id="datagrid" class="page-section">
<h1 class="first">In-Memory Data Grid With SQL, ACID Transactions and Compute APIs</h1>
<div class="col-sm-12 col-md-12 col-xs-12" style="padding:0 0 20px 0;">
<p>
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 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">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>
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, 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>
<div class="col-sm-4 col-md-4 col-xs-12" style="padding-right:0">
<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">Ignite Native Persistence</div>
<p>
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;"/>
</div>
</div>
<div class="page-heading">Learn More</div>
<p>
<a href="/features/sql.html">
<b>Distributed SQL <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/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="/features/machinelearning.html">
<b>Machine and Deep Learning <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/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>
</section>
</main>
<!--#include virtual="/includes/footer.html" -->
</div>
<!--#include virtual="/includes/scripts.html" -->
</body>
</html>