Added: cassandra/site/publish/doc/3.10/operating/bulk_loading.html URL: http://svn.apache.org/viewvc/cassandra/site/publish/doc/3.10/operating/bulk_loading.html?rev=1757435&view=auto ============================================================================== --- cassandra/site/publish/doc/3.10/operating/bulk_loading.html (added) +++ cassandra/site/publish/doc/3.10/operating/bulk_loading.html Tue Aug 23 20:58:08 2016 @@ -0,0 +1,269 @@ +<!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>Documentation</title> + + <link rel="canonical" href="http://cassandra.apache.org/doc/3.10/operating/bulk_loading.html"> + + <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="./../../../css/sphinx.css"> + + + <link rel="top" title="Apache Cassandra Documentation v3.10" href="../index.html"/> <link rel="up" title="Operating Cassandra" href="index.html"/> <link rel="next" title="Monitoring" href="metrics.html"/> <link rel="prev" title="Backups" href="backups.html"/> +</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><a href="./../../../">Apache Cassandra</a></li> + + + + + <li><a href="./../../../doc">Documentation</a></li> + + + + + <li><a href="./">Operating Cassandra</a></li> + + + + <li>Bulk Loading</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> + </ul> + </div><!-- /#cassandra-menu --> + + + </div> + </nav><!-- /.navbar --> +</div><!-- /.topnav --> + + <div class="container-fluid"> + <div class="row"> + <div class="col-md-2"> + <div class="doc-navigation"> + <div class="doc-menu" role="navigation"> + <div class="navbar-header"> + <button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <div class="navbar-collapse collapse sidebar-navbar-collapse"> + <form id="doc-search-form" class="navbar-form" action="../search.html" method="get" role="search"> + <div class="form-group"> + <input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs"> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </div> + </form> + + + + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../architecture/index.html">Architecture</a></li> +<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li> +<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li> +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Operating Cassandra</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="snitch.html">Snitch</a></li> +<li class="toctree-l2"><a class="reference internal" href="topo_changes.html">Adding, replacing, moving and removing nodes</a></li> +<li class="toctree-l2"><a class="reference internal" href="repair.html">Repair</a></li> +<li class="toctree-l2"><a class="reference internal" href="read_repair.html">Read repair</a></li> +<li class="toctree-l2"><a class="reference internal" href="hints.html">Hints</a></li> +<li class="toctree-l2"><a class="reference internal" href="compaction.html">Compaction</a></li> +<li class="toctree-l2"><a class="reference internal" href="bloom_filters.html">Bloom Filters</a></li> +<li class="toctree-l2"><a class="reference internal" href="compression.html">Compression</a></li> +<li class="toctree-l2"><a class="reference internal" href="cdc.html">Change Data Capture</a></li> +<li class="toctree-l2"><a class="reference internal" href="backups.html">Backups</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Bulk Loading</a></li> +<li class="toctree-l2"><a class="reference internal" href="metrics.html">Monitoring</a></li> +<li class="toctree-l2"><a class="reference internal" href="security.html">Security</a></li> +<li class="toctree-l2"><a class="reference internal" href="hardware.html">Hardware Choices</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li> +<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li> +<li class="toctree-l1"><a class="reference internal" href="../development/index.html">Cassandra Development</a></li> +<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs and Contributing</a></li> +<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li> +</ul> + + + + </div><!--/.nav-collapse --> + </div> + </div> + </div> + <div class="col-md-8"> + <div class="content doc-content"> + <div class="container"> + + <div class="section" id="bulk-loading"> +<span id="id1"></span><h1>Bulk Loading<a class="headerlink" href="#bulk-loading" title="Permalink to this headline">¶</a></h1> +<div class="admonition-todo admonition" id="index-0"> +<p class="first admonition-title">Todo</p> +<p class="last">TODO</p> +</div> +</div> + + + + + <div class="doc-prev-next-links" role="navigation" aria-label="footer navigation"> + + <a href="metrics.html" class="btn btn-default pull-right " role="button" title="Monitoring" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a> + + + <a href="backups.html" class="btn btn-default" role="button" title="Backups" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a> + + </div> + + </div> + </div> + </div> + <div class="col-md-2"> + </div> + </div> +</div> + + <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> + </div> + + <div class="col-md-8 trademark"> + <p>© 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 src="./../../../js/doctools.js"></script> +<script src="./../../../js/searchtools.js"></script> + + <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: "", VERSION: "", COLLAPSE_INDEX: false, FILE_SUFFIX: ".html", HAS_SOURCE: false, SOURCELINK_SUFFIX: "" }; </script> + +<script type="text/javascript"> +$(function() { + // Stick the #nav to the top of the window + var nav = $('.doc-navigation'); + var navHomeY = nav.offset().top; + var isFixed = false; + var $w = $(window); + $w.scroll(function() { + var scrollTop = $w.scrollTop(); + var shouldBeFixed = $w.width() > 991 && scrollTop >= navHomeY - 10; + if (shouldBeFixed && !isFixed) { + nav.css({ + position: 'fixed', + top: 0, + left: nav.offset().left, + width: nav.width(), + }); + nav.addClass('fixed-navigation'); + isFixed = true; + } + else if (!shouldBeFixed && isFixed) + { + nav.css({ + position: 'static' + }); + nav.removeClass('fixed-navigation'); + isFixed = false; + } + }); +}); +</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>
Added: cassandra/site/publish/doc/3.10/operating/cdc.html URL: http://svn.apache.org/viewvc/cassandra/site/publish/doc/3.10/operating/cdc.html?rev=1757435&view=auto ============================================================================== --- cassandra/site/publish/doc/3.10/operating/cdc.html (added) +++ cassandra/site/publish/doc/3.10/operating/cdc.html Tue Aug 23 20:58:08 2016 @@ -0,0 +1,332 @@ +<!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>Documentation</title> + + <link rel="canonical" href="http://cassandra.apache.org/doc/3.10/operating/cdc.html"> + + <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="./../../../css/sphinx.css"> + + + <link rel="top" title="Apache Cassandra Documentation v3.10" href="../index.html"/> <link rel="up" title="Operating Cassandra" href="index.html"/> <link rel="next" title="Backups" href="backups.html"/> <link rel="prev" title="Compression" href="compression.html"/> +</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><a href="./../../../">Apache Cassandra</a></li> + + + + + <li><a href="./../../../doc">Documentation</a></li> + + + + + <li><a href="./">Operating Cassandra</a></li> + + + + <li>Change Data Capture</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> + </ul> + </div><!-- /#cassandra-menu --> + + + </div> + </nav><!-- /.navbar --> +</div><!-- /.topnav --> + + <div class="container-fluid"> + <div class="row"> + <div class="col-md-2"> + <div class="doc-navigation"> + <div class="doc-menu" role="navigation"> + <div class="navbar-header"> + <button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <div class="navbar-collapse collapse sidebar-navbar-collapse"> + <form id="doc-search-form" class="navbar-form" action="../search.html" method="get" role="search"> + <div class="form-group"> + <input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs"> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </div> + </form> + + + + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../architecture/index.html">Architecture</a></li> +<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li> +<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li> +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Operating Cassandra</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="snitch.html">Snitch</a></li> +<li class="toctree-l2"><a class="reference internal" href="topo_changes.html">Adding, replacing, moving and removing nodes</a></li> +<li class="toctree-l2"><a class="reference internal" href="repair.html">Repair</a></li> +<li class="toctree-l2"><a class="reference internal" href="read_repair.html">Read repair</a></li> +<li class="toctree-l2"><a class="reference internal" href="hints.html">Hints</a></li> +<li class="toctree-l2"><a class="reference internal" href="compaction.html">Compaction</a></li> +<li class="toctree-l2"><a class="reference internal" href="bloom_filters.html">Bloom Filters</a></li> +<li class="toctree-l2"><a class="reference internal" href="compression.html">Compression</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Change Data Capture</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#overview">Overview</a></li> +<li class="toctree-l3"><a class="reference internal" href="#configuration">Configuration</a></li> +<li class="toctree-l3"><a class="reference internal" href="#reading-commitlogsegments">Reading CommitLogSegments</a></li> +<li class="toctree-l3"><a class="reference internal" href="#warnings">Warnings</a></li> +<li class="toctree-l3"><a class="reference internal" href="#further-reading">Further Reading</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="backups.html">Backups</a></li> +<li class="toctree-l2"><a class="reference internal" href="bulk_loading.html">Bulk Loading</a></li> +<li class="toctree-l2"><a class="reference internal" href="metrics.html">Monitoring</a></li> +<li class="toctree-l2"><a class="reference internal" href="security.html">Security</a></li> +<li class="toctree-l2"><a class="reference internal" href="hardware.html">Hardware Choices</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li> +<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li> +<li class="toctree-l1"><a class="reference internal" href="../development/index.html">Cassandra Development</a></li> +<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs and Contributing</a></li> +<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li> +</ul> + + + + </div><!--/.nav-collapse --> + </div> + </div> + </div> + <div class="col-md-8"> + <div class="content doc-content"> + <div class="container"> + + <div class="section" id="change-data-capture"> +<h1>Change Data Capture<a class="headerlink" href="#change-data-capture" title="Permalink to this headline">¶</a></h1> +<div class="section" id="overview"> +<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2> +<p>Change data capture (CDC) provides a mechanism to flag specific tables for archival as well as rejecting writes to those +tables once a configurable size-on-disk for the combined flushed and unflushed CDC-log is reached. An operator can +enable CDC on a table by setting the table property <code class="docutils literal"><span class="pre">cdc=true</span></code> (either when <a class="reference internal" href="../cql/ddl.html#create-table-statement"><span class="std std-ref">creating the table</span></a> or <a class="reference internal" href="../cql/ddl.html#alter-table-statement"><span class="std std-ref">altering it</span></a>), after which any CommitLogSegments containing +data for a CDC-enabled table are moved to the directory specified in <code class="docutils literal"><span class="pre">cassandra.yaml</span></code> on segment discard. A threshold +of total disk space allowed is specified in the yaml at which time newly allocated CommitLogSegments will not allow CDC +data until a consumer parses and removes data from the destination archival directory.</p> +</div> +<div class="section" id="configuration"> +<h2>Configuration<a class="headerlink" href="#configuration" title="Permalink to this headline">¶</a></h2> +<div class="section" id="enabling-or-disable-cdc-on-a-table"> +<h3>Enabling or disable CDC on a table<a class="headerlink" href="#enabling-or-disable-cdc-on-a-table" title="Permalink to this headline">¶</a></h3> +<p>CDC is enable or disable through the <cite>cdc</cite> table property, for instance:</p> +<div class="highlight-none"><div class="highlight"><pre><span></span>CREATE TABLE foo (a int, b text, PRIMARY KEY(a)) WITH cdc=true; + +ALTER TABLE foo WITH cdc=true; + +ALTER TABLE foo WITH cdc=false; +</pre></div> +</div> +</div> +<div class="section" id="cassandra-yaml-parameters"> +<h3>cassandra.yaml parameters<a class="headerlink" href="#cassandra-yaml-parameters" title="Permalink to this headline">¶</a></h3> +<p>The following <cite>cassandra.yaml</cite> are available for CDC:</p> +<dl class="docutils"> +<dt><code class="docutils literal"><span class="pre">cdc_enabled</span></code> (default: false)</dt> +<dd>Enable or disable CDC operations node-wide.</dd> +<dt><code class="docutils literal"><span class="pre">cdc_raw_directory</span></code> (default: <code class="docutils literal"><span class="pre">$CASSANDRA_HOME/data/cdc_raw</span></code>)</dt> +<dd>Destination for CommitLogSegments to be moved after all corresponding memtables are flushed.</dd> +<dt><code class="docutils literal"><span class="pre">cdc_free_space_in_mb</span></code>: (default: min of 4096 and 1/8th volume space)</dt> +<dd>Calculated as sum of all active CommitLogSegments that permit CDC + all flushed CDC segments in +<code class="docutils literal"><span class="pre">cdc_raw_directory</span></code>.</dd> +<dt><code class="docutils literal"><span class="pre">cdc_free_space_check_interval_ms</span></code> (default: 250)</dt> +<dd>When at capacity, we limit the frequency with which we re-calculate the space taken up by <code class="docutils literal"><span class="pre">cdc_raw_directory</span></code> to +prevent burning CPU cycles unnecessarily. Default is to check 4 times per second.</dd> +</dl> +</div> +</div> +<div class="section" id="reading-commitlogsegments"> +<span id="id1"></span><h2>Reading CommitLogSegments<a class="headerlink" href="#reading-commitlogsegments" title="Permalink to this headline">¶</a></h2> +<p>This implementation included a refactor of CommitLogReplayer into <a class="reference external" href="https://github.com/apache/cassandra/blob/e31e216234c6b57a531cae607e0355666007deb2/src/java/org/apache/cassandra/db/commitlog/CommitLogReader.java">CommitLogReader.java</a>. +Usage is <a class="reference external" href="https://github.com/apache/cassandra/blob/e31e216234c6b57a531cae607e0355666007deb2/src/java/org/apache/cassandra/db/commitlog/CommitLogReplayer.java#L132-L140">fairly straightforward</a> +with a <a class="reference external" href="https://github.com/apache/cassandra/blob/e31e216234c6b57a531cae607e0355666007deb2/src/java/org/apache/cassandra/db/commitlog/CommitLogReader.java#L71-L103">variety of signatures</a> +available for use. In order to handle mutations read from disk, implement <a class="reference external" href="https://github.com/apache/cassandra/blob/e31e216234c6b57a531cae607e0355666007deb2/src/java/org/apache/cassandra/db/commitlog/CommitLogReadHandler.java">CommitLogReadHandler</a>.</p> +</div> +<div class="section" id="warnings"> +<h2>Warnings<a class="headerlink" href="#warnings" title="Permalink to this headline">¶</a></h2> +<p><strong>Do not enable CDC without some kind of consumption process in-place.</strong></p> +<p>The initial implementation of Change Data Capture does not include a parser (see <a class="reference internal" href="#reading-commitlogsegments"><span class="std std-ref">Reading CommitLogSegments</span></a> above) +so, if CDC is enabled on a node and then on a table, the <code class="docutils literal"><span class="pre">cdc_free_space_in_mb</span></code> will fill up and then writes to +CDC-enabled tables will be rejected unless some consumption process is in place.</p> +</div> +<div class="section" id="further-reading"> +<h2>Further Reading<a class="headerlink" href="#further-reading" title="Permalink to this headline">¶</a></h2> +<ul class="simple"> +<li><a class="reference external" href="https://docs.google.com/document/d/1ZxCWYkeZTquxsvf5hdPc0fiUnUHna8POvgt6TIzML4Y/edit">Design doc</a></li> +<li><a class="reference external" href="https://issues.apache.org/jira/browse/CASSANDRA-8844">JIRA ticket</a></li> +</ul> +</div> +</div> + + + + + <div class="doc-prev-next-links" role="navigation" aria-label="footer navigation"> + + <a href="backups.html" class="btn btn-default pull-right " role="button" title="Backups" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a> + + + <a href="compression.html" class="btn btn-default" role="button" title="Compression" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a> + + </div> + + </div> + </div> + </div> + <div class="col-md-2"> + </div> + </div> +</div> + + <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> + </div> + + <div class="col-md-8 trademark"> + <p>© 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 src="./../../../js/doctools.js"></script> +<script src="./../../../js/searchtools.js"></script> + + <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: "", VERSION: "", COLLAPSE_INDEX: false, FILE_SUFFIX: ".html", HAS_SOURCE: false, SOURCELINK_SUFFIX: "" }; </script> + +<script type="text/javascript"> +$(function() { + // Stick the #nav to the top of the window + var nav = $('.doc-navigation'); + var navHomeY = nav.offset().top; + var isFixed = false; + var $w = $(window); + $w.scroll(function() { + var scrollTop = $w.scrollTop(); + var shouldBeFixed = $w.width() > 991 && scrollTop >= navHomeY - 10; + if (shouldBeFixed && !isFixed) { + nav.css({ + position: 'fixed', + top: 0, + left: nav.offset().left, + width: nav.width(), + }); + nav.addClass('fixed-navigation'); + isFixed = true; + } + else if (!shouldBeFixed && isFixed) + { + nav.css({ + position: 'static' + }); + nav.removeClass('fixed-navigation'); + isFixed = false; + } + }); +}); +</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> Added: cassandra/site/publish/doc/3.10/operating/compaction.html URL: http://svn.apache.org/viewvc/cassandra/site/publish/doc/3.10/operating/compaction.html?rev=1757435&view=auto ============================================================================== --- cassandra/site/publish/doc/3.10/operating/compaction.html (added) +++ cassandra/site/publish/doc/3.10/operating/compaction.html Tue Aug 23 20:58:08 2016 @@ -0,0 +1,657 @@ +<!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>Documentation</title> + + <link rel="canonical" href="http://cassandra.apache.org/doc/3.10/operating/compaction.html"> + + <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="./../../../css/sphinx.css"> + + + <link rel="top" title="Apache Cassandra Documentation v3.10" href="../index.html"/> <link rel="up" title="Operating Cassandra" href="index.html"/> <link rel="next" title="Bloom Filters" href="bloom_filters.html"/> <link rel="prev" title="Hints" href="hints.html"/> +</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><a href="./../../../">Apache Cassandra</a></li> + + + + + <li><a href="./../../../doc">Documentation</a></li> + + + + + <li><a href="./">Operating Cassandra</a></li> + + + + <li>Compaction</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> + </ul> + </div><!-- /#cassandra-menu --> + + + </div> + </nav><!-- /.navbar --> +</div><!-- /.topnav --> + + <div class="container-fluid"> + <div class="row"> + <div class="col-md-2"> + <div class="doc-navigation"> + <div class="doc-menu" role="navigation"> + <div class="navbar-header"> + <button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <div class="navbar-collapse collapse sidebar-navbar-collapse"> + <form id="doc-search-form" class="navbar-form" action="../search.html" method="get" role="search"> + <div class="form-group"> + <input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs"> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </div> + </form> + + + + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../architecture/index.html">Architecture</a></li> +<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li> +<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li> +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Operating Cassandra</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="snitch.html">Snitch</a></li> +<li class="toctree-l2"><a class="reference internal" href="topo_changes.html">Adding, replacing, moving and removing nodes</a></li> +<li class="toctree-l2"><a class="reference internal" href="repair.html">Repair</a></li> +<li class="toctree-l2"><a class="reference internal" href="read_repair.html">Read repair</a></li> +<li class="toctree-l2"><a class="reference internal" href="hints.html">Hints</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Compaction</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#types-of-compaction">Types of compaction</a></li> +<li class="toctree-l3"><a class="reference internal" href="#when-is-a-minor-compaction-triggered">When is a minor compaction triggered?</a></li> +<li class="toctree-l3"><a class="reference internal" href="#merging-sstables">Merging sstables</a></li> +<li class="toctree-l3"><a class="reference internal" href="#tombstones-and-garbage-collection-gc-grace">Tombstones and Garbage Collection (GC) Grace</a></li> +<li class="toctree-l3"><a class="reference internal" href="#ttl">TTL</a></li> +<li class="toctree-l3"><a class="reference internal" href="#fully-expired-sstables">Fully expired sstables</a></li> +<li class="toctree-l3"><a class="reference internal" href="#repaired-unrepaired-data">Repaired/unrepaired data</a></li> +<li class="toctree-l3"><a class="reference internal" href="#data-directories">Data directories</a></li> +<li class="toctree-l3"><a class="reference internal" href="#single-sstable-tombstone-compaction">Single sstable tombstone compaction</a></li> +<li class="toctree-l3"><a class="reference internal" href="#common-options">Common options</a></li> +<li class="toctree-l3"><a class="reference internal" href="#compaction-nodetool-commands">Compaction nodetool commands</a></li> +<li class="toctree-l3"><a class="reference internal" href="#switching-the-compaction-strategy-and-options-using-jmx">Switching the compaction strategy and options using JMX</a></li> +<li class="toctree-l3"><a class="reference internal" href="#more-detailed-compaction-logging">More detailed compaction logging</a></li> +<li class="toctree-l3"><a class="reference internal" href="#size-tiered-compaction-strategy">Size Tiered Compaction Strategy</a></li> +<li class="toctree-l3"><a class="reference internal" href="#leveled-compaction-strategy">Leveled Compaction Strategy</a></li> +<li class="toctree-l3"><a class="reference internal" href="#time-window-compactionstrategy">Time Window CompactionStrategy</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="bloom_filters.html">Bloom Filters</a></li> +<li class="toctree-l2"><a class="reference internal" href="compression.html">Compression</a></li> +<li class="toctree-l2"><a class="reference internal" href="cdc.html">Change Data Capture</a></li> +<li class="toctree-l2"><a class="reference internal" href="backups.html">Backups</a></li> +<li class="toctree-l2"><a class="reference internal" href="bulk_loading.html">Bulk Loading</a></li> +<li class="toctree-l2"><a class="reference internal" href="metrics.html">Monitoring</a></li> +<li class="toctree-l2"><a class="reference internal" href="security.html">Security</a></li> +<li class="toctree-l2"><a class="reference internal" href="hardware.html">Hardware Choices</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li> +<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li> +<li class="toctree-l1"><a class="reference internal" href="../development/index.html">Cassandra Development</a></li> +<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs and Contributing</a></li> +<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li> +</ul> + + + + </div><!--/.nav-collapse --> + </div> + </div> + </div> + <div class="col-md-8"> + <div class="content doc-content"> + <div class="container"> + + <div class="section" id="compaction"> +<span id="id1"></span><h1>Compaction<a class="headerlink" href="#compaction" title="Permalink to this headline">¶</a></h1> +<div class="section" id="types-of-compaction"> +<h2>Types of compaction<a class="headerlink" href="#types-of-compaction" title="Permalink to this headline">¶</a></h2> +<p>The concept of compaction is used for different kinds of operations in Cassandra, the common thing about these +operations is that it takes one or more sstables and output new sstables. The types of compactions are;</p> +<dl class="docutils"> +<dt>Minor compaction</dt> +<dd>triggered automatically in Cassandra.</dd> +<dt>Major compaction</dt> +<dd>a user executes a compaction over all sstables on the node.</dd> +<dt>User defined compaction</dt> +<dd>a user triggers a compaction on a given set of sstables.</dd> +<dt>Scrub</dt> +<dd>try to fix any broken sstables. This can actually remove valid data if that data is corrupted, if that happens you +will need to run a full repair on the node.</dd> +<dt>Upgradesstables</dt> +<dd>upgrade sstables to the latest version. Run this after upgrading to a new major version.</dd> +<dt>Cleanup</dt> +<dd>remove any ranges this node does not own anymore, typically triggered on neighbouring nodes after a node has been +bootstrapped since that node will take ownership of some ranges from those nodes.</dd> +<dt>Secondary index rebuild</dt> +<dd>rebuild the secondary indexes on the node.</dd> +<dt>Anticompaction</dt> +<dd>after repair the ranges that were actually repaired are split out of the sstables that existed when repair started.</dd> +<dt>Sub range compaction</dt> +<dd>It is possible to only compact a given sub range - this could be useful if you know a token that has been +misbehaving - either gathering many updates or many deletes. (<code class="docutils literal"><span class="pre">nodetool</span> <span class="pre">compact</span> <span class="pre">-st</span> <span class="pre">x</span> <span class="pre">-et</span> <span class="pre">y</span></code>) will pick +all sstables containing the range between x and y and issue a compaction for those sstables. For STCS this will +most likely include all sstables but with LCS it can issue the compaction for a subset of the sstables. With LCS +the resulting sstable will end up in L0.</dd> +</dl> +</div> +<div class="section" id="when-is-a-minor-compaction-triggered"> +<h2>When is a minor compaction triggered?<a class="headerlink" href="#when-is-a-minor-compaction-triggered" title="Permalink to this headline">¶</a></h2> +<p># When an sstable is added to the node through flushing/streaming etc. +# When autocompaction is enabled after being disabled (<code class="docutils literal"><span class="pre">nodetool</span> <span class="pre">enableautocompaction</span></code>) +# When compaction adds new sstables. +# A check for new minor compactions every 5 minutes.</p> +</div> +<div class="section" id="merging-sstables"> +<h2>Merging sstables<a class="headerlink" href="#merging-sstables" title="Permalink to this headline">¶</a></h2> +<p>Compaction is about merging sstables, since partitions in sstables are sorted based on the hash of the partition key it +is possible to efficiently merge separate sstables. Content of each partition is also sorted so each partition can be +merged efficiently.</p> +</div> +<div class="section" id="tombstones-and-garbage-collection-gc-grace"> +<h2>Tombstones and Garbage Collection (GC) Grace<a class="headerlink" href="#tombstones-and-garbage-collection-gc-grace" title="Permalink to this headline">¶</a></h2> +<div class="section" id="why-tombstones"> +<h3>Why Tombstones<a class="headerlink" href="#why-tombstones" title="Permalink to this headline">¶</a></h3> +<p>When a delete request is received by Cassandra it does not actually remove the data from the underlying store. Instead +it writes a special piece of data known as a tombstone. The Tombstone represents the delete and causes all values which +occurred before the tombstone to not appear in queries to the database. This approach is used instead of removing values +because of the distributed nature of Cassandra.</p> +</div> +<div class="section" id="deletes-without-tombstones"> +<h3>Deletes without tombstones<a class="headerlink" href="#deletes-without-tombstones" title="Permalink to this headline">¶</a></h3> +<p>Imagine a three node cluster which has the value [A] replicated to every node.:</p> +<div class="highlight-none"><div class="highlight"><pre><span></span>[A], [A], [A] +</pre></div> +</div> +<p>If one of the nodes fails and and our delete operation only removes existing values we can end up with a cluster that +looks like:</p> +<div class="highlight-none"><div class="highlight"><pre><span></span>[], [], [A] +</pre></div> +</div> +<p>Then a repair operation would replace the value of [A] back onto the two +nodes which are missing the value.:</p> +<div class="highlight-none"><div class="highlight"><pre><span></span>[A], [A], [A] +</pre></div> +</div> +<p>This would cause our data to be resurrected even though it had been +deleted.</p> +</div> +<div class="section" id="deletes-with-tombstones"> +<h3>Deletes with Tombstones<a class="headerlink" href="#deletes-with-tombstones" title="Permalink to this headline">¶</a></h3> +<p>Starting again with a three node cluster which has the value [A] replicated to every node.:</p> +<div class="highlight-none"><div class="highlight"><pre><span></span>[A], [A], [A] +</pre></div> +</div> +<p>If instead of removing data we add a tombstone record, our single node failure situation will look like this.:</p> +<div class="highlight-none"><div class="highlight"><pre><span></span>[A, Tombstone[A]], [A, Tombstone[A]], [A] +</pre></div> +</div> +<p>Now when we issue a repair the Tombstone will be copied to the replica, rather than the deleted data being +resurrected.:</p> +<div class="highlight-none"><div class="highlight"><pre><span></span>[A, Tombstone[A]], [A, Tombstone[A]], [A, Tombstone[A]] +</pre></div> +</div> +<p>Our repair operation will correctly put the state of the system to what we expect with the record [A] marked as deleted +on all nodes. This does mean we will end up accruing Tombstones which will permanently accumulate disk space. To avoid +keeping tombstones forever we have a parameter known as <code class="docutils literal"><span class="pre">gc_grace_seconds</span></code> for every table in Cassandra.</p> +</div> +<div class="section" id="the-gc-grace-seconds-parameter-and-tombstone-removal"> +<h3>The gc_grace_seconds parameter and Tombstone Removal<a class="headerlink" href="#the-gc-grace-seconds-parameter-and-tombstone-removal" title="Permalink to this headline">¶</a></h3> +<p>The table level <code class="docutils literal"><span class="pre">gc_grace_seconds</span></code> parameter controls how long Cassandra will retain tombstones through compaction +events before finally removing them. This duration should directly reflect the amount of time a user expects to allow +before recovering a failed node. After <code class="docutils literal"><span class="pre">gc_grace_seconds</span></code> has expired the tombstone may be removed (meaning there will +no longer be any record that a certain piece of data was deleted), but as a tombstone can live in one sstable and the +data it covers in another, a compaction must also include both sstable for a tombstone to be removed. More precisely, to +be able to drop an actual tombstone the following needs to be true;</p> +<ul class="simple"> +<li>The tombstone must be older than <code class="docutils literal"><span class="pre">gc_grace_seconds</span></code></li> +<li>If partition X contains the tombstone, the sstable containing the partition plus all sstables containing data older +than the tombstone containing X must be included in the same compaction. We don’t need to care if the partition is in +an sstable if we can guarantee that all data in that sstable is newer than the tombstone. If the tombstone is older +than the data it cannot shadow that data.</li> +<li>If the option <code class="docutils literal"><span class="pre">only_purge_repaired_tombstones</span></code> is enabled, tombstones are only removed if the data has also been +repaired.</li> +</ul> +<p>If a node remains down or disconnected for longer than <code class="docutils literal"><span class="pre">gc_grace_seconds</span></code> it’s deleted data will be repaired back to +the other nodes and re-appear in the cluster. This is basically the same as in the “Deletes without Tombstones” section. +Note that tombstones will not be removed until a compaction event even if <code class="docutils literal"><span class="pre">gc_grace_seconds</span></code> has elapsed.</p> +<p>The default value for <code class="docutils literal"><span class="pre">gc_grace_seconds</span></code> is 864000 which is equivalent to 10 days. This can be set when creating or +altering a table using <code class="docutils literal"><span class="pre">WITH</span> <span class="pre">gc_grace_seconds</span></code>.</p> +</div> +</div> +<div class="section" id="ttl"> +<h2>TTL<a class="headerlink" href="#ttl" title="Permalink to this headline">¶</a></h2> +<p>Data in Cassandra can have an additional property called time to live - this is used to automatically drop data that has +expired once the time is reached. Once the TTL has expired the data is converted to a tombstone which stays around for +at least <code class="docutils literal"><span class="pre">gc_grace_seconds</span></code>. Note that if you mix data with TTL and data without TTL (or just different length of the +TTL) Cassandra will have a hard time dropping the tombstones created since the partition might span many sstables and +not all are compacted at once.</p> +</div> +<div class="section" id="fully-expired-sstables"> +<h2>Fully expired sstables<a class="headerlink" href="#fully-expired-sstables" title="Permalink to this headline">¶</a></h2> +<p>If an sstable contains only tombstones and it is guaranteed that that sstable is not shadowing data in any other sstable +compaction can drop that sstable. If you see sstables with only tombstones (note that TTL:ed data is considered +tombstones once the time to live has expired) but it is not being dropped by compaction, it is likely that other +sstables contain older data. There is a tool called <code class="docutils literal"><span class="pre">sstableexpiredblockers</span></code> that will list which sstables are +droppable and which are blocking them from being dropped. This is especially useful for time series compaction with +<code class="docutils literal"><span class="pre">TimeWindowCompactionStrategy</span></code> (and the deprecated <code class="docutils literal"><span class="pre">DateTieredCompactionStrategy</span></code>).</p> +</div> +<div class="section" id="repaired-unrepaired-data"> +<h2>Repaired/unrepaired data<a class="headerlink" href="#repaired-unrepaired-data" title="Permalink to this headline">¶</a></h2> +<p>With incremental repairs Cassandra must keep track of what data is repaired and what data is unrepaired. With +anticompaction repaired data is split out into repaired and unrepaired sstables. To avoid mixing up the data again +separate compaction strategy instances are run on the two sets of data, each instance only knowing about either the +repaired or the unrepaired sstables. This means that if you only run incremental repair once and then never again, you +might have very old data in the repaired sstables that block compaction from dropping tombstones in the unrepaired +(probably newer) sstables.</p> +</div> +<div class="section" id="data-directories"> +<h2>Data directories<a class="headerlink" href="#data-directories" title="Permalink to this headline">¶</a></h2> +<p>Since tombstones and data can live in different sstables it is important to realize that losing an sstable might lead to +data becoming live again - the most common way of losing sstables is to have a hard drive break down. To avoid making +data live tombstones and actual data are always in the same data directory. This way, if a disk is lost, all versions of +a partition are lost and no data can get undeleted. To achieve this a compaction strategy instance per data directory is +run in addition to the compaction strategy instances containing repaired/unrepaired data, this means that if you have 4 +data directories there will be 8 compaction strategy instances running. This has a few more benefits than just avoiding +data getting undeleted:</p> +<ul class="simple"> +<li>It is possible to run more compactions in parallel - leveled compaction will have several totally separate levelings +and each one can run compactions independently from the others.</li> +<li>Users can backup and restore a single data directory.</li> +<li>Note though that currently all data directories are considered equal, so if you have a tiny disk and a big disk +backing two data directories, the big one will be limited the by the small one. One work around to this is to create +more data directories backed by the big disk.</li> +</ul> +</div> +<div class="section" id="single-sstable-tombstone-compaction"> +<h2>Single sstable tombstone compaction<a class="headerlink" href="#single-sstable-tombstone-compaction" title="Permalink to this headline">¶</a></h2> +<p>When an sstable is written a histogram with the tombstone expiry times is created and this is used to try to find +sstables with very many tombstones and run single sstable compaction on that sstable in hope of being able to drop +tombstones in that sstable. Before starting this it is also checked how likely it is that any tombstones will actually +will be able to be dropped how much this sstable overlaps with other sstables. To avoid most of these checks the +compaction option <code class="docutils literal"><span class="pre">unchecked_tombstone_compaction</span></code> can be enabled.</p> +</div> +<div class="section" id="common-options"> +<span id="compaction-options"></span><h2>Common options<a class="headerlink" href="#common-options" title="Permalink to this headline">¶</a></h2> +<p>There is a number of common options for all the compaction strategies;</p> +<dl class="docutils"> +<dt><code class="docutils literal"><span class="pre">enabled</span></code> (default: true)</dt> +<dd>Whether minor compactions should run. Note that you can have ‘enabled’: true as a compaction option and then do +‘nodetool enableautocompaction’ to start running compactions.</dd> +<dt><code class="docutils literal"><span class="pre">tombstone_threshold</span></code> (default: 0.2)</dt> +<dd>How much of the sstable should be tombstones for us to consider doing a single sstable compaction of that sstable.</dd> +<dt><code class="docutils literal"><span class="pre">tombstone_compaction_interval</span></code> (default: 86400s (1 day))</dt> +<dd>Since it might not be possible to drop any tombstones when doing a single sstable compaction we need to make sure +that one sstable is not constantly getting recompacted - this option states how often we should try for a given +sstable.</dd> +<dt><code class="docutils literal"><span class="pre">log_all</span></code> (default: false)</dt> +<dd>New detailed compaction logging, see <a class="reference internal" href="#detailed-compaction-logging"><span class="std std-ref">below</span></a>.</dd> +<dt><code class="docutils literal"><span class="pre">unchecked_tombstone_compaction</span></code> (default: false)</dt> +<dd>The single sstable compaction has quite strict checks for whether it should be started, this option disables those +checks and for some usecases this might be needed. Note that this does not change anything for the actual +compaction, tombstones are only dropped if it is safe to do so - it might just rewrite an sstable without being able +to drop any tombstones.</dd> +<dt><code class="docutils literal"><span class="pre">only_purge_repaired_tombstone</span></code> (default: false)</dt> +<dd>Option to enable the extra safety of making sure that tombstones are only dropped if the data has been repaired.</dd> +<dt><code class="docutils literal"><span class="pre">min_threshold</span></code> (default: 4)</dt> +<dd>Lower limit of number of sstables before a compaction is triggered. Not used for <code class="docutils literal"><span class="pre">LeveledCompactionStrategy</span></code>.</dd> +<dt><code class="docutils literal"><span class="pre">max_threshold</span></code> (default: 32)</dt> +<dd>Upper limit of number of sstables before a compaction is triggered. Not used for <code class="docutils literal"><span class="pre">LeveledCompactionStrategy</span></code>.</dd> +</dl> +<p>Further, see the section on each strategy for specific additional options.</p> +</div> +<div class="section" id="compaction-nodetool-commands"> +<h2>Compaction nodetool commands<a class="headerlink" href="#compaction-nodetool-commands" title="Permalink to this headline">¶</a></h2> +<p>The <a class="reference internal" href="../tools/nodetool.html#nodetool"><span class="std std-ref">nodetool</span></a> utility provides a number of commands related to compaction:</p> +<dl class="docutils"> +<dt><code class="docutils literal"><span class="pre">enableautocompaction</span></code></dt> +<dd>Enable compaction.</dd> +<dt><code class="docutils literal"><span class="pre">disableautocompaction</span></code></dt> +<dd>Disable compaction.</dd> +<dt><code class="docutils literal"><span class="pre">setcompactionthroughput</span></code></dt> +<dd>How fast compaction should run at most - defaults to 16MB/s, but note that it is likely not possible to reach this +throughput.</dd> +<dt><code class="docutils literal"><span class="pre">compactionstats</span></code></dt> +<dd>Statistics about current and pending compactions.</dd> +<dt><code class="docutils literal"><span class="pre">compactionhistory</span></code></dt> +<dd>List details about the last compactions.</dd> +<dt><code class="docutils literal"><span class="pre">setcompactionthreshold</span></code></dt> +<dd>Set the min/max sstable count for when to trigger compaction, defaults to 4/32.</dd> +</dl> +</div> +<div class="section" id="switching-the-compaction-strategy-and-options-using-jmx"> +<h2>Switching the compaction strategy and options using JMX<a class="headerlink" href="#switching-the-compaction-strategy-and-options-using-jmx" title="Permalink to this headline">¶</a></h2> +<p>It is possible to switch compaction strategies and its options on just a single node using JMX, this is a great way to +experiment with settings without affecting the whole cluster. The mbean is:</p> +<div class="highlight-none"><div class="highlight"><pre><span></span>org.apache.cassandra.db:type=ColumnFamilies,keyspace=<keyspace_name>,columnfamily=<table_name> +</pre></div> +</div> +<p>and the attribute to change is <code class="docutils literal"><span class="pre">CompactionParameters</span></code> or <code class="docutils literal"><span class="pre">CompactionParametersJson</span></code> if you use jconsole or jmc. The +syntax for the json version is the same as you would use in an <a class="reference internal" href="../cql/ddl.html#alter-table-statement"><span class="std std-ref">ALTER TABLE</span></a> statement - +for example:</p> +<div class="highlight-none"><div class="highlight"><pre><span></span>{ 'class': 'LeveledCompactionStrategy', 'sstable_size_in_mb': 123 } +</pre></div> +</div> +<p>The setting is kept until someone executes an <a class="reference internal" href="../cql/ddl.html#alter-table-statement"><span class="std std-ref">ALTER TABLE</span></a> that touches the compaction +settings or restarts the node.</p> +</div> +<div class="section" id="more-detailed-compaction-logging"> +<span id="detailed-compaction-logging"></span><h2>More detailed compaction logging<a class="headerlink" href="#more-detailed-compaction-logging" title="Permalink to this headline">¶</a></h2> +<p>Enable with the compaction option <code class="docutils literal"><span class="pre">log_all</span></code> and a more detailed compaction log file will be produced in your log +directory.</p> +</div> +<div class="section" id="size-tiered-compaction-strategy"> +<span id="stcs"></span><h2>Size Tiered Compaction Strategy<a class="headerlink" href="#size-tiered-compaction-strategy" title="Permalink to this headline">¶</a></h2> +<p>The basic idea of <code class="docutils literal"><span class="pre">SizeTieredCompactionStrategy</span></code> (STCS) is to merge sstables of approximately the same size. All +sstables are put in different buckets depending on their size. An sstable is added to the bucket if size of the sstable +is within <code class="docutils literal"><span class="pre">bucket_low</span></code> and <code class="docutils literal"><span class="pre">bucket_high</span></code> of the current average size of the sstables already in the bucket. This +will create several buckets and the most interesting of those buckets will be compacted. The most interesting one is +decided by figuring out which bucket’s sstables takes the most reads.</p> +<div class="section" id="major-compaction"> +<h3>Major compaction<a class="headerlink" href="#major-compaction" title="Permalink to this headline">¶</a></h3> +<p>When running a major compaction with STCS you will end up with two sstables per data directory (one for repaired data +and one for unrepaired data). There is also an option (-s) to do a major compaction that splits the output into several +sstables. The sizes of the sstables are approximately 50%, 25%, 12.5%... of the total size.</p> +</div> +<div class="section" id="stcs-options"> +<span id="id2"></span><h3>STCS options<a class="headerlink" href="#stcs-options" title="Permalink to this headline">¶</a></h3> +<dl class="docutils"> +<dt><code class="docutils literal"><span class="pre">min_sstable_size</span></code> (default: 50MB)</dt> +<dd>Sstables smaller than this are put in the same bucket.</dd> +<dt><code class="docutils literal"><span class="pre">bucket_low</span></code> (default: 0.5)</dt> +<dd>How much smaller than the average size of a bucket a sstable should be before not being included in the bucket. That +is, if <code class="docutils literal"><span class="pre">bucket_low</span> <span class="pre">*</span> <span class="pre">avg_bucket_size</span> <span class="pre"><</span> <span class="pre">sstable_size</span></code> (and the <code class="docutils literal"><span class="pre">bucket_high</span></code> condition holds, see below), then +the sstable is added to the bucket.</dd> +<dt><code class="docutils literal"><span class="pre">bucket_high</span></code> (default: 1.5)</dt> +<dd>How much bigger than the average size of a bucket a sstable should be before not being included in the bucket. That +is, if <code class="docutils literal"><span class="pre">sstable_size</span> <span class="pre"><</span> <span class="pre">bucket_high</span> <span class="pre">*</span> <span class="pre">avg_bucket_size</span></code> (and the <code class="docutils literal"><span class="pre">bucket_low</span></code> condition holds, see above), then +the sstable is added to the bucket.</dd> +</dl> +</div> +<div class="section" id="defragmentation"> +<h3>Defragmentation<a class="headerlink" href="#defragmentation" title="Permalink to this headline">¶</a></h3> +<p>Defragmentation is done when many sstables are touched during a read. The result of the read is put in to the memtable +so that the next read will not have to touch as many sstables. This can cause writes on a read-only-cluster.</p> +</div> +</div> +<div class="section" id="leveled-compaction-strategy"> +<span id="lcs"></span><h2>Leveled Compaction Strategy<a class="headerlink" href="#leveled-compaction-strategy" title="Permalink to this headline">¶</a></h2> +<p>The idea of <code class="docutils literal"><span class="pre">LeveledCompactionStrategy</span></code> (LCS) is that all sstables are put into different levels where we guarantee +that no overlapping sstables are in the same level. By overlapping we mean that the first/last token of a single sstable +are never overlapping with other sstables. This means that for a SELECT we will only have to look for the partition key +in a single sstable per level. Each level is 10x the size of the previous one and each sstable is 160MB by default. L0 +is where sstables are streamed/flushed - no overlap guarantees are given here.</p> +<p>When picking compaction candidates we have to make sure that the compaction does not create overlap in the target level. +This is done by always including all overlapping sstables in the next level. For example if we select an sstable in L3, +we need to guarantee that we pick all overlapping sstables in L4 and make sure that no currently ongoing compactions +will create overlap if we start that compaction. We can start many parallel compactions in a level if we guarantee that +we wont create overlap. For L0 -> L1 compactions we almost always need to include all L1 sstables since most L0 sstables +cover the full range. We also can’t compact all L0 sstables with all L1 sstables in a single compaction since that can +use too much memory.</p> +<p>When deciding which level to compact LCS checks the higher levels first (with LCS, a “higher” level is one with a higher +number, L0 being the lowest one) and if the level is behind a compaction will be started in that level.</p> +<div class="section" id="id3"> +<h3>Major compaction<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3> +<p>It is possible to do a major compaction with LCS - it will currently start by filling out L1 and then once L1 is full, +it continues with L2 etc. This is sub optimal and will change to create all the sstables in a high level instead, +CASSANDRA-11817.</p> +</div> +<div class="section" id="bootstrapping"> +<h3>Bootstrapping<a class="headerlink" href="#bootstrapping" title="Permalink to this headline">¶</a></h3> +<p>During bootstrap sstables are streamed from other nodes. The level of the remote sstable is kept to avoid many +compactions after the bootstrap is done. During bootstrap the new node also takes writes while it is streaming the data +from a remote node - these writes are flushed to L0 like all other writes and to avoid those sstables blocking the +remote sstables from going to the correct level, we only do STCS in L0 until the bootstrap is done.</p> +</div> +<div class="section" id="stcs-in-l0"> +<h3>STCS in L0<a class="headerlink" href="#stcs-in-l0" title="Permalink to this headline">¶</a></h3> +<p>If LCS gets very many L0 sstables reads are going to hit all (or most) of the L0 sstables since they are likely to be +overlapping. To more quickly remedy this LCS does STCS compactions in L0 if there are more than 32 sstables there. This +should improve read performance more quickly compared to letting LCS do its L0 -> L1 compactions. If you keep getting +too many sstables in L0 it is likely that LCS is not the best fit for your workload and STCS could work out better.</p> +</div> +<div class="section" id="starved-sstables"> +<h3>Starved sstables<a class="headerlink" href="#starved-sstables" title="Permalink to this headline">¶</a></h3> +<p>If a node ends up with a leveling where there are a few very high level sstables that are not getting compacted they +might make it impossible for lower levels to drop tombstones etc. For example, if there are sstables in L6 but there is +only enough data to actually get a L4 on the node the left over sstables in L6 will get starved and not compacted. This +can happen if a user changes sstable_size_in_mb from 5MB to 160MB for example. To avoid this LCS tries to include +those starved high level sstables in other compactions if there has been 25 compaction rounds where the highest level +has not been involved.</p> +</div> +<div class="section" id="lcs-options"> +<span id="id4"></span><h3>LCS options<a class="headerlink" href="#lcs-options" title="Permalink to this headline">¶</a></h3> +<dl class="docutils"> +<dt><code class="docutils literal"><span class="pre">sstable_size_in_mb</span></code> (default: 160MB)</dt> +<dd>The target compressed (if using compression) sstable size - the sstables can end up being larger if there are very +large partitions on the node.</dd> +</dl> +<p>LCS also support the <code class="docutils literal"><span class="pre">cassandra.disable_stcs_in_l0</span></code> startup option (<code class="docutils literal"><span class="pre">-Dcassandra.disable_stcs_in_l0=true</span></code>) to avoid +doing STCS in L0.</p> +</div> +</div> +<div class="section" id="time-window-compactionstrategy"> +<span id="twcs"></span><h2>Time Window CompactionStrategy<a class="headerlink" href="#time-window-compactionstrategy" title="Permalink to this headline">¶</a></h2> +<p><code class="docutils literal"><span class="pre">TimeWindowCompactionStrategy</span></code> (TWCS) is designed specifically for workloads where it’s beneficial to have data on +disk grouped by the timestamp of the data, a common goal when the workload is time-series in nature or when all data is +written with a TTL. In an expiring/TTL workload, the contents of an entire SSTable likely expire at approximately the +same time, allowing them to be dropped completely, and space reclaimed much more reliably than when using +<code class="docutils literal"><span class="pre">SizeTieredCompactionStrategy</span></code> or <code class="docutils literal"><span class="pre">LeveledCompactionStrategy</span></code>. The basic concept is that +<code class="docutils literal"><span class="pre">TimeWindowCompactionStrategy</span></code> will create 1 sstable per file for a given window, where a window is simply calculated +as the combination of two primary options:</p> +<dl class="docutils"> +<dt><code class="docutils literal"><span class="pre">compaction_window_unit</span></code> (default: DAYS)</dt> +<dd>A Java TimeUnit (MINUTES, HOURS, or DAYS).</dd> +<dt><code class="docutils literal"><span class="pre">compaction_window_size</span></code> (default: 1)</dt> +<dd>The number of units that make up a window.</dd> +</dl> +<p>Taken together, the operator can specify windows of virtually any size, and <cite>TimeWindowCompactionStrategy</cite> will work to +create a single sstable for writes within that window. For efficiency during writing, the newest window will be +compacted using <cite>SizeTieredCompactionStrategy</cite>.</p> +<p>Ideally, operators should select a <code class="docutils literal"><span class="pre">compaction_window_unit</span></code> and <code class="docutils literal"><span class="pre">compaction_window_size</span></code> pair that produces +approximately 20-30 windows - if writing with a 90 day TTL, for example, a 3 Day window would be a reasonable choice +(<code class="docutils literal"><span class="pre">'compaction_window_unit':'DAYS','compaction_window_size':3</span></code>).</p> +<div class="section" id="timewindowcompactionstrategy-operational-concerns"> +<h3>TimeWindowCompactionStrategy Operational Concerns<a class="headerlink" href="#timewindowcompactionstrategy-operational-concerns" title="Permalink to this headline">¶</a></h3> +<p>The primary motivation for TWCS is to separate data on disk by timestamp and to allow fully expired SSTables to drop +more efficiently. One potential way this optimal behavior can be subverted is if data is written to SSTables out of +order, with new data and old data in the same SSTable. Out of order data can appear in two ways:</p> +<ul class="simple"> +<li>If the user mixes old data and new data in the traditional write path, the data will be comingled in the memtables +and flushed into the same SSTable, where it will remain comingled.</li> +<li>If the user’s read requests for old data cause read repairs that pull old data into the current memtable, that data +will be comingled and flushed into the same SSTable.</li> +</ul> +<p>While TWCS tries to minimize the impact of comingled data, users should attempt to avoid this behavior. Specifically, +users should avoid queries that explicitly set the timestamp via CQL <code class="docutils literal"><span class="pre">USING</span> <span class="pre">TIMESTAMP</span></code>. Additionally, users should run +frequent repairs (which streams data in such a way that it does not become comingled), and disable background read +repair by setting the table’s <code class="docutils literal"><span class="pre">read_repair_chance</span></code> and <code class="docutils literal"><span class="pre">dclocal_read_repair_chance</span></code> to 0.</p> +</div> +<div class="section" id="changing-timewindowcompactionstrategy-options"> +<h3>Changing TimeWindowCompactionStrategy Options<a class="headerlink" href="#changing-timewindowcompactionstrategy-options" title="Permalink to this headline">¶</a></h3> +<p>Operators wishing to enable <code class="docutils literal"><span class="pre">TimeWindowCompactionStrategy</span></code> on existing data should consider running a major compaction +first, placing all existing data into a single (old) window. Subsequent newer writes will then create typical SSTables +as expected.</p> +<p>Operators wishing to change <code class="docutils literal"><span class="pre">compaction_window_unit</span></code> or <code class="docutils literal"><span class="pre">compaction_window_size</span></code> can do so, but may trigger +additional compactions as adjacent windows are joined together. If the window size is decrease d (for example, from 24 +hours to 12 hours), then the existing SSTables will not be modified - TWCS can not split existing SSTables into multiple +windows.</p> +</div> +</div> +</div> + + + + + <div class="doc-prev-next-links" role="navigation" aria-label="footer navigation"> + + <a href="bloom_filters.html" class="btn btn-default pull-right " role="button" title="Bloom Filters" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a> + + + <a href="hints.html" class="btn btn-default" role="button" title="Hints" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a> + + </div> + + </div> + </div> + </div> + <div class="col-md-2"> + </div> + </div> +</div> + + <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> + </div> + + <div class="col-md-8 trademark"> + <p>© 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 src="./../../../js/doctools.js"></script> +<script src="./../../../js/searchtools.js"></script> + + <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: "", VERSION: "", COLLAPSE_INDEX: false, FILE_SUFFIX: ".html", HAS_SOURCE: false, SOURCELINK_SUFFIX: "" }; </script> + +<script type="text/javascript"> +$(function() { + // Stick the #nav to the top of the window + var nav = $('.doc-navigation'); + var navHomeY = nav.offset().top; + var isFixed = false; + var $w = $(window); + $w.scroll(function() { + var scrollTop = $w.scrollTop(); + var shouldBeFixed = $w.width() > 991 && scrollTop >= navHomeY - 10; + if (shouldBeFixed && !isFixed) { + nav.css({ + position: 'fixed', + top: 0, + left: nav.offset().left, + width: nav.width(), + }); + nav.addClass('fixed-navigation'); + isFixed = true; + } + else if (!shouldBeFixed && isFixed) + { + nav.css({ + position: 'static' + }); + nav.removeClass('fixed-navigation'); + isFixed = false; + } + }); +}); +</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>
