blob: a0ba69709ac78de6d460971dc42d624f5e6f94b2 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1" />
<title>Distributed ANSI SQL | Apache Ignite</title>
<link rel="stylesheet" href="/js/vendor/hystmodal/hystmodal.min.css" />
<link rel="stylesheet" href="/js/vendor/swiper/swiper-bundle.min.css" />
<link rel="stylesheet" href="/css/utils.css" />
<link rel="stylesheet" href="/css/site.css" />
<link rel="stylesheet" href="/css/media.css" media="only screen and (max-width:1199px)" />
<link rel="icon" type="image/png" href="/img/favicon.png" />
<link rel="stylesheet" href="../css/native-persistence.css" />
<link rel="stylesheet" href="../css/compute-apis.css" />
<link rel="stylesheet" href="../css/sql.css" />
</head>
<body>
<!-- MOBILE MENU START -->
<div class="hystmodal" id="jsMenuModal" aria-hidden="true">
<div class="hystmodal__wrap">
<div class="hystmodal__window mobmenu" role="dialog" aria-modal="true">
<button data-hystclose class="hystmodal__close">Close</button>
<div class="mobmenu__wrap">
<a href="/" class="mobmenu__logo"><img src="/img/logo.svg" alt="Логотип" /></a>
<div class="mobmenu__menu">
<div class="mobmenu__h1 berlin">Navigation</div>
<ul>
<li>
<a href="/">Get started</a>
</li>
<li>
<a href="/features/">Features</a>
</li>
<li>
<a href="/community.html">Community</a>
</li>
<li>
<a href="/use-cases/provenusecases.html">Powered by</a>
</li>
<li>
<a href="https://ignite.apache.org/docs/latest/">Docs</a>
</li>
</ul>
</div>
<!-- //mobmenu__menu -->
</div>
<!-- //mobmenu__wrap -->
</div>
<!-- //mobmenu -->
</div>
</div>
<!-- MOBILE MENU END -->
<header class="hdr hdr__blue">
<div class="cmtyhero__wrap flexi">
<button class="hdr__burger" data-menumodal="#jsMenuModal"><img src="/img/menu.svg" alt="" /></button><a class="hdr__logo" href="/"><img class="hdr__logoimg" src="/img/logo-white.svg" alt="" /></a
><a class="button hdr__button" href="/download.html">Download Ignite 2.11 </a>
<nav class="hdrmenu">
<ul class="flexi">
<li><a href="/">Get started</a></li>
<li><a class="hdrmenu__current" href="/features">Features</a></li>
<li><a href="/community.html">Community</a></li>
<li><a href="/use-cases/provenusecases.html">Powered by</a></li>
<li><a href="///ignite.apache.org/docs/latest/">Docs</a></li>
</ul>
</nav>
</div>
</header>
<header class="hdrfloat">
<div class="cmtyhero__wrap flexi">
<button class="hdr__burger" data-menumodal="#jsMenuModal"><img src="/img/menu.svg" alt="" /></button><a class="hdr__logo" href="/"><img class="hdr__logoimg" src="/img/logo.svg" alt="" /></a
><a class="button hdr__button" href="/download.html">Download Ignite 2.11 </a>
<nav class="hdrmenu">
<ul class="flexi">
<li><a href="/">Get started</a></li>
<li><a class="hdrmenu__current" href="/features">Features</a></li>
<li><a href="/community.html">Community</a></li>
<li><a href="/use-cases/provenusecases.html">Powered by</a></li>
<li><a href="/docs.html">Docs</a></li>
</ul>
</nav>
</div>
</header>
<section class="innerhero">
<div class="container innerhero__cont">
<div class="innerhero__main">
<div class="innerhero__pre pb-3">Apache Ignite</div>
<h1 class="h1 innerhero__h1">Distributed ANSI SQL</h1>
<div class="innerhero__descr pt-2 h5">
The same SQL you've been using for years but now with<br />
in-memory speed and at unlimited scale
</div>
<div class="innerhero__action"><a class="button innerhero__button" href="https://ignite.apache.org/docs/latest/index">Start Coding</a></div>
</div>
<img class="innerhero__pic innerhero__pic--sql" src="/img/features/sql/hero-image.svg" alt="sql-hero" />
</div>
</section>
<!-- /.innerhero-->
<section class="dist">
<div class="container">
<div class="dist__block flexi">
<div class="dist__info">
<h2 class="dist__h2 h4">Apache Ignite as a SQL Database</h2>
<p class="dist__text">The native support for SQL let’s you work with Ignite as with a standard SQL database. Literally, you can use just SQL if your applications need nothing else:</p>
<div class="dist__items flexi">
<div class="dist__item">
<h3 class="dist__item-title">DDL commands</h3>
<div class="dist__item-grey dist__item-grey1 flexi">
<div class="dist__itemitem flexi"><span class="dist__item-span">CREATE</span><span class="dist__item-span">ALTER</span><span class="dist__item-span">DROP</span></div>
</div>
</div>
<div class="dist__item">
<h3 class="dist__item-title">DML commands</h3>
<div class="dist__item-grey dist__item-grey2 flexi">
<div class="dist__itemitem flexi"><span class="dist__item-span">SELECT</span><span class="dist__item-span">INSERT</span><span class="dist__item-span">UPDATE</span></div>
<div class="dist__itemitem dist__itemitem__end flexi"><span class="dist__item-span">MERGE</span><span class="dist__item-span">DELETE</span></div>
</div>
</div>
</div>
<h3 class="dist__h3">Apache Ignite is shipped with:</h3>
<div class="dist__parts flexi">
<div class="dist__part flexi">
<div class="compute2-points__item fz20"></div>
<div class="dist__part-text">JDBC driver</div>
</div>
<div class="dist__part flexi">
<div class="compute2-points__item fz20"></div>
<div class="dist__part-text">ODBC driver</div>
</div>
<div class="dist__part flexi">
<div class="compute2-points__item fz20"></div>
<div class="dist__part-text dist__part-textend flexi">
Built-in SQL APIs
<div class="dist__part-grey">Available for Java, C#, C++, Python, and other programming languages</div>
</div>
</div>
</div>
</div>
<img class="dist__image" src="/img/features/sql/image.svg" alt="sql-hero" />
</div>
</div>
</section>
<!-- /.dist-->
<section class="dist1">
<div class="container">
<h2 class="dist1__h2 h4">Join, Group and Aggregate Distributed Data Sets</h2>
<div class="dist1__subtext">Whether you use a two or thousand-node cluster, you always can do the following:</div>
<div class="dist1__parts flexi">
<div class="dist1__part">group data</div>
<div class="dist1__part">join data</div>
<div class="dist1__part">order data</div>
<div class="dist1__part dist1__partend">aggregate data</div>
</div>
<div class="dist1__title">What is a distributed join?</div>
<p class="dist1__text h4">A distributed join is a SQL statement with a join clause that combines two or more tables that have their data distributed across many cluster nodes.</p>
<h3 class="dist1__h3 h4">Types of joins in Ignite</h3>
<div class="dist1__blocks flexi">
<div class="dist1__block">
<h4 class="dist1__h4">Co-located joins</h4>
<p class="dist1__texts">this is the most performant type of joins that avoid data shuffling between nodes and minimize network usage.</p>
<p class="dist1__texts pt-1">
This type of join is used if you join <a class="dist1__link" href="https://ignite.apache.org/docs/latest/data-modeling/affinity-collocation" target="_blank">partitioned and replicated tables</a> or partitioned tables that are
co-located with each other.
</p>
</div>
<div class="dist1__block">
<h4 class="dist1__h4">Non-colocated joins:</h4>
<p class="dist1__texts">less performant type of joins that join data of non-colocated tables. Ignite needs to shuffle data over the network to produce a correct result set.</p>
</div>
<div class="dist1__block">
<h4 class="dist1__h4">Hash joins:</h4>
<p class="dist1__texts">Ignite supports classic hash join algorithm that is more efficient than nested loop joins for many scenarios.</p>
</div>
</div>
</div>
</section>
<!-- /.dist1-->
<section class="dist2">
<div class="container">
<h2 class="dist2__h2 h4">Ignite SQL Engine and Multi-Tier Storage</h2>
<p class="dist2__p">Depending on your storage configuration, Ignite SQL engine can query both in-memory and disk-only records</p>
<div class="dist2__blocks flexi">
<div class="dist2__block">
<h3 class="dist2__h3">In-Memory Mode</h3>
<p class="dist2__text dist2__text1">Ignite caches data only in memory</p>
<details class="dist2__details">
<summary class="dist2__active"><img src="/img/features/sql/plus.svg" alt="sql-hero" /></summary>
<div class="dist2__subtext"><p>In this mode, Ignite SQL performs the fastest way possible as long as all the data is served from memory with no usage of the disk tier at all.</p></div>
</details>
</div>
<div class="dist2__block">
<h3 class="dist2__h3">In-Memory <br />+ Native Persistence Mode</h3>
<p class="dist2__text">
Ignite scales beyond available<br />
memory capacity
</p>
<details class="dist2__details">
<summary class="dist2__active"><img src="/img/features/sql/plus.svg" alt="sql-hero" /></summary>
<div class="dist2__subtext">
<p>Ignite persists 100% of data and indexes in the <a href="/arch/native-persistence.html">native persistence</a> while caching as much as possible in memory.</p>
<p class="pt-1">Ignite SQL engine does not require to cache an entire data set in memory to operate correctly.</p>
<p class="pt-1">If the engine finds that a record is not cached, then it will read the record from disk. Your application only executes SQL queries, and Ignite gets the records from both memory and disk automatically.</p>
<p class="pt-1">On cluster restarts, Ignite reads data and indexes from disk, eliminating the need for memory warm-up, which significantly decreases downtime.</p>
</div>
</details>
</div>
<div class="dist2__block">
<h3 class="dist2__h3">In-Memory<br />+ External Database Mode</h3>
<p class="dist2__text">
Ignite accelerates your<br />
existing databases
</p>
<details class="dist2__details">
<summary class="dist2__active"><img src="/img/features/sql/plus.svg" alt="sql-hero" /></summary>
<div class="dist2__subtext">
<p>In this mode, the Ignite SQL engine requires caching all the data needed for distributed queries in memory since the engine currently does not support federated queries.</p>
<p class="pt-1">
If federated queries between Ignite and an external database are required, then you can consider Ignite integration for Spark, where the DataFrames API can join the data stored in Ignite and other systems.
</p>
</div>
</details>
</div>
</div>
</div>
</section>
<!-- /.dist2-->
<section class="native-bottom container">
<div class="native-bottom__grid">
<article class="nativebotblock">
<h3 class="h4 nativebotblock__title"><img class="nativebotblock__icon" src="/img/features/native-rocket.svg" alt="" /><span>Ready to Start?</span></h3>
<p class="nativebotblock__text">
Discover more details about Apache Ignite SQL engine<br />
and apply it for your use-case
</p>
<a class="nativebotblock__link arrowlink" href="https://ignite.apache.org/docs/latest/persistence/native-persistence" target="_blank">Memory Architecture</a>
</article>
<article class="nativebotblock nativebotblock--learn">
<h3 class="h4 nativebotblock__title"><img class="nativebotblock__icon" src="/img/features/native-docs.svg" alt="" /><span>Want to Learn More?</span></h3>
<p class="nativebotblock__text">Ignite SQL will become even more powerful and advanced with the release of the Apache Calcite based engine</p>
<div class="dist__link">Coming in Ignite 3.0</div>
<a class="nativebotblock__link arrowlink" href="https://cwiki.apache.org/confluence/display/IGNITE/Apache+Calcite-powered+SQL+Engine+Roadmap" target="_blank">New Calcite powered SQL engine</a>
</article>
</div>
</section>
<a class="scrollTop" href="#"
><svg class="feather feather-chevron-up" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="18 15 12 9 6 15"></polyline></svg
></a>
<script src="/js/vendor/hystmodal/hystmodal.min.js"></script>
<script src="/js/vendor/swiper/swiper-bundle.min.js"></script>
<script src="/js/vendor/waypoints.min.js"></script>
<script src="/js/main.js"></script>
</body>
</html>