<!DOCTYPE html>
<html>
  



<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="The Apache Cassandra database is the right choice when you need scalability and high availability without compromising performance. Linear scalability and proven fault-tolerance on commodity hardware or cloud infrastructure make it the perfect platform for mission-critical data. Cassandra's support for replicating across multiple datacenters is best-in-class, providing lower latency for your users and the peace of mind of knowing that you can survive regional outages.
">
  <meta name="keywords" content="cassandra, apache, apache cassandra, distributed storage, key value store, scalability, bigtable, dynamo" />
  <meta name="robots" content="index,follow" />
  <meta name="language" content="en" />  

  <title>Apache Cassandra</title>

  <link rel="canonical" href="http://cassandra.apache.org/">

  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
  <link rel="stylesheet" href="./css/style.css">
  

  
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
  
  <link type="application/atom+xml" rel="alternate" href="http://cassandra.apache.org/feed.xml" title="Apache Cassandra Website" />
</head>

  <body>
    <!-- breadcrumbs -->
<div class="topnav">
  <div class="container breadcrumb-container">
    <ul class="breadcrumb">
      <li>
        <div class="dropdown">
          <img class="asf-logo" src="./img/asf_feather.png" />
          <a data-toggle="dropdown" href="#">Apache Software Foundation <span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
            <li><a href="http://www.apache.org">Apache Homepage</a></li>
            <li><a href="http://www.apache.org/licenses/">License</a></li>
            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
            <li><a href="http://www.apache.org/security/">Security</a></li>
          </ul>
        </div>
      </li>

      
      <li>Apache Cassandra</li>
      

      

      

      
    </ul>
  </div>

  <!-- navbar -->
  <nav class="navbar navbar-default navbar-static-top" role="navigation">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#cassandra-menu" aria-expanded="false">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="./"><img src="./img/cassandra_logo.png" alt="Apache Cassandra logo" /></a>
      </div><!-- /.navbar-header -->

      <div id="cassandra-menu" class="collapse navbar-collapse">
        <ul class="nav navbar-nav navbar-right">
          <li><a href="./">Home</a></li>
          <li><a href="./download/">Download</a></li>
          <li><a href="./doc/">Documentation</a></li>
          <li><a href="./community/">Community</a></li>
          <li>
            <a href="./blog/">Blog</a>
        </li>
        </ul>
      </div><!-- /#cassandra-menu -->

      
      <div class="jumbotron">
        <h1>
          Manage massive amounts of data, fast, without losing sleep
        </h1>
        <p>
        <a class="btn btn-default download" role="button" href="./download/">Download Cassandra</a>
        </p>
        <p>
        
          <a class="changelog"
             href="https://gitbox.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/cassandra-3.11.5">Cassandra 3.11.5 Changelog
          </a>
        </p>
      </div><!-- /.jumbotron -->
      
    </div>
  </nav><!-- /.navbar -->
</div><!-- /.topnav -->

    <div class="feature-list-group">
  <div class="container">
    <div class="row header">
      <h3>What is Cassandra?</h3>
      <p class="lead">
      The Apache Cassandra database is the right choice when you need scalability and high availability without
      compromising performance. <a href="http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html">Linear scalability</a>
      and proven fault-tolerance on commodity hardware or cloud infrastructure make it the perfect platform for
      mission-critical data. Cassandra's support for replicating across multiple datacenters is best-in-class, providing
      lower latency for your users and the peace of mind of knowing that you can survive regional outages.
      </p>
    </div><!-- /.header -->

    <div class="row feature-list">
      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Proven</h4>
        <p>
        Cassandra is in use at
        <a href="http://www.slideshare.net/daveconnors/cassandra-puppet-scaling-data-at-15-per-month">Constant Contact</a>,
        <a href="http://planetcassandra.org/blog/post/cassandra-at-cern-large-hadron-collider/">CERN</a>,
        <a href="http://www.slideshare.net/planetcassandra/nyc-tech-day-using-cassandra-for-dvr-scheduling-at-comcast">Comcast</a>,
        <a href="http://www.slideshare.net/jaykumarpatel/cassandra-at-ebay-13920376">eBay</a>,
        <a href="http://planetcassandra.org/blog/post/analytics-at-github-with-apache-cassandra/">GitHub</a>,
        <a href="http://planetcassandra.org/blog/post/godaddy-worlds-largest-domain-name-registrar-and-web-host-provider-utilizes-cassandra-for-replication-and-scalability/">GoDaddy</a>,
        <a href="http://planetcassandra.org/blog/post/cassandra-used-to-build-scalable-and-highly-available-systems-at-hulu-streaming-content-to-over-5-million-subscribers/">Hulu</a>,
        <a href="http://planetcassandra.org/blog/post/instagram-making-the-switch-to-cassandra-from-redis-75-instasavings/">Instagram</a>, 
        <a href="http://www.slideshare.net/planetcassandra/3-mohit-anchlia">Intuit</a>,
        <a href="http://www.slideshare.net/adrianco/migrating-netflix-from-oracle-to-global-cassandra">Netflix</a>,
        <a href="http://planetcassandra.org/blog/post/reddit-upvotes-apache-cassandras-horizontal-scaling-managing-17000000-votes-daily/">Reddit</a>, 
        <a href="http://planetcassandra.org/blog/post/make-it-rain-apache-cassandra-at-the-weather-channel-for-severe-weather-alerts/">The Weather Channel</a>,
        and <a href="http://planetcassandra.org/companies/">over 1500 more companies</a> that have large, active data
        sets.</p>
      </div>

      <div class="col-md-2 col-sm-2 feature-item">
        <h4>Fault tolerant</h4>
        <p>
        Data is automatically replicated to multiple nodes for fault-tolerance. Replication across multiple data centers
        is supported. Failed nodes can be replaced with no downtime.
        </p>
      </div>

      <div class="col-md-2 col-sm-2 feature-item">
        <h4>Performant</h4>
        <p>
        Cassandra <a href="http://vldb.org/pvldb/vol5/p1724_tilmannrabl_vldb2012.pdf">consistently</a>
        <a href="http://www.datastax.com/resources/whitepapers/benchmarking-top-nosql-databases">outperforms</a> popular
        NoSQL alternatives in benchmarks and <a href="http://blog.markedup.com/2013/02/cassandra-hive-and-hadoop-how-we-picked-our-analytics-stack/">real applications</a>,
        primarily because of <a href="http://www.datastax.com/dev/blog/2012-in-review-performance">fundamental architectural choices</a>.
        </p>
      </div>

      <div class="col-md-2 col-sm-2 feature-item">
        <h4>Decentralized</h4>
        <p>
        There are no single points of failure. There are no network bottlenecks. Every node in the cluster is
        identical.
        </p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Scalable</h4>
        <p>
        Some of the largest production deployments include Apple's, with over 75,000 nodes storing over 10 PB of data,
        Netflix (2,500 nodes, 420 TB, over 1 trillion requests per day), Chinese search engine Easou (270 nodes, 300 TB,
        over 800 million requests per day), and eBay (over 100 nodes, 250 TB).
        </p>
      </div>
    </div><!-- /.feature-list -->

    <div class="row feature-list">
      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Durable</h4>
        <p>
        Cassandra is <a href="http://wiki.apache.org/cassandra/Durability">suitable for applications that can't afford to lose data</a>,
        even when an entire data center goes down.
        </p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>You're in control</h4>
        <p>
        Choose between synchronous or asynchronous replication for each update. Highly available asynchronous operations are
        optimized with features like <a href="http://wiki.apache.org/cassandra/HintedHandoff">Hinted Handoff</a> and
        <a href="http://wiki.apache.org/cassandra/ReadRepair">Read Repair</a>.</p>
        </p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Elastic</h4>
        <p>
          Read and write throughput both increase linearly as new machines are added, with no downtime or interruption
          to applications.
        </p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Professionally Supported</h4>
        <p>
          Cassandra support contracts and services are available from <a href="http://wiki.apache.org/cassandra/ThirdPartySupport">third parties</a>.
        </p>
      </div>
    </div><!-- /.feature-list -->

  </div><!-- /.container -->
</div><!-- /.feature-list-group -->

    <hr />

<footer>
  <div class="container">
    <div class="col-md-4 social-blk">
      <span class="social">
        <a href="https://twitter.com/cassandra"
           class="twitter-follow-button"
           data-show-count="false" data-size="large">Follow @cassandra</a>
        <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
        <a href="https://twitter.com/intent/tweet?button_hashtag=cassandra"
           class="twitter-hashtag-button"
           data-size="large"
           data-related="ApacheCassandra">Tweet #cassandra</a>
        <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>

      </span>
      <a class="subscribe-rss icon-link" href="/feed.xml" title="Subscribe to Blog via RSS">
          <span><i class="fa fa-rss"></i></span>
      </a>
    </div>

    <div class="col-md-8 trademark">
      <p>&copy; 2016 <a href="http://apache.org">The Apache Software Foundation</a>.
      Apache, the Apache feather logo, and Apache Cassandra are trademarks of The Apache Software Foundation.
      <p>
    </div>
  </div><!-- /.container -->
</footer>

<!-- Javascript. Placed here so pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="./js/underscore-min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>



<script type="text/javascript">
  var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
  document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

  try {
    var pageTracker = _gat._getTracker("UA-11583863-1");
    pageTracker._trackPageview();
  } catch(err) {}
</script>


  </body>
</html>
