blob: 9a5ef11293e5078e346f9a948f898b04cbfd4c56 [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/use-cases/database/distributed-database.html"/>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Distributed Database - Apache Ignite</title>
<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 media="all" rel="stylesheet" href="/css/syntaxhighlighter.css">
<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="key-value-store" class="page-section">
<h1 class="first">Distributed Database</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 can be used as all-in-one distributed database that supports SQL, key-value,
compute, machine learning and other data processing APIs.
</p>
<p>
Regardless of the API you decide to use, the data is always stored off-heap in the cluster-aware
page-based storage which tries to evenly distribute the data, guaranteeing that
every cluster node will own a portion of the overall data set.
</p>
<p>
The data and indexes can be stored both in RAM and, optionally, on disk if
<a href="/arch/persistence.html">Ignite Native Persistence</a> is enabled.
</p>
<p>
Ignite native persistent store utilizes disk to allow Ignite users store and process
more data than can fit in memory. It also adds extra resiliency and crash recovery capabilities
and supports full cluster restarts without loosing data. Moreover, when persistence is turned on,
the cluster restarts are almost instantaneous, as Ignite becomes immediately operational from
disk without having to preload all the data in memory.
</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">SQL</div>
<p>
Ignite is ANSI-99 compliant, supporting most <b>SQL</b> and <b>DML</b> commands,
including SELECT, UPDATE, INSERT, MERGE, DELETE statements and distributed joins. It also provides
support for a subset of <b>DDL</b> commands, including CREATE and ALTER commands for tables and indexes.
</p>
<div class="page-heading">Key-value</div>
<p>
Ignite can be used ad a distributed key-value store, supporting all map-like key-value operations, including
concurrent CAS operations. It also provides rich support for distributed ACID transactions, continuous
queries, collocated processing and more. Ignite key-value store is fully compliant with
<a href="/use-cases/caching/jcache-provider.html">JCache (JSR 107)</a> specification.
</p>
<div class="page-heading">Collocated Processing</div>
<p>
Most disk-centric databases, like RDBMS or NoSQL, generally utilize the classic client-server
approach, where the data is brought from the server to the client where it gets processed
and then 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>
A much more scalable approach is <a href="/features/collocatedprocessing.html">
collocated processing</a> that reverses the flow by bringing the computations to the servers where
the data actually resides. This approach allows you to execute advanced logic or distributed SQL
with JOINs exactly where the data is stored, avoiding expensive serialization and network trips.
</p>
<div class="page-heading">Partitioning & Replication</div>
<p>
Depending on the configuration, Ignite can either partition or replicate data.
Unlike <code>REPLICATED</code> mode, where data is fully replicated across all nodes
in the cluster, in <code>PARTITIONED</code> mode Ignite will equally split the data across
multiple cluster nodes, allowing for storing Terabytes of data in memory and on disk.
</p>
<div class="page-heading">Redundancy</div>
<p>
Ignite also allows to configure multiple <b>backup copies</b> guaranteeing data resiliency
in case of individual node or server failures.
</p>
<div class="page-heading">Consistency</div>
<p>
Regardless of which replication scheme is used, Ignite guarantees data consistency across
all cluster members.
</p>
<p>
Check <a href="/features/sql.html">SQL</a>,
<a href="/features/datagrid.html" class="text-nowrap">Data Grid</a>, and
<a href="/features/computegrid.html" class="text-nowrap">Compute Grid</a>
features sections for more technical details.
</p>
</section>
</main>
<!--#include virtual="/includes/footer.html" -->
</div>
<!--#include virtual="/includes/scripts.html" -->
</body>
</html>