<!DOCTYPE html>
<html lang="en">
  <head>	
    <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Apache Druid">
<meta name="keywords" content="druid,kafka,database,analytics,streaming,real-time,real time,apache,open source">
<meta name="author" content="Apache Software Foundation">

<title>Druid | About Druid</title>
<link rel="canonical" href="https://druid.apache.org/druid" />
<link rel="alternate" type="application/atom+xml" href="/feed">
<link rel="shortcut icon" href="/img/favicon.png">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">

<link href='//fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700,300italic|Open+Sans:300italic,400italic,600italic,400,300,600,700' rel='stylesheet' type='text/css'>

<link rel="stylesheet" href="/css/bootstrap-pure.css?v=1.1">
<link rel="stylesheet" href="/css/base.css?v=1.1">
<link rel="stylesheet" href="/css/header.css?v=1.1">
<link rel="stylesheet" href="/css/footer.css?v=1.1">
<link rel="stylesheet" href="/css/syntax.css?v=1.1">
<link rel="stylesheet" href="/css/docs.css?v=1.1">

<script>
  (function() {
    var cx = '000162378814775985090:molvbm0vggm';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
        '//cse.google.com/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>


  </head>
  <body>	
    <!-- Start page_header include -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<div class="top-navigator">
  <div class="container">
    <div class="left-cont">
      <a class="logo" href="/"><span class="druid-logo"></span></a>
    </div>
    <div class="right-cont">
      <ul class="links">
        <li class=""><a href="/technology">Technology</a></li>
        <li class=""><a href="/use-cases">Use Cases</a></li>
        <li class=""><a href="/druid-powered">Powered By</a></li>
        <li class=""><a href="/docs/latest/design/">Docs</a></li>
        <li class=""><a href="/community/">Community</a></li>
        <li class="header-dropdown">
          <a>Apache</a>
          <div class="header-dropdown-menu">
            <a href="https://www.apache.org/" target="_blank">Foundation</a>
            <a href="https://www.apache.org/events/current-event" target="_blank">Events</a>
            <a href="https://www.apache.org/licenses/" target="_blank">License</a>
            <a href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a>
            <a href="https://www.apache.org/security/" target="_blank">Security</a>
            <a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a>
          </div>
        </li>
        <li class=" button-link"><a href="/downloads.html">Download</a></li>
      </ul>
    </div>
  </div>
  <div class="action-button menu-icon">
    <span class="fa fa-bars"></span> MENU
  </div>
  <div class="action-button menu-icon-close">
    <span class="fa fa-times"></span> MENU
  </div>
</div>

<script type="text/javascript">
  var $menu = $('.right-cont');
  var $menuIcon = $('.menu-icon');
  var $menuIconClose = $('.menu-icon-close');

  function showMenu() {
    $menu.fadeIn(100);
    $menuIcon.fadeOut(100);
    $menuIconClose.fadeIn(100);
  }

  $menuIcon.click(showMenu);

  function hideMenu() {
    $menu.fadeOut(100);
    $menuIconClose.fadeOut(100);
    $menuIcon.fadeIn(100);
  }

  $menuIconClose.click(hideMenu);

  $(window).resize(function() {
    if ($(window).width() >= 840) {
      $menu.fadeIn(100);
      $menuIcon.fadeOut(100);
      $menuIconClose.fadeOut(100);
    }
    else {
      $menu.fadeOut(100);
      $menuIcon.fadeIn(100);
      $menuIconClose.fadeOut(100);
    }
  });
</script>

<!-- Stop page_header include -->


    <div class="druid-header">
  <div class="container">
    <h1>About Druid</h1>
    <h4></h4>
  </div>
</div>

<div class="container">
  <div class="row">
    <div class="col-md-10 col-md-offset-1">
      <p>Apache Druid is an open-source data store designed for sub-second queries on real-time
and historical data. It is primarily used for business intelligence
(<a href="http://en.wikipedia.org/wiki/Online_analytical_processing">OLAP</a>) queries on
event data. Druid provides low latency (real-time) data ingestion, flexible
data exploration, and fast data aggregation. Existing Druid deployments have
scaled to trillions of events and petabytes of data. Druid is most commonly
used to power user-facing analytic applications.</p>

<h2 id="key-features">Key Features</h2>

<p><strong>Sub-second OLAP Queries</strong> Druid’s unique architecture enables rapid
multi-dimensional filtering, ad-hoc attribute groupings, and extremely fast
aggregations.</p>

<p><strong>Real-time Streaming Ingestion</strong> Druid employs lock-free ingestion to allow
for simultaneous ingestion and querying of high dimensional, high volume data
sets. Explore events immediately after they occur.</p>

<p><strong>Power Analytic Applications</strong> Druid has numerous features built for
multi-tenancy. Power user-facing analytic applications designed to be used by
thousands of concurrent users.</p>

<p><strong>Cost Effective</strong> Druid is extremely cost effective at scale and has numerous
features built in for cost reduction.  Trade off cost and performance with
simple configuration knobs.</p>

<p><strong>Highly Available</strong> Druid is used to back SaaS implementations that need to be
up all the time. Druid supports rolling updates so your data is still available
and queryable during software updates. Scale up or down without data loss.</p>

<p><strong>Scalable</strong> Existing Druid deployments handle trillions of events, petabytes
of data, and thousands of queries every second.</p>

<h2 id="is-druid-right-for-me">Is Druid Right for Me?</h2>

<p>Organizations have deployed Druid to analyze user, server, and marketplace
events across a variety of industries including media, telecommunications,
security, banking, health care, and retail. Druid is a good fit if you have the
following requirements:</p>

<ul>
<li>You are building an application that requires fast aggregations and
OLAP queries</li>
<li>You want to do real-time analysis</li>
<li>You have lots of data (trillions of events, petabytes of data)</li>
<li>You need a data store that is always available with no single point of
failure</li>
</ul>

<h2 id="high-level-architecture">High Level Architecture</h2>

<p>Druid is partially inspired by existing analytic data stores such as Google&#39;s
<a href="http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/36632.pdf">BigQuery/Dremel</a>,
Google&#39;s
<a href="http://vldb.org/pvldb/vol5/p1436_alexanderhall_vldb2012.pdf">PowerDrill</a>, and
search infrastructure. Druid indexes all ingested data in a custom column
format optimized for aggregations and filters. A Druid cluster is composed of
various types of processes (called nodes), each designed to do a small set of
things very well.</p>

<h2 id="comprehensive-architecture">Comprehensive Architecture</h2>

<p>For a comprehensive look at Druid architecture, please read our <a href="http://static.druid.io/docs/druid.pdf">white paper</a> from 2014.</p>

<h2 id="comparisons">Comparisons</h2>

<ul>
<li><a href="/docs/latest/comparisons/druid-vs-elasticsearch.html">Druid vs Elasticsearch</a></li>
<li><a href="/docs/latest/comparisons/druid-vs-key-value.html">Druid vs Key/Value Stores (HBase/Cassandra)</a></li>
<li><a href="/docs/latest/comparisons/druid-vs-redshift.html">Druid vs Redshift</a></li>
<li><a href="/docs/latest/comparisons/druid-vs-spark.html">Druid vs Spark</a></li>
<li><a href="/docs/latest/comparisons/druid-vs-sql-on-hadoop.html">Druid vs SQL-on-Hadoop (Hive/Impala/Drill/Spark SQL/Presto)</a></li>
</ul>

<h2 id="scale">Scale</h2>

<p><a href="http://www.marketwired.com/press-release/metamarkets-clients-analyzing-100-billion-programmatic-events-daily-on-track-surpass-2061596.htm">Existing production Druid clusters</a> have scaled to the following:</p>

<ul>
<li>3+ trillion events/month</li>
<li>3M+ events/sec through Druid&#39;s real-time ingestion</li>
<li>100+ PB of raw data</li>
<li>50+ trillion events</li>
<li>Thousands of queries per second for applications used by thousands of users</li>
<li>Tens of thousands of cores</li>
</ul>

    </div>
  </div>
</div>

    
    <!-- Start page_footer include -->
<footer class="druid-footer">
<div class="container">
  <div class="text-center">
    <p>
    <a href="/technology">Technology</a>&ensp;·&ensp;
    <a href="/use-cases">Use Cases</a>&ensp;·&ensp;
    <a href="/druid-powered">Powered by Druid</a>&ensp;·&ensp;
    <a href="/docs/latest/">Docs</a>&ensp;·&ensp;
    <a href="/community/">Community</a>&ensp;·&ensp;
    <a href="/downloads.html">Download</a>&ensp;·&ensp;
    <a href="/faq">FAQ</a>
    </p>
  </div>
  <div class="text-center">
    <a title="Join the user group" href="https://groups.google.com/forum/#!forum/druid-user" target="_blank"><span class="fa fa-comments"></span></a>&ensp;·&ensp;
    <a title="Follow Druid" href="https://twitter.com/druidio" target="_blank"><span class="fab fa-twitter"></span></a>&ensp;·&ensp;
    <a title="GitHub" href="https://github.com/apache/druid" target="_blank"><span class="fab fa-github"></span></a>
  </div>
  <div class="text-center license">
    Copyright © 2020 <a href="https://www.apache.org/" target="_blank">Apache Software Foundation</a>.<br>
    Except where otherwise noted, licensed under <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.<br>
    Apache Druid, Druid, and the Druid logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.
  </div>
</div>
</footer>

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'UA-131010415-1');
</script>
<script>
  function trackDownload(type, url) {
    ga('send', 'event', 'download', type, url);
  }
</script>
<script src="//code.jquery.com/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="/assets/js/druid.js"></script>
<!-- stop page_footer include -->

    
  </body>
</html>
