extend ../_components/base.pug

block pagetitle
    title Distributed ANSI SQL Database - Apache Ignite
    meta(name="description", content="Apache Ignite comes with an ANSI-99 compliant, horizontally scalable, and fault-tolerant SQL engine that allows you to interact with Ignite as with a regular SQL database. Ignite can function in a pure in-memory mode in which it shows the highest performance.")
    link(rel="canonical", href="https://ignite.apache.org/features/sql.html")

    meta(property="og:title", content="Distributed ANSI SQL Database - Apache Ignite")
    meta(property="og:type", content="article")
    meta(property="og:url", content="https://ignite.apache.org/features/sql.html")
    meta(property="og:image", content="/img/og-pic.png")
    meta(property="og:description", content="Apache Ignite comes with an ANSI-99 compliant, horizontally scalable, and fault-tolerant SQL engine that allows you to interact with Ignite as with a regular SQL database. Ignite can function in a pure in-memory mode in which it shows the highest performance.")

block css 
    link(rel="stylesheet", href="../css/native-persistence.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/compute-apis.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/sql.css?ver=" + config.version)
 

  



block main
    - global.pageHref = "features"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero
        .container.innerhero__cont
            .innerhero__main
                .innerhero__pre.pb-3 Apache Ignite
                h1.h1.innerhero__h1 Distributed ANSI SQL
                .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
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--sql(src="/img/features/sql/hero-image.svg", alt="sql-hero")
    // /.innerhero

    section.dist
       .container
         .dist__block.flexi
            .dist__info
              h2.dist__h2.h4 Apache Ignite as a SQL Database
              p.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:
              .dist__items.flexi
                .dist__item
                  h3.dist__item-title DDL commands
                  .dist__item-grey.dist__item-grey1.flexi
                      .dist__itemitem.flexi
                          span.dist__item-span CREATE
                          span.dist__item-span ALTER
                          span.dist__item-span DROP
                    
                .dist__item
                  h3.dist__item-title DML commands
                  .dist__item-grey.dist__item-grey2.flexi
                     .dist__itemitem.flexi
                         span.dist__item-span SELECT
                         span.dist__item-span INSERT
                         span.dist__item-span UPDATE
                     .dist__itemitem.dist__itemitem__end.flexi
                         span.dist__item-span MERGE
                         span.dist__item-span DELETE
                         
              h3.dist__h3 Apache Ignite is shipped with:
              .dist__parts.flexi
                .dist__part.flexi
                   .compute2-points__item.fz20
                   .dist__part-text JDBC driver
                .dist__part.flexi
                   .compute2-points__item.fz20
                   .dist__part-text ODBC driver
                .dist__part.flexi
                   .compute2-points__item.fz20
                   .dist__part-text.dist__part-textend.flexi Built-in SQL APIs
                      .dist__part-grey Available for Java, C#, C++, Python, and other programming languages
                      
                
            img.dist__image(src="/img/features/sql/image.svg", alt="sql-hero")
    // /.dist

    section.dist1
       .container 
          h2.dist1__h2.h4 Join, Group and Aggregate Distributed Data Sets
          .dist1__subtext Whether you use a two or thousand-node cluster, you always can do the following:
          .dist1__parts.flexi
            .dist1__part group data
            .dist1__part join data
            .dist1__part order data
            .dist1__part.dist1__partend aggregate data
          .dist1__title What is a distributed join?
          p.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.
          h3.dist1__h3.h4 Types of joins in Ignite
          .dist1__blocks.flexi
              .dist1__block 
                 h4.dist1__h4 Co-located joins
                 p.dist1__texts this is the most performant type of joins that avoids data shuffling between nodes and minimize network usage.
                 p.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.
              .dist1__block 
                 h4.dist1__h4 Non-colocated joins:
                 p.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.
              .dist1__block 
                 h4.dist1__h4 Hash joins:
                 p.dist1__texts Ignite supports classic hash join algorithm that is more efficient than nested loop joins for many scenarios.
    // /.dist1

    section.dist2
       .container
          h2.dist2__h2.h4 Ignite SQL Engine and Multi-Tier Storage
          p.dist2__p Depending on your storage configuration, Ignite SQL engine can query both in-memory and disk-only records
          .dist2__blocks.flexi
             .dist2__block
                h3.dist2__h3 In-Memory Mode
                p.dist2__text.dist2__text1 Ignite caches data only in memory   
                details.dist2__details 
                   summary.dist2__active
                     img(src="/img/features/sql/plus.svg", alt="sql-hero")
                   .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.
             .dist2__block
                h3.dist2__h3 In-Memory <br>+ Native Persistence Mode
                p.dist2__text Ignite scales beyond available<br> memory capacity   
                details.dist2__details 
                   summary.dist2__active
                     img(src="/img/features/sql/plus.svg", alt="sql-hero")
                   .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.pt-1 Ignite SQL engine does not require to cache an entire data set in memory to operate correctly.
                      p.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.pt-1 On cluster restarts, Ignite reads data and indexes from disk, eliminating the need for memory warm-up, which significantly decreases downtime.
                
             .dist2__block
                h3.dist2__h3 In-Memory<br>+ External Database Mode
                p.dist2__text Ignite accelerates your<br> existing databases   
                details.dist2__details 
                   summary.dist2__active
                     img(src="/img/features/sql/plus.svg", alt="sql-hero")
                   .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.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.
           
          

    // /.dist2

    section.native-bottom.container
        .native-bottom__grid 
            article.nativebotblock
                .h4.nativebotblock__title
                    img(src="/img/features/native-rocket.svg", alt="").nativebotblock__icon
                    span Ready to Start?
                p.nativebotblock__text Discover more details about Apache Ignite SQL engine<br> and apply it for your use-case
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/persistence/native-persistence", target="_blank") Memory Architecture
            article.nativebotblock.nativebotblock--learn
                .h4.nativebotblock__title
                    img(src="/img/features/native-docs.svg", alt="").nativebotblock__icon
                    span Want to Learn More?
                p.nativebotblock__text Ignite SQL will become even more powerful and advanced with the release of the Apache Calcite based engine
                .dist__link Coming in Ignite 3.0  
                a.nativebotblock__link.arrowlink(href="https://cwiki.apache.org/confluence/display/IGNITE/Apache+Calcite-powered+SQL+Engine+Roadmap", target="_blank") New Calcite powered SQL engine




