blob: f21ea645545363622e681b7b1dc001bee80f4ad5 [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>
<head>
<link rel="canonical" href="https://ignite.apache.org/whatisignite.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" />
<title>What is Apache Ignite</title>
<meta name="description" content="Apache Ignite components and facts: in-memory and persistent modes, distributed SQL database, in-memory data grid, in-memory database, ACID transactions, collocated processing, and more..."/>
<link media="all" rel="stylesheet" href="/css/all.css?v=1514336028"/>
<link href="https://netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.css" rel="stylesheet"/>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,300italic,400italic,600,600italic,700,700italic,800,800italic' rel='stylesheet' type='text/css'/>
<!--#include virtual="/includes/sh.html" -->
</head>
<body>
<div id="wrapper">
<!--#include virtual="/includes/header.html" -->
<main id="main" role="main" class="container">
<section id="whatisignite" class="page-section" style="border: none;">
<h1 class="first heading" style="text-align: center;"><span>Apache Ignite&trade; is ...</span></h1>
<div class="col-sm-12 col-md-12 col-xs-12 description-block">
<p style="text-align: center;"><i>memory-centric distributed
<strong>database</strong>, <strong>caching</strong>, and <strong>processing</strong> platform for
transactional, analytical, and streaming workloads,<br/>
delivering <nobr>in-memory</nobr> speeds at petabyte scale</i>
</p>
</div>
<div class="col-sm-12 col-md-12 col-xs-12 img-holder">
<a href="/images/durable-memory.png"><img class="img-responsive" src="/images/durable-memory.png" alt="Apache Ignite - Durable Memory" width="900px;"/></a>
</div>
</section>
<section id="whatisignite-feature-desc" class="page-section" style="border: none;">
<div class="col-sm-12 col-md-12 col-xs-12">
<h3>Durable Memory</h3>
<p>
Ignite's durable memory component treats RAM not just as a caching layer but as a complete fully functional storage layer.
This means that users can turn the persistence on and off as needed. If the persistence is off, then Ignite
can act as a distributed <nobr><i><a href="/use-cases/database/in-memory-database.html">in-memory database</a></i></nobr>
or <nobr><i><a href="/features/datagrid.html">in-memory data grid</a></i></nobr>,
depending on whether you prefer to use SQL or key-value APIs. If the persistence is turned on, then Ignite becomes a distributed,
<nobr><i><a href="/features/sql.html">horizontally scalable database</a></i></nobr> that guarantees full data consistency and is
resilient to full cluster failures.
</p>
<h3>Ignite Persistence</h3>
<p>
Ignite <a href="/features/persistence.html">native persistence</a> is a distributed,
strongly consistent disk store that transparently integrates with Ignite's <i>durable memory</i>.
</p>
<h3>ACID Compliance</h3>
<p>
Data stored in Ignite is ACID-compliant both in memory and on disk, making Ignite a <i><strong>strongly consistent</strong></i> system.
Ignite transactions work across the network and can span multiple servers.
</p>
<h3>Complete SQL Support</h3>
<p>
Ignite provides full support for SQL, DDL and DML, allowing users to interact with Ignite using pure SQL without writing any code.
This means that users can create tables and indexes as well as insert, update, and query data using only SQL. Having such complete SQL support makes Ignite a one-of-a-kind
<i><a href="/features/sql.html">distributed SQL database</a></i>.
</p>
<h3>Key-Value</h3>
<p>
The in-memory data grid component in Ignite is a fully transactional <i><a href="/use-cases/database/key-value-store.html">distributed key-value store</a></i> that can scale horizontally
across 100s of servers in the cluster. When persistence is enabled, Ignite can also store more data than fits in memory and survive full cluster restarts.
</p>
<h3>Collocated Processing</h3>
<p>
Most traditional databases work in a client-server fashion, meaning that data must be brought to the client side for processing. This approach requires
lots of data movement from servers to clients and generally does not scale. Ignite, on the other hand, allows for sending light-weight computations to the data,
i.e. <nobr><i><a href="/features/collocatedprocessing.html">collocating computations with data</a></i></nobr>. As a result, Ignite scales better and minimizes data movement.
</p>
<h3>Scalability and Durability</h3>
<p>
Ignite is an elastic, horizontally scalable distributed system that supports adding and removing cluster nodes on demand. Ignite also allows for
storing multiple copies of the data, making it resilient to partial cluster failures. If the persistence is enabled, then data stored in Ignite
will also survive full cluster failures. Cluster restarts in Ignite can be very fast, as the data becomes operational instantaneously directly from disk.
As a result, the data does not need to be preloaded in-memory to begin processing, and Ignite caches will lazily warm up resuming the in memory performance.
</p>
</div>
</section>
<section id="ignite-faq" class="page-section">
<div class="col-sm-12 col-md-12 col-xs-12" style="margin-top: 20px;">
<h2 style="text-align: center; color: #e50000;">Ignite Facts</h2>
<hr><br/><br/><br/>
<h3>Is Ignite a persistent or memory-only storage?</h3>
<p>
<strong>Both</strong>. Native persistence in Ignite can be turned on and off. This allows Ignite to store
data sets bigger than can fit in the available memory. Essentially, smaller operational data sets
can be stored in-memory only, and larger data sets that do not fit in memory can be stored on disk,
using memory as a caching layer for better performance.
</p>
<br/><br/>
<h3>Is Ignite an in-memory database (IMDB)?</h3>
<p>
<strong>Yes</strong>. Even though Ignite durable memory works well in-memory and on-disk, the disk
persistence can be disabled and Ignite can act as a distributed in-memory database, with
support for SQL and distributed joins.
</p>
<br/><br/>
<h3>Is Ignite an in-memory data grid (IMDG)?</h3>
<p>
<strong>Yes</strong>. Ignite is a full-featured distributed key-value data grid, which can be used either in
memory-only mode or with Ignite native persistence. It can also automatically integrate with any 3rd party databases,
including any RDBMS or NoSQL stores.
</p>
<br/><br/>
<h3>Is Ignite a distributed cache?</h3>
<p>
<strong>Yes</strong>. When native persistence is disabled, Ignite becomes a distributed cache.
Ignite implements JCache specification (JSR 107) and provides
a lot more functionality than required by the specification, including partitioned and replicated
distribution modes, distributed ACID transactions, SQL queries, native persistence, and more.
</p>
<br/><br/>
<h3>Is Ignite a distributed database?</h3>
<p>
<strong>Yes</strong>. Data in Ignite is either partitioned or replicated across a cluster of
multiple nodes. This provides scalability and adds resiliency to the system. Ignite automatically
controls how data is partitioned, however, users can plugin their own distribution (affinity) functions
and collocate various pieces of data together for efficiency.
</p>
<br/><br/>
<h3>Is Ignite an SQL database?</h3>
<p>
<strong>Not fully</strong>. Although Ignite aims to behave like any other relational SQL database,
there are differences in how Ignite handles constraints and indexes. Ignite supports primary and
secondary indexes, however, the uniqueness can only be enforced for the primary indexes.
Ignite also does not support foreign key constraints.
</p>
<p>
Essentially, Ignite purposely does not support any constraints that would entail a cluster-wide broadcast
message for each update and significantly hurt performance and scalability of the system.
</p>
<br/><br/>
<h3>Is Ignite a NoSQL database?</h3>
<p>
<strong>Not exactly</strong>. Just like other NoSQL databases, Ignite is highly available and
horizontally scalable. However, unlike other NoSQL databases, Ignite supports SQL and ACID transactions.
</p>
<br/><br/>
<h3>Is Ignite a transactional database?</h3>
<p>
<strong>Not fully</strong>. ACID Transactions are supported, but only at key-value API level.
Ignite also supports cross-partition transactions, which means that transactions can span keys
residing in different partitions on different servers.
</p>
<p>
At SQL level Ignite supports atomic, but not yet transactional consistency. Ignite community plans
to implement SQL transactions in version 2.5.
</p>
<br/><br/>
<h3>Is Ignite a multi-model database?</h3>
<p>
<strong>Yes</strong>. Ignite supports both, key-value and SQL for modelling and accessing data.
In addition, Ignite provides strong processing APIs for computing on distributed data.
</p>
<br/><br/>
<h3>Is Ignite a key-value store?</h3>
<p>
<strong>Yes</strong>. Ignite provides a feature rich key-value API, that is JCache (JSR-107) compliant
and supports Java, C++, <nobr>and .NET.</nobr>
</p>
<p><a href="https://apacheignite.readme.io/docs/data-grid"></a></p><br/><br/>
<h3>Book</h3>
<p>Learn even more from <a href="http://a.co/h4MBi1v" target="_blank">High-Performance in-memory computing with Apache Ignite</a> book.</p>
</div>
</section>
</main>
<!--#include virtual="/includes/footer.html" -->
</div>
<!--#include virtual="/includes/scripts.html" -->
</body>
</html>