blob: 5d72490dc7e8ba66e64f5d79e8094ba091315636 [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 in a form of key-value pairs
across the cluster. The underlying key-value store distributes the data evenly 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 Persistent Store is a distributed ACID and SQL-compliant disk store that transparently
integrates with Ignite's durable memory as an optional disk layer storing data and indexes on
SSD, Flash, 3D XPoint, and other types of non-volatile storages.
</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 complies with SQL ANSI-99 standard supporting all <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 relevant for distributed SQL databases.
</p>
<div class="page-heading">Key-value</div>
<p>
Apache Ignite key-value APIs are compliant with <a href="/use-cases/caching/jcache-provider.html">
JCache (JSR 107)</a> specification and provide extended features built on top such as
distributed ACID transactions, scan and continuous queries, collocated processing.
</p>
<div class="page-heading">Collocated Processing</div>
<p>
The disk-centric systems, like RDBMS or NoSQL, generally utilize the classic client-server
approach, where the data is brought from the server to the client side where it gets processed
and then is 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>
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 staring TBs of data both in memory and on disk.
</p>
<div class="page-heading">Redundancy</div>
<p>
Ignite also allows to configure multiple <b>backup copies</b> to guarantee data resiliency
in case of 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>