blob: 145db9f33f40ac8cf1cf73ab0d2aee6ff82a36c3 [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/use-cases/in-memory-database.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 Database, is a high-performant system-of-records that is capable of
storing and querying much larger data sets from disk with no need for memory warm-ups on restarts."/>
<title>In-Memory Database - 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="key-value-store" class="page-section">
<h1 class="first">In-Memory Database With Transactional Persistence</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>
Apache Ignite, as an in-memory database, is a high-performant system-of-records that is capable
of storing and querying much larger data sets from disk with no need for memory warm-ups on
restarts.
</p>
<p>
That's a distributed database that scales horizontally across memory and disk tiers and supports
ACID transactions, ANSI SQL, key-value, compute, machine learning, and other data processing
APIs.
</p>
</div>
<div class="col-sm-6 col-md-5 col-xs-12" style="padding-right:0">
<img class="img-responsive" src="/images/sql_database.png" width="400px" style="float:right;"/>
</div>
</div>
<div class="page-heading">Memory-Centric Architecture</div>
<p>
Apache Ignite memory management system is memory-centric in the sense that most of the processing takes
place in-memory on cached data with a superset of data persisted to disk. Such an architecture lets
combine advantages of in-memory computing with the disk durability and strong consistency in one system.
</p>
<p>
When the native persistence is enabled, Ignite allows you to control how much memory space is to be
consumed by Ignite. Depending on the memory space available, Ignite either caches a full data set in
memory, thus, performing as fast as it can or keeps only the most frequently data there, pulling
missing records from disk. For instance, if there are 100 records and your memory capacity allows to
cache only 20 of them, then all 100 will be stored on disk, and only 20 will be cached in memory for
better performance.
</p>
<p>
Overall, these are the primary advantages of Ignite memory-centric architecture:
</p>
<ul class="page-list" style="margin-bottom: 20px;">
<li>
Flexible configuration of available memory and disk resources as long as Ignite allows storing a
superset of data on disk and only the most frequently used subsets in memory.
</li>
<li>
Ignite SQL queries and all other APIs can query both cached data sets as well as other data that
is kept on disk only.
</li>
<li>
Instantaneous cluster restarts. Ignite becomes fully operational from disk immediately upon cluster
startup or restarts. There is no need to preload or warm up the in-memory caches.
</li>
</ul>
<div class="page-heading">Better High-Availability With Instantaneous Cluster Restarts</div>
<p>
If you enable Ignite native persistence for your deployments, then there is no need to worry about
time-consuming memory warm-ups on cluster restarts. As long as Ignite persistence always keeps a
superset of data on disk and treats it as one of the storage layers, Ignite starts reading data from
the persistence as soon as the cluster becomes active. The memory tier is warmed up in the background
with the data Ignite accesses on disk for you.
</p>
<div class="page-heading">Avoiding Network Impact on Performance With Co-located Processing</div>
<p>
The disk-centric systems, like RDBMS or NoSQL, generally utilize the classic client-server approach,
when the data is transferred from the server to the client-side where it gets processed and then usually
discarded. This approach does not scale well as moving the data over the network is the most expensive
operation in a distributed system.
</p>
<p>
Many distributed databases, including Apache Ignite, support another more scalable approach called
co-located processing that eliminates or reduces network traffic significantly by running application
logic right on the cluster nodes. This approach executes data or compute-intensive logic, including
distributed SQL with JOINs, exactly where the data resides, thus, reducing data shuffling over the network.
</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/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/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="/features/datagrid.html">
<b>Ignite as an In-Memory Data Grid <i class="fa fa-angle-double-right"></i></b>
</a>
</p>
<p>
<a href="/use-cases/in-memory-cache.html">
<b>Ignite as an In-Memory Cache <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>