<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Road to Failure</title>
	<atom:link href="http://www.roadtofailure.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.roadtofailure.com</link>
	<description>The Fringes of Scalability, Social Media, and Computer Science.</description>
	<lastBuildDate>Fri, 26 Feb 2010 00:32:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>LinkedIn Talk: How To Make Life Suck Less (Writing Scalable Software)</title>
		<link>http://www.roadtofailure.com/2010/02/22/linkedin-talk-how-to-make-life-suck-less-writing-scalable-software/</link>
		<comments>http://www.roadtofailure.com/2010/02/22/linkedin-talk-how-to-make-life-suck-less-writing-scalable-software/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 22:42:53 +0000</pubDate>
		<dc:creator>Bradford</dc:creator>
				<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.roadtofailure.com/?p=142</guid>
		<description><![CDATA[Last December, I gave a talk at LinkedIn about scalability &#8220;best practices&#8221; from engineering, business, and operations perspectives. It&#8217;s a solid collection of tips and anecdotes from my experiences, as well as some from accomplished large-scale architects such as  Ryan Rawson, James Hamilton, and Bradford Cross.
Enjoy!
I can&#8217;t embed the video for some reason,  [...]]]></description>
			<content:encoded><![CDATA[<p>Last December, I gave a talk at LinkedIn about scalability &#8220;best practices&#8221; from engineering, business, and operations perspectives. It&#8217;s a solid collection of tips and anecdotes from my experiences, as well as some from accomplished large-scale architects such as <a href="http://www.twitter.com/ryanobjc" target="_blank"> Ryan Rawson</a>, <a href="http://perspectives.mvdirona.com/" target="_blank">James Hamilton</a>, and <a href="http://measuringmeasures.com/">Bradford Cross</a>.</p>
<p>Enjoy!</p>
<p><strong>I can&#8217;t embed the video for some reason, <a href="http://www.youtube.com/watch?v=geNLTPiHSM4"><span style="color: #0000ff;"> </span></a><strong><a href="http://www.youtube.com/watch?v=N0iAT47ScWg"><span style="color: #0000ff;">here&#8217;s the Link </span></a>.</strong></strong></p>
<p><strong><span style="font-weight: normal;">A big thanks to Noah Campbell at LinkedIn for inviting me &#8212; it was a blast!</span></strong></p>
<p><strong> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.roadtofailure.com/2010/02/22/linkedin-talk-how-to-make-life-suck-less-writing-scalable-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing the Drawn-to-Scale Platform!</title>
		<link>http://www.roadtofailure.com/2010/02/15/announcing-the-drawn-to-scale-platform/</link>
		<comments>http://www.roadtofailure.com/2010/02/15/announcing-the-drawn-to-scale-platform/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 18:20:11 +0000</pubDate>
		<dc:creator>Bradford</dc:creator>
				<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.roadtofailure.com/?p=121</guid>
		<description><![CDATA[Whether it&#8217;s creative content or business records, data is piling up on us faster every day. Amazingly though, current database products are still being driven by technology standards from the pre-Internet era. Which means that data-centric businesses, and other businesses who find themselves pursuing data-centric opportunities, are demanding something more.
(Want to learn more?  fill [...]]]></description>
			<content:encoded><![CDATA[<p>Whether it&#8217;s creative content or business records, data is piling up on us faster every day. Amazingly though, current database products are still being driven by technology standards from the pre-Internet era. Which means that data-centric businesses, and other businesses who find themselves pursuing data-centric opportunities, are demanding something more.</p>
<h4 style="text-align: center;">(Want to learn more? <a title="Drawn to Scale contact" href="http://spreadsheets.google.com/viewform?hl=en&amp;formkey=dE9Ra2FfNTVNaktJdlZDQVJfN2xoaEE6MA" target="_blank"> fill out this simple form</a> and we&#8217;ll drop you a line!)</h4>
<p style="text-align: left;">Imagine, for the sake of illustration, that you&#8217;re part of a new startup company that aggregates web content and does a lot of value-adding.</p>
<p>The company busily integrates gigabytes of data from various sources, analyzes it, then makes it available via search. There are three engineers: two working on an app, and one on data (administered with the &#8216;help&#8217; of MySQL). A standalone machine processes incoming data, then feeds it to the database.</p>
<p>But there&#8217;s a problem…</p>
<p>Time goes on, you ingest more data, add new sources, etc. Soon, your database response times are getting longer for no apparent reason. Downtime is more frequent. Two more engineers come aboard to tune up the DB and rewrite some code.</p>
<p>Uh oh. Users are complaining. Management is sweating, and suddenly they&#8217;re paying attention to the data infrastructure.</p>
<p>$100,000 later, a state-of-the-art server arrives, and after some migration panic things are back to normal.</p>
<p>The business gets more popular, users demand more features&#8230; In a few months, the database is crawling again. Even more engineers are brought in and the whole dirty cycle starts again.</p>
<p>But that&#8217;s just the way it goes, right?</p>
<p>The Drawn to Scale Platform is designed to give companies room to grow. We discovered that Internet-scale software can be lean, fast, and even easy to use &#8212; all vital factors in building better systems that last. We believe in providing simple interfaces and controls, not SQL black magic (though we may support SQL in the future), and our platform offers seamless scalability to handle any peaks or spikes. We even provide a custom toolset that makes management and migration of existing data easy.</p>
<p>Traditional database servers are mature. They&#8217;re well understood, and well supported. But they also have performance ceilings most people won&#8217;t hit early on. This makes choosing them conventional wisdom, and a safe bet. But hit that ceiling and quite literally no amount of money will save you. Twitter learned this the hard way in 2008, and had to start over again. Not all companies survive such a rewrite.</p>
<p>My cofounder and I started Drawn to Scale so companies can move fast, developers can build incredible apps, and so no-one has to stay up late kicking database servers into shape.</p>
<h4 style="text-align: center;"><span style="font-family: mceinline;">(want to learn more? </span><a title="Drawn to Scale contact" href="http://spreadsheets.google.com/viewform?hl=en&amp;formkey=dE9Ra2FfNTVNaktJdlZDQVJfN2xoaEE6MA" target="_blank"><span style="font-family: mceinline;">fill out this simple form</span></a><span style="font-family: mceinline;"> and we&#8217;ll drop you a line! <a title="Vote for Drawn to Scale" href="http://launchpad.cloudconnectevent.com/vote-now/" target="_blank">or Watch our Video</a> and vote for &#8220;Drawn to Scale&#8221;.)</span></h4>
<p>The result of all this is that you can now focus on building your business and applications, instead of spending precious resources maintaining and building infrastructure.</p>
<p>You don&#8217;t have to fight with your tools any more.</p>
<p>&#8230;let&#8217;s learn more!<br />
<span id="more-121"></span></p>
<h3>Why are we doing this?</h3>
<p>Our motivation comes from knowing that Internet-scale businesses need 100% agility and 100% presence, but existing solutions don&#8217;t really offer that. As a result, Drawn to Scale&#8217;s platform is:</p>
<ul>
<li>ready to build with from day zero</li>
<li>built to run on commodity, cheap hardware</li>
<li>able to scale out and resize on demand on the cloud or in your DC</li>
<li>manageable by humans(!)</li>
</ul>
<p>Just put your data in, and query it. It&#8217;s that easy.</p>
<h3><strong>Indestructibly lightweight storage</strong></h3>
<p>Data wants to be useful. But to be useful it has to be stored safely and turned around quickly for immediate, random access. To do this we use Hadoop and HBase, a fast and reliable storage tech that captures data of any type or size. Our implementation of HBase is self-managing and also super forgiving when it comes to organization, so it puts old-style &#8220;schemas&#8221; right back where they belong (ie yesterday).</p>
<p>Here&#8217;s an illustration of the kind of command we use to make data persistent and available:</p>
<p><em><span style="color: #008000;">Table.put(Column,ColumnFamily, Data);</span></em></p>
<p>Everything else that happens, like search preparation and backup, is helpfully automatic. Just send and go.</p>
<h3><strong>Optimized for the queries that matter</strong></h3>
<p>Software evolves fast because <em>good ideas travel</em>. Standardized form controls, standardized web page layout&#8230; over time certain patterns just rise to the top and stay there because they work. Database handling is no different. Regardless of how new and amazing an app might be, it&#8217;s likely the fundamental building blocks are familiar and constant.</p>
<p>Consider for a moment what you typically do with your data. It&#8217;s likely, if you&#8217;re maintaining any sort of web app or dashboard, that the vast majority of operations will be in the following list:</p>
<ol>
<li>SELECT</li>
<li>GROUP BY</li>
<li>COUNT</li>
<li>SUM</li>
<li>Filtering/WHERE</li>
<li>A few others</li>
</ol>
<p>The Drawn to Scale platform is fast and easy precisely because we made it to reflect this reality. We&#8217;ve created an indexing engine and query language specifically to do this one handful of things extremely right &#8212; things that common practice has proven to matter. Exactly what you need, and no more.</p>
<h3>Search that doesn&#8217;t discriminate</h3>
<p>Those operations we mentioned? They work just as well on raw text as they do on pre-structured data. Which means you can easily mix structured and unstructured data together and search or browse by attributes, the same way you might discover products at Amazon.com or Newegg. To achieve this we use search products like Lucene and bobo-browse, adapting them as part of a scalable architecture.</p>
<p>This combined directory/search ability &#8212; known as faceted search &#8212; also makes sense for web content aggregation, because it allows for related items to be pulled from non-uniform sources.</p>
<p><strong>Availability in changing conditions</strong></p>
<p>Data isn&#8217;t particularly useful if you can&#8217;t serve it on time. So as your data volume grows, or the number of hits on it increases, our platform can spin up additional server resources to balance out the load. The sky&#8217;s the limit when it comes to simultaneous requests (although we do recommend adding caches  to your apps wherever possible). And when traffic isn&#8217;t spiking, that extra capacity can come back to us and be saved for later.</p>
<h3>What&#8217;s the value?</h3>
<p>We believe in working smarter. By using a platform that addresses real requirements, you&#8217;re making more money and spending less of it. Your company gets to be moving faster and building what it needs to survive, and you&#8217;re freer to be a better developer, manager, or CEO.</p>
<p>We&#8217;re extremely excited to be rolling out this product over the coming months. To know more or become an advance customer, <a title="Drawn To Scale Contact" href=" http://spreadsheets.google.com/viewform?hl=en&amp;formkey=dE9Ra2FfNTVNaktJdlZDQVJfN2xoaEE6MA" target="_blank">drop us a line on this form</a>.</p>
<p>Want to see more info in a video? <a title="Vote for Drawn to Scale" href="http://launchpad.cloudconnectevent.com/vote-now/" target="_blank">Check out this link</a> and vote for &#8220;Drawn to Scale&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.roadtofailure.com/2010/02/15/announcing-the-drawn-to-scale-platform/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Logging: Unsexy, Important, and now Usable.</title>
		<link>http://www.roadtofailure.com/2010/01/25/logging-unsexy-important-and-now-usable/</link>
		<comments>http://www.roadtofailure.com/2010/01/25/logging-unsexy-important-and-now-usable/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 19:07:52 +0000</pubDate>
		<dc:creator>Bradford</dc:creator>
				<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.roadtofailure.com/?p=114</guid>
		<description><![CDATA[Using logs is now as easy as producing them.
Logging is perhaps the least sexy part of writing software, yet it&#8217;s surprisingly important. There&#8217;s lots of boring stuff that causes heated arguments (like whitespace, build systems, and version control). But no-one has impassioned, snarky blogs or tweets about what format your logs should be in. Much [...]]]></description>
			<content:encoded><![CDATA[<p>Using logs is now as easy as producing them.</p>
<p>Logging is perhaps the least sexy part of writing software, yet it&#8217;s surprisingly important. There&#8217;s lots of boring stuff that causes heated arguments (like whitespace, build systems, and version control). But no-one has impassioned, snarky blogs or tweets about what format your logs should be in. Much like cell phones or the Internet, we don&#8217;t realize how we need them until it&#8217;s too late.</p>
<p>We&#8217;re drowning in information from our servers. Especially when dealing with distributed/Big Data systems, which are growing incredibly fast. Even when building small server clusters, my co-founder Nick and I found it hard to learn what was going on. So we chatted, &#8220;Well, what&#8217;s the biggest step forward in web accessin the past 15 years? Search!&#8221; In a few brief moments, we set about sketching up some ideas for a generalized &#8220;log search&#8221; engine, and ended up naming it &#8220;LogSearch&#8221; (we&#8217;re literalists.)</p>
<p><span id="more-114"></span></p>
<p>Logging is something engineers have always needed, because software (no matter how experienced you are) is notoriously unpredictable. When you&#8217;ve got more than 10 computers, it&#8217;s difficult to keep track of what&#8217;s going on day-to-day, and even worse when Something Goes Wrong. When the inevitable crisis comes, you don&#8217;t want to spend a few hours poking through log files on 30 different machines. You want to be a hero and find the problem in 5 minutes, then get on with your life. Or maybe you want to take a longer view of things &#8212; run some interesting statistics on your logs, and study usage patterns.</p>
<p>Let&#8217;s ponder the implications of that for a second. What if you could log every action taken in your application, and analyze it to exactly how your application was used? Delicious.</p>
<p>All of us at Drawn to Scale have dealt with distributed systems for a while. We like to build stuff we would use. That&#8217;s why we built something that lets us:</p>
<ul>
<li>Be absurdly easy to use in the cloud or in a datacenter</li>
<li>Easily ingest any amount of log data (hundreds of TBs)</li>
<li>Find structured fields (like timestamps)</li>
<li>Search these logs (we usually don&#8217;t know what we&#8217;re looking for when something goes wrong)</li>
<li>Provide the actual text from the log itself</li>
<li>Build trend charts (i.e., how many errors/day?)</li>
<li>Send alerts when something looks &#8220;strange&#8221;</li>
<li>Run Hadoop/MapReduce scripts to provide interesting analytics</li>
</ul>
<p>If you had a log search engine, with various utilities built on top of it, you&#8217;d have an easy way to see what&#8217;s going on in the apps that drive your business. You could&#8230;</p>
<ul>
<li>Be aware of problems *before* they cause critical downtime</li>
<li>Monitor trends so alerts can be sent for odd activities</li>
<li>Examine long-term utilization patterns to optimize software</li>
<li>Quickly diagnose when machines crash or become flaky</li>
<li>Look smart and &#8220;in touch&#8221; with your systems!</li>
<li>Save piles of money!</li>
<li>Make piles of money!</li>
</ul>
<h2>Isn&#8217;t Monitoring Software Enough?</h2>
<p>Engineers and ops people have a fantasy of coming into work, pulling up a dashboard on their web browser, and understanding everything that is going on. We want to be like Geordi in Star Trek, who can see everything on the Enterprise with a few finger presses.  I wish there was such a thing!  The closest we can get is <a href="http://ganglia.sourceforge.net/">ganglia</a>, which monitors OS-level events (it can be hacked for apps). It&#8217;s pretty cool, but only so useful. Monitoring requires serious engineering effort &#8211; even if planned from the very beginning (it rarely is), there&#8217;s quite a bit of code that must be written and maintained. Monitoring services need to run on each box, and the central servers become a system of their own that needs to be reliable, redundant, and robust.</p>
<p>Logs, however, are a piece of cake.  Here&#8217;s what usually happens.</p>
<ol>
<li>Put a line of code similar to Log.Error(&#8220;Something horrible happened!&#8221;); in your application</li>
<li>The message and a Timestamp appear in a /logs directory on the disk</li>
<li>Logs are cleaned up every few days by an automated process</li>
</ol>
<p>Since logs are so simple to implement, it&#8217;s easy for us lazy engineers to toss them into everything we do. The problem is that when they grow beyond a few hundred MB, it takes forever to search them for what you want, and it&#8217;s even harder if spread across multiple machines!</p>
<h2>Why it&#8217;s Hard</h2>
<p>So It&#8217;s easy to fill logs with lots of tasty info. But it&#8217;s hard to make sense of it all. It&#8217;s semi-structured text. This means in order to find what you want, you need to explore the data: you need to search it. The only tool most of us can use is grep &#8212; tedious and manual if you need to troubleshoot several dozen logs on each box. There&#8217;s also interesting information in your log that isn&#8217;t just raw text &#8212; dates, server addresses, error types, and more. So you have to build something to parse meaning out of it.</p>
<p>You end up having to design a distributed system just to parse handle logs.  There&#8217;s commercial tools out there which claim to do this, but they fail at large scale.</p>
<p>Draw to Scale has built LogSearch from the beginning to handle Big Data.</p>
<h2>How We Do It</h2>
<p>The Drawn to Scale BigSearch platform is built on a ton of distributed and NoSQL tools, combined with quite a bit of Secret Sauce. Our goal is to provide an end-to-end data storage, search, and serving platform. To do this, however, we need to know what the system does, and prove its capabilities. That&#8217;s why LogSearch is a great tool to put on top of BigSearch.</p>
<p>We run in the cloud or in your datacenter. To run our system in the cloud (specifically, AWS), it&#8217;s rather simple: spin up a few instances with our machine image, and install a script on each of your boxes to find the logs and push them onto the LogSearch cluster. Since every component of our infrastructure is scalable, it can handle as much data as is thrown at it.</p>
<p>Everything is seamlessly processed with Hadoop, stored in HBase (a clone of Google&#8217;s BigTable), indexed, and made searchable in a few minutes. All you have to do is go to a webpage and search for what you want to find in the logs. In the near future, you can upload MapReduce, Pig, or Hive scripts to provide more complex analytics.</p>
<p>Are you excited? (I am, I wrote a whole friggin&#8217; article). Want to learn more? Follow me on twitter at <a href="http://twitter.com/lusciouspear" target="_blank">@lusciouspear</a>, or drop me a line at <a href="mailto:info@drawntoscalehq.com">info@drawntoscalehq.com</a>. We&#8217;d love to show you a demo, or get your ideas on what would make this tool Really Awesome and Indispensable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.roadtofailure.com/2010/01/25/logging-unsexy-important-and-now-usable/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>HBase vs. Cassandra: NoSQL Battle!</title>
		<link>http://www.roadtofailure.com/2009/10/29/hbase-vs-cassandra-nosql-battle/</link>
		<comments>http://www.roadtofailure.com/2009/10/29/hbase-vs-cassandra-nosql-battle/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 19:42:47 +0000</pubDate>
		<dc:creator>Bradford</dc:creator>
				<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.roadtofailure.com/?p=84</guid>
		<description><![CDATA[(Note: Check out the Drawn to Scale platform. Store, query, search, process, and serve *all* your data. To *all* your users. In real time). 
Distributed, scalable databases are desperately needed these days. From building massive data warehouses at a social media startup, to protein folding analysis at a biotech company, &#8220;Big Data&#8221; is becoming more [...]]]></description>
			<content:encoded><![CDATA[<p><strong>(Note: Check out the </strong><a href="http://www.roadtofailure.com/2010/02/15/announcing-the-drawn-to-scale-platform/" target="_self"><strong>Drawn to Scale platform</strong></a><strong>. Store, query, search, process, and serve *all* your data. To *all* your users. In real time). </strong></p>
<p>Distributed, scalable databases are desperately needed these days. From building massive data warehouses at a social media startup, to protein folding analysis at a biotech company, &#8220;Big Data&#8221; is becoming more important every day. While Hadoop has emerged as the <em>de facto</em> standard for handling big data problems, there are still quite a few distributed databases out there and each has their unique strengths.</p>
<p>Two databases have garnered the most attention: HBase and Cassandra. The split between these equally ambitious projects can be categorized into Features (things missing that could be added any at time), and Architecture (fundamental differences that can&#8217;t be coded away). HBase is a near-clone of Google&#8217;s BigTable, whereas Cassandra purports to being a &#8220;BigTable/Dynamo hybrid&#8221;.</p>
<p>In my opinion, while Cassandra&#8217;s &#8220;writes-never-fail&#8221; emphasis has its advantages, HBase is the more robust database for a majority of use-cases. Cassandra relies mostly on Key-Value pairs for storage, with a table-like structure added to make more robust data structures possible. And it&#8217;s a fact that far more people are using HBase than Cassandra at this moment, despite both being similarly recent.</p>
<p>Let&#8217;s explore the differences between the two in more detail&#8230;</p>
<p><span id="more-84"></span></p>
<h3>CAP and You</h3>
<p><a href="http://devblog.streamy.com/2009/08/24/cap-theorem/" target="_blank">This article at Streamy</a> explains CAP theorem (Consistency, Availability, Partitioning) and how the BigTable-derived HBase and the Dynamo-derived Cassandra differ.</p>
<p>Before we go any further, let&#8217;s break it down as simply as possible:</p>
<ul>
<li>Consistency: &#8220;<em>Is the data I&#8217;m looking at now the same if I look at it somewhere else?&#8221;</em></li>
<li>Availability: &#8220;<em>What happens if my database goes down?&#8221;</em></li>
<li>Partitioning:<em> </em>&#8220;<em>What if my data is on different networks?&#8221;</em></li>
</ul>
<p><em> </em></p>
<p>CAP posits that distributed systems have to compromise on each, and HBase values strong consistency and High Availability while Cassandra values Availability and Partitioning tolerance. Replication is one way of dealing with some of the design tradeoffs. HBase does not have replication yet, but that&#8217;s about to change &#8212; and Cassandra&#8217;s replication comes with some caveats and penalties.</p>
<p>Let&#8217;s go over some comparisons between these two datastores:</p>
<p><strong> </strong></p>
<h3><strong>Feature Comparisons</strong></h3>
<h3>Processing</h3>
<p>HBase is part of the Hadoop ecosystems, so many useful distributed processing frameworks support it: Pig, Cascading, Hive, etc. This makes it easy to do complex data analytics without resorting to hand-coding. Efficiently running MapReduce on Cassandra, on the other hand, is difficult because all of its keys are in one big &#8220;space&#8221;, so the MapReduce framework doesn&#8217;t know how to split and divide the data natively. There needs to be some hackery in place to handle all of that.</p>
<p>In fact, here&#8217;s some code from a Cassandra/Hadoop Integration patch:</p>
<pre>+ /*</pre>
<pre>+  FIXME This is basically a huge kludge because we needed access to</pre>
<pre>+ cassandra internals, and needed access to hadoop internals and so we</pre>
<pre>+ have to boot cassandra when we run hadoop. This is all pretty</pre>
<pre>+ fucking awful.</pre>
<pre>+</pre>
<pre>+  P.S. it does not boot the thrift interface.</pre>
<pre>+ */</pre>
<p>This gives me The Fear.</p>
<p>Bottom line? Cassandra may be useful for storage, but not any data processing. HBase is much handier for that.</p>
<p><strong> </strong></p>
<h3><strong>Installation &amp; Ease of Use</strong></h3>
<p>Cassandra is only a Ruby gem install away. That&#8217;s pretty impressive. You still have to do quite a bit of manual configuration, however. HBase is a .tar (or packaged by Cloudera) that you need to install and setup on your own. HBase has thorough documentation, though, making the process a little more straightforward than it could&#8217;ve been.</p>
<p>HBase ships with a very nice Ruby shell that makes it easy to create and modify databases, set and retrieve data, and so on. We use it constantly to test our code. Cassandra does not have a shell at all &#8212; just a basic API. HBase also has a nice web-based UI that you can use to view cluster status, determine which nodes store various data, and do some other basic operations. Cassandra lacks this web UI as well as a shell, making it harder to operate. <em>(ed: Apparently, there is now a shell and pretty basic UI &#8212; I just couldn&#8217;t find &#8216;em).</em></p>
<p>Overall Cassandra wins on installation, but lags on usability.</p>
<p><strong> </strong></p>
<h2><strong>Architecture</strong></h2>
<p>The fundamental divergence of ideas and architecture behind Cassandra and HBase drives much of the controversy over which is better.</p>
<p>Off the bat, Cassandra claims that &#8220;writes <em>never</em> fail&#8221;, whereas in HBase, if a region server is down, writes will be blocked for affected data until the data is redistributed. This rarely happens in practice, of course, but will happen in a large enough cluster. In addition, HBase has a single point-of-failure (the Hadoop NameNode), but that will be less of an issue as Hadoop evolves. HBase does have row locking, however, which Cassandra does not.</p>
<p>Apps usually rely on data being accurate and unchanged from the time of access, so the idea of eventual consistency can be a problem. Cassandra, however, has an internal method of resolving up-to-dateness issues with vector clocks &#8212; a complex but workable solution where basically the latest timestamp wins. The <span>HBase/BigTable</span> puts the impetus of resolving any consistency conflicts on the application, as everything is stored versioned by timestamp.</p>
<p>Another architectural quibble is that Cassandra only supports one table per install. That means you can&#8217;t denormalize and duplicate your data to make it more usable in analytical scenarios. <em>(edit: this was corrected in the latest release)</em> Cassandra is really more of a Key Value store than a Data Warehouse. Furthermore, schema changes require a cluster restart(!). Here&#8217;s what the <a href="http://issues.apache.org/jira/browse/CASSANDRA-44" target="_blank">Cassandra JIRA</a> says to do for a schema change:</p>
<ol>
<li><em>Kill Cassandra</em></li>
<li><em>Start it again and wait for log replay to finish</em></li>
<li><em>Kill Cassandra AGAIN</em></li>
<li><em>Make your edits (now there is no data in the commitlog)</em></li>
<li><em>Manually remove the sstable files (-Data.db, -Index.db, and -Filter.db) for the </em><span><em>CF</em></span><em>s you removed, and rename files for </em><span><em>CF</em></span><em>s you renamed</em></li>
<li><em>Start Cassandra and your edits should take effect</em></li>
</ol>
<p>With the lack of timestamp versioning, eventual consistency, no regions (making things like MapReduce difficult), and only one table per install, it&#8217;s difficult to claim that Cassandra implements the BigTable model.</p>
<h3>Replication</h3>
<p>Cassandra is optimized for small datacenters (hundreds of nodes) connected by very fast fiber. It&#8217;s part of Dynamo&#8217;s legacy from Amazon. HBase, being based on research originally published by Google, is happy to handle replication to thousands of planet-strewn nodes across the &#8217;slow&#8217;, unpredictable Internet.</p>
<p>A major difference between the two projects is their approach to replication and multiple datacenters. Cassandra uses a P2P sharing model, whereas HBase (the upcoming version) employs more of a data+logs backup method, aka &#8216;log shipping&#8217;. Each has a certain elegance. Rather than explain this in words, here comes the drawings:</p>
<p><img class="alignnone" title="Cassandra Replication" src="http://i199.photobucket.com/albums/aa300/gsteph22/CassandraReplication.png" alt="" width="556" height="362" /></p>
<p>This first diagram is a model of the Cassandra replication scheme.</p>
<ol>
<li>The value is written to the &#8220;Coordinator&#8221; node</li>
<li>A duplicate value is written to another node in the same cluster</li>
<li>A third and fourth value are written from the Coordinator to another cluster across the high-speed fiber</li>
<li>A fifth and sixth value are written from the Coordinator to a third cluster across the fiber</li>
<li>Any conflicts are resolved in the cluster by examining timestamps and determining the &#8220;best&#8221; value.</li>
</ol>
<p>The major problem with this scheme is that there is no real-world auditability. The nodes are eventually consistent &#8212; if a datacenter (&#8220;DC&#8221;) fails, it&#8217;s impossible to tell when the required number of replicas will be up-to-date. This can be extremely painful in a live situation &#8212; when one of your DCs goes down, you often want to know *exactly* when to expect data consistency so that recovery operations can go ahead smoothly.</p>
<p>It&#8217;s important to note that Cassandra relies on high-speed fiber between datacenters. If your writes are taking 1 or 2 ms, that&#8217;s fine. But when a DC goes out and you have to revert to a secondary one in China instead of 20 miles away, the incredible latency will lead to write timeouts and highly inconsistent data.</p>
<p>Let&#8217;s take a look at the HBase replication model (note: this is coming in the .21 release):</p>
<p><img class="alignnone" title="HBase Replication" src="http://i199.photobucket.com/albums/aa300/gsteph22/HBaseReplication.png" alt="" width="500" height="391" /></p>
<p>What&#8217;s going on here:</p>
<ol>
<li>The data is written to the HBase write-ahead-log in RAM, then it is then flushed to disk</li>
<li>The file on disk is automatically replicated due to the Hadoop Filesystem&#8217;s nature</li>
<li>The data enters a &#8220;Replication Log&#8221;, where it is piped to another Data Center.</li>
</ol>
<p>With HBase/Hadoop&#8217;s deliberate sequence of events, consistency within a datacenter is high. There is usually only one piece of data around the same time period. If there are not, then HBase&#8217;s timestamps allow your code to figure out which version is the &#8220;correct&#8221; one, instead of it being chosen by the cluster. Due to the nature of the Replication Log, one can always tell the state of the data consistency at any time &#8212; a valuable tool to have when another data center goes down. In addition, using this structure makes it easy to recover from high-latency scenarios that can occur with inter-continental data transfer.</p>
<h3><strong>Knowing Which To Choose</strong></h3>
<p>The business context of Amazon and Google explains the emphasis on different functionality between Cassandra and HBase.</p>
<p>Cassandra expects High Speed Network Links between data centers. This is an artifact of Amazon&#8217;s Dynamo: Amazon datacenters were historically located very close to each other (dozens of miles apart) with very fast fiber optic cables between them. Google, however, had transcontinental datacenters which were connected only by the standard Internet, which means they needed a more reliable replication mechanism than the P2P eventual consistency.</p>
<p>If you need highly available writes with only eventual consistency, then Cassandra is a viable candidate for now. However, many apps are not happy with eventual consistency, and it is still lacking many features. Furthermore, even if writes do not fail, there is still cluster downtime associated with even minor schema changes. HBase is more focused on reads, but can handle very high read and write throughput. It&#8217;s much more Data Warehouse ready, in addition to serving millions of requests per second. The HBase integration with MapReduce makes it valuable, and versatile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.roadtofailure.com/2009/10/29/hbase-vs-cassandra-nosql-battle/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>How To Make Life Suck Less (While Making Scalable Systems)</title>
		<link>http://www.roadtofailure.com/2009/09/09/how-to-make-life-suck-less-while-making-scalable-systems/</link>
		<comments>http://www.roadtofailure.com/2009/09/09/how-to-make-life-suck-less-while-making-scalable-systems/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 18:51:40 +0000</pubDate>
		<dc:creator>Bradford</dc:creator>
				<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.roadtofailure.com/?p=78</guid>
		<description><![CDATA[As I write this, I&#8217;m sitting at my home office with a five-year-old desktop and its failing monitor. Surrounding me are protein bar wrappers, fingerprint-covered water glasses, and guitar amp vacuum tubes. It&#8217;s 7 in the morning.
If you don&#8217;t know me you might think I&#8217;m an early riser. Alas&#8230; I&#8217;ve actually been up all night, [...]]]></description>
			<content:encoded><![CDATA[<p>As I write this, I&#8217;m sitting at my home office with a five-year-old desktop and its failing monitor. Surrounding me are protein bar wrappers, fingerprint-covered water glasses, and guitar amp vacuum tubes. It&#8217;s 7 in the morning.</p>
<p>If you don&#8217;t know me you might think I&#8217;m an early riser. Alas&#8230; I&#8217;ve actually been up all night, unable to sleep, babysitting my Hadoop cluster and worrying about getting this new platform into production.</p>
<p>The past three months have been hellish &#8212; some amazing accomplishments, but plenty of painful mistakes. &#8220;You guys are working hard but it seems so effortless,&#8221; I heard from another team lead. If he only knew. Developing a distributed, concurrent platform for web-scale data  is far from effortless. A great deal of the time we spent &#8216;working hard&#8217; was not new coding at all, but relentlessly beating on problems. I don&#8217;t always take my own advice, but I&#8217;m getting better. And so, I&#8217;ll try to keep the following in mind when planning what to do next:</p>
<p>Developing a platform for web-scale data analysis is hard work. Unlike well-worn areas like MVC on LAMP, big data (billions of records, intensive analysis) presents brand new challenges that need innovative engineering, testing strategies, and planning.</p>
<p>In recent months I&#8217;ve led my team at Visible Technologies through creating a new analytics platform based on Hadoop. This article lists a few lessons from our ordeal, which hopefully should help if you venture into similar territory. Here are my observations:</p>
<p>1. Big data is BIG<br />
2. This is systems software, not an application (for now)<br />
3. Learn the source, engage the community, contribute feedback<br />
4. Scalable doesn&#8217;t imply cheap or easy. Just cheaper and easier.<br />
5. It&#8217;s so much easier with smart, experienced people.</p>
<p>Let&#8217;s examine these in detail&#8230;<br />
<span id="more-78"></span><br />
<strong>Big Data is BIG</strong></p>
<p>&#8220;We&#8217;ve got two weeks to test our entire storage, indexing, and search workflow for up to one billion documents, with multi-lingual data&#8221;, I told my team. Our task seemed pretty easy, at the time. We had the workflow written up (in pieces at least), and had tested the system on a backup database of a few hundred million documents. Everything ran flawlessly &#8212; so far, so good.</p>
<p>Doubling the data size on a relatively untaxed computer cluster seemed like it should be painless. I&#8217;d run jobs to index hundreds of millions of documents before, no problem. When it came time to index a billion documents, though, it failed and kept failing. Iterative debugging processes become unsustainable when it takes 8 hours to run a test cycle. I found the answer, ten days later, in an obscure subroutine for sending a heartbeat back to a central server.</p>
<p>Scalable platforms may coordinate many machines to act as one, but that doesn&#8217;t mean you can engineer them the same way you normally would. Everything gets more difficult when multiple nodes are involved; more power, more problems.</p>
<p>The problem with big data is that it&#8217;s BIG. Things fail at scale, the same way they do on smaller projects. But with scale comes longer timeframes and more moving parts, and you need to plan testing strategies accordingly. The Hadoop/HBase world brings us back to the 70s concepts of batches and time-sharing. It&#8217;s scary to run jobs that take 8 hours to fail, and having the code of team members in various states of testing just adds to the nightmare.</p>
<p>If it takes a long time to fail, it&#8217;s going to take even longer to fix. Buy as much hardware as you can justify, and structure your test data to process a small amount before hitting bugs.</p>
<p><strong>This is systems software, not an application (for now).</strong></p>
<p>Plenty of MVC/LAMP or Rails programmers can write a good website, connect their markup through AJAX to a middle tier, and persist state to a DB. Most web-based software never gets more complex than this. It&#8217;s not always easy, especially with complex visualization and business logic thrown in &#8212; but it&#8217;s based on customizing well-delineated applications, and high-level shortcuts are plentiful.</p>
<p>Big data is not about applications yet. You&#8217;re not writing code to trigger APIs between standard modules, you&#8217;re working with the raw &#8220;stuff&#8221; of a distributed operating system, and digging around in the basement. Coding and debugging in this context requires a stronger handle on computer science theory than most web development demands.</p>
<p>As an example, here are a few problems we&#8217;ve stumbled upon:</p>
<p>1. Garbage collection pauses, and nodes lose heartbeat, when Java&#8217;s used memory heap exceeds 7GB.<br />
2. Figuring out which garbage collection scheme to use (and which of the 10 associated parameters to tweak), requires a knowledge of the generational hypothesis of GC.<br />
3. Microsecond race conditions can trip up processing on obscure data structures.<br />
4. General headaches when dozens of threads need to share<br />
5. Making everything an object can bog a cluster down. Instantiation is expensive and small objects are not cache-friendly.<br />
6. It&#8217;s even important to understand the assumptions Java&#8217;s JIT Compiler makes about your code.</p>
<p>Note: Just because Hadoop requires you to work in Java, doesn&#8217;t mean it&#8217;s not systems code that you&#8217;re writing. Treat it with the same deference as a database written in C, which is something that&#8217;s likely to be very well architected from the beginning and highly optimized.</p>
<p><strong>Learn the source, engage the community, contribute feedback</strong></p>
<p>&#8220;Katta keeps failing when we try to deploy our 500M document index.&#8221;</p>
<p>&#8220;Why?&#8221;</p>
<p>&#8220;Not sure. Trying it again.&#8221;</p>
<p>An hour later, it failed again. So we made a configuration tweak. An hour later&#8230; more fail. For two days. Finally, we dove into the code. Two days might seem like a long wait to look deeper into a problem, but at scale it can take that long to eliminate all the random shots in the dark. We eventually traced the crash to a line of code that was timing out waiting for Zookeeper to give it some information. Once we were in the code, it took about 15 minutes to find the issue. There can be a mental barrier to examining the codebase of open source software (an ironic twist on not-invented-here syndrome), but mostly I&#8217;ve found them pretty easy to navigate.</p>
<p>This lesson of look fast, look early applies to pretty much any open source project, but doubly so for distributed ones because the time cost of incremental, scattershot debugging can be so high.</p>
<p>Along with studying OSS source code, you should engage the community around the platform you&#8217;re using. I&#8217;m extremely grateful to have the HBase team around on IRC and their mailing list. I usually get answers to even complex questions in a few minutes/hours. You can&#8217;t really engage the community without learning some of the source &#8212; you&#8217;ll be wasting everyone&#8217;s time. I&#8217;m trying to repay the HBase team for their kindness by submitting a few patches (although I wish I had the time to do much more, there&#8217;s a lot of hefty work to do).</p>
<p><strong>Scalable doesn&#8217;t imply cheap or easy. Just cheaper and easier.</strong></p>
<p>I was having a conversation with an associate about our new platform and the difficulties of developing in our current environment.</p>
<p>&#8220;Why do you need new machines? You have five. Isn&#8217;t that enough to prototype our new infrastructure? We only have two SQL servers,&#8221; he posited.</p>
<p>&#8220;The machines are processing so much data that they&#8217;re crashing because the CPU is unavailable waiting for I/O,&#8221;  I replied.</p>
<p>&#8220;Where&#8217;s the proof?&#8221;</p>
<p>It&#8217;s difficult to set expectations in emerging fields such as commoditized distributed computing, especially around hardware costs and platform capabilities. Somewhere along the way, &#8220;commodity hardware&#8221; became interpreted as &#8220;$500 machines&#8221;.</p>
<p>Would you run a high-volume, production MySQL server on a 2 core, 2 GB RAM Box from 2005? Of course not. Why would you want to run Hadoop or HBase on a machine of the same specs?  You can&#8217;t have a cluster that costs $5000 comprised of 10 boxes that cost $500. Nor do many of us want to pay $500,000 for Netezza hardware, or $5,000,000 to Oracle. A $50,000 cluster is cheap, and can handle a lot of data. Virtualization is not a panacea, either. If you need high-volume and high-avaliablity, you need to have control over the physical environment of the boxes. Running things in &#8220;the cloud&#8221; can have too much overhead, and shields you from important locality-awareness such as which rack you&#8217;re running on. It works for some, but you need to run the numbers to make sure you&#8217;re not losing too much performance or reliability.</p>
<p>Unlearning (and un-teaching) the habits of the <a href="http://www.roadtofailure.com/2009/06/19/social-media-kills-the-rdbms/">Swiss Army RDBMS</a> can be difficult. As mentioned in <a href="http://www.roadtofailure.com/2009/07/28/slides-up-video-soon-approaching-scalability-and-building-a-biz-on-hadoop-hbase-and-open-source-distributed-computing/">earlier articles</a>, databases like Cassandra and HBase are not RDBMSs. You cannot just write SQL and expect everything to &#8216;just work&#8217;. Your storage and access paradigms need to be architected from the ground up to fit the data. Impedance mismatches between data structures and data storage are fatal at large scales, and lead to general engineering malaise &#8212; bad code, strange bugs, inconsistent performance, and much more. Not everything is a table, these days. It&#8217;s a tough sell to many of those who depended on an RDBMS to handle every aspect of data storage and manipulation.</p>
<p>As a friend of mine recently said: &#8220;To create something that is scalable, you have to add a certain level of complexity over and beyond the single node. Just like going to multi-threaded programming is so much more complex, so is going clustered.&#8221; But if you do it right, you&#8217;re not limited by data size any more.</p>
<p><strong>It&#8217;s so much easier with smart and experienced people</strong></p>
<p>I love my team dearly.  Still,  every day, I find myself wishing I knew someone who&#8217;d experienced the same gotchas I have; Java classpaths and Linux deployments, performance tuning, and general issues with highly concurrent software. There&#8217;s such a big difference between the problems of a typical 3-tier web app, and the problems that arise from distributed systems engineering.</p>
<p>Having said that, you don&#8217;t need to revamp your entire team just to move into this area. But having at least one person who&#8217;s been there before will save your whole operation weeks of Googling and downtime, especially if you can put them in a troubleshooter or coordinating role. And if you&#8217;re transitioning a former closed-source group to OSS distributed software, make sure everyone has their CS fundamentals down &#8212; that&#8217;s always a good start.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.roadtofailure.com/2009/09/09/how-to-make-life-suck-less-while-making-scalable-systems/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>A New DB for 80% of Facebook, YouTube-scale Sites</title>
		<link>http://www.roadtofailure.com/2009/08/07/a-new-db-for-80-of-facebook-youtube-scale-sites/</link>
		<comments>http://www.roadtofailure.com/2009/08/07/a-new-db-for-80-of-facebook-youtube-scale-sites/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 15:31:00 +0000</pubDate>
		<dc:creator>Bradford</dc:creator>
				<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.roadtofailure.com/?p=58</guid>
		<description><![CDATA[Imagine you&#8217;re visiting several of your favorite massive-scale websites. Or go ahead and pull them up in your browser. Facebook, MySpace, LiveJournal, Bebo, Streamy, YouTube, anything that deals with huge amounts of data, or any sufficiently large Social Media site. While you&#8217;re at it, take a look at any data-driven website: a forum, your favorite [...]]]></description>
			<content:encoded><![CDATA[<p>Imagine you&#8217;re visiting several of your favorite massive-scale websites. Or go ahead and pull them up in your browser. Facebook, MySpace, LiveJournal, Bebo, Streamy, YouTube, anything that deals with huge amounts of data, or any sufficiently large Social Media site. While you&#8217;re at it, take a look at any data-driven website: a forum, your favorite blog, or a news site.</p>
<p>As you examine these sites, try to think about what kind of data they need to present to their users rapidly. There&#8217;s usually a selection of:</p>
<ul>
<li>Profiles (like users)</li>
<li>Search results</li>
<li>Sets of items by various criteria (all videos by one author, posts in a thread)</li>
<li>Networks (&#8220;my friends&#8221;)</li>
<li>Real-time updates &#8220;My status&#8221;</li>
<li>Communications subsystems (messages to inboxes, e-mails, IMs)</li>
</ul>
<p></br><br />
Until recently, there&#8217;s been no other way to retrieve this data than with a classic RDBMS, which as we&#8217;ve seen earlier can be expensive and crippling to scale. Yet I&#8217;d estimate that a few use cases cover 80% of how data needs to be presented to these websites. The Swiss-Army RDBMS is costly overkill for what most sites *really* use it for. There needs to be a new type of database optimized for serving simple, web-scale data in real-time.<br />
</br><br />
Let&#8217;s examine these operations, along with some examples.  Then, I&#8217;d like to propose a scalable engine I&#8217;m architecting that&#8217;s actually optimized to drive 80% of websites, built on HBase.<br />
<span id="more-58"></span><br />
</br><br />
<strong>THE OPERATIONS</strong></br></p>
<p>There&#8217;s a handful of operations that can both drive websites and provide low-latency analytics on information. </span></span>These are:</p>
<ul>
<li>GROUP BY</li>
<li>FILTER</li>
<li>SORT</li>
<li>COUNT</li>
<li>SUM</li>
</ul>
<p>There&#8217;s a whole class of operations called &#8220;additive&#8221; and &#8220;semi-additive&#8221; that are basically simple aggregations. These are used in a majority of DB analytics use cases.<br />
By proper structuring of data storage and denormalization, along with narrowly focusing on a few operations, we can enable new class of scalable database and analytical engines.</p>
<p>I can&#8217;t recall a term which properly describes what this class of database does:</p>
<ul>
<li><strong>Data Warehouse?</strong> That doesn&#8217;t work. Too big. I imagine getting in a forklift, driving to the data I need, loading it on a pallet, driving it to a staging area, unpacking the pallet, and eventually getting at the pieces I want. Forklifts are pretty awesome, granted. (Sometimes I fantasize smashing our current slow-as-agriculture SQL boxes with a forklift).</li>
<li><strong>Data Mart? </strong>Smaller, but still slow. I have to grab a grocery cart, walk to the aisle which has my data, pick it off a shelf, and then take it to a cashier so I can do what I want with it.</li>
<li><strong>Operational Data Store? </strong>Getting closer. Wikipedia says it &#8220;integrates data from many sources for reporting, usually atomic pieces of data captured in &#8216;real&#8217; time&#8221;</li>
</ul>
<p>I&#8217;m going to call it a <strong>Data Station</strong>: a place where you drive up with a car, get only exactly what you need as quickly as possible, and then leave.</p>
<p><strong>THE HBASE DATA STATION</p>
<p></strong><br />
Hadoop and HBase are certainly scalable, but no part of their architecture is low-latency. You can serve webpages from HBase rows, but you can&#8217;t do any aggregations there.<br />
There&#8217;s a few scalable databases (HBase, Cassandra) out there that handle a subset of this: you can retrieve data in all of them, and Lucene does faceted search, which implements several of the operations (notably grouping and counting). Lucene is fast and easy, but it&#8217;s pretty search-and-document oriented.</p>
<p>I think HBase is an excellent candidate for a storage engine. It&#8217;s scalable, fast (with the latest release), column oriented, and has a fairly intuitive codebase. That&#8217;s all HBase is &#8211; distributed storage and retrieval. It&#8217;s very impressive, but it delegates the duty of doing anything to your data out to the application. This makes it hard to crunch through lots of data with low latency, because you have to move the data <em>somewhere. </em></p>
<p>What if we implemented a package that sat on top of where the data is stored on each server, performed your operations as close to the data as possible, and then sent the result to a master node for final aggregation? It&#8217;d almost resemble a MapReduce job. Let&#8217;s look at a diagram:<br />
</BR><img style="width: 268px; height: 185px;" src="http://docs.google.com/File?id=dd895mdn_28ggmq74fm_b" alt="" /></br><br />
It&#8217;s pretty simple, and it won&#8217;t scale to infinite data per node &#8212; but it&#8217;s not meant to. I&#8217;m calling this &#8220;HBase Analytics&#8221; for lack of a better name. This solution is meant primarily to drive websites with a low latency, especially when you can&#8217;t pre-aggregate data. Implementation is somewhat straightforward. Without going into too much detail on the HBase architecture, you can &#8216;piggyback&#8217; on top of how rows are scanned, and do your aggregation there. The point of this is to move data aggregation away from the app layer, and keep it as close to the data as possible.</p>
<p>In addition, these basic operations are <em>commutative</em> and <em>associative</em>. What that boils down to is that the order in which you read the data and make your aggregates is unimportant. Thus, you can make this process <em>multithreaded</em>.</p>
<p>Approximate consistency is a big performance boost as well. You can pass options to &#8220;trim&#8221; your data, so only the most significant items are sent. This is important for scenarios such as &#8220;Find the Top 10 Authors for these documents&#8221;. It might be a little lossy, but if I can cut my latency in half and get data that&#8217;s 90% correct, I&#8217;ll call it in a win in quite a few scenarios.Scaling to concurrent user demand is pretty simple: increase data replication, and provide more &#8220;master&#8221; servers to perform aggregation. This is in addition to the typical approach of intelligent caching, latency profiling, etc. <strong></strong></br><br />
<strong>THE END</strong></br></p>
<p>This solution isn&#8217;t maximally performant of course &#8212; though secondary indices could help with that too. But it is simple and scalable, keeping a &#8220;Data Station&#8221; mentality. Taking a look at 80% of big-data-driven websites, you can implement all their functionality with GROUP, COUNT, FILTER, SUM, SORT, and a few other additive and semi-additive operations. If that can be done in a way that&#8217;s truly scalable, then building &#8220;big data&#8221; websites can be done in a few weeks by a handful of people, instead of a few months with custom, hacked-together software. Stay tuned for news on the evolution of HBase Analytics.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.roadtofailure.com/2009/08/07/a-new-db-for-80-of-facebook-youtube-scale-sites/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Approaching Scalability, and Building a Biz on Hadoop, HBase, and Open Source Distributed Computing</title>
		<link>http://www.roadtofailure.com/2009/07/28/slides-up-video-soon-approaching-scalability-and-building-a-biz-on-hadoop-hbase-and-open-source-distributed-computing/</link>
		<comments>http://www.roadtofailure.com/2009/07/28/slides-up-video-soon-approaching-scalability-and-building-a-biz-on-hadoop-hbase-and-open-source-distributed-computing/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 22:42:30 +0000</pubDate>
		<dc:creator>Bradford</dc:creator>
				<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.roadtofailure.com/?p=53</guid>
		<description><![CDATA[The slides for my OSCON 2009 presentation, &#8220;Approaching Scalability: Building a Business on Hadoop, HBase, and Open Source Distributed Computing&#8221;, have been posted to here:
http://www.slideshare.net/lusciouspear/building-a-business-on-hadoop-hbase-and-open-source-distributed-computing
PDF: Here
Video should be in up a day or so&#8211; having internet problems at home :) If the video quality is too poor, I&#8217;ll upload the audio track.
The talk focuses on [...]]]></description>
			<content:encoded><![CDATA[<p>The slides for my OSCON 2009 presentation, &#8220;Approaching Scalability: Building a Business on Hadoop, HBase, and Open Source Distributed Computing&#8221;, have been posted to here:</p>
<p><a href="http://www.slideshare.net/lusciouspear/building-a-business-on-hadoop-hbase-and-open-source-distributed-computing" target="_blank">http://www.slideshare.net/lusciouspear/building-a-business-on-hadoop-hbase-and-open-source-distributed-computing</a></p>
<p>PDF: <a href="http://www.roadtofailure.com/BradfordStephensHadoopHBaseBusiness.pdf">Here</a></p>
<p>Video should be in up a day or so&#8211; having internet problems at home :) If the video quality is too poor, I&#8217;ll upload the audio track.</p>
<p>The talk focuses on two things: how to approach scalability from a problem solving standpoint, and how Visible Technologies used Hadoop, HBase, and Lucene to build a web-scale Business Intelligence platform.</p>
<p>When thinking about scalability, ask yourself a series of questions:</p>
<ol>
<li>What makes me special? (What part of our problem are we trying to scale? How can we use it to our advantage?)</li>
<li>What can I sacrifice? (Compared to a traditional RDBMS, what are you willing to get rid of? Some sacrifices make scalability much easier).</li>
<li>How will my data be structured? (Not everything should be reduced to tables and rows. Do you have documents? Graphs? Videos?)</li>
</ol>
<p>The slides and talk focus on how Visible answered those questions, and how they led us to our Hadoop stack architecture. In the future, I&#8217;ll be talking more about the process of thinking about scalability. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.roadtofailure.com/2009/07/28/slides-up-video-soon-approaching-scalability-and-building-a-biz-on-hadoop-hbase-and-open-source-distributed-computing/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Decline of the Enterprise Data Warehouse</title>
		<link>http://www.roadtofailure.com/2009/07/10/decline-of-the-enterprise-data-warehouse/</link>
		<comments>http://www.roadtofailure.com/2009/07/10/decline-of-the-enterprise-data-warehouse/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 20:37:17 +0000</pubDate>
		<dc:creator>Bradford</dc:creator>
				<category><![CDATA[Scalability]]></category>
		<category><![CDATA[data warehouse]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[HBase]]></category>

		<guid isPermaLink="false">http://www.roadtofailure.com/?p=42</guid>
		<description><![CDATA[If you wanted to generate intelligence or other OLAPish things from large amounts of data (TBs) three years ago, you faced a terrifying prospect: You bought a server (or several large servers) costing $x00,000, paid for software from Oracle, Sybase, or IBM, and then prayed to Data Jesus that it would meet your needs for a few years.  You'd find all the data you could in all the disparate formats your company used and try and cram it into tables, have data analysts schedule SQL queries, and output your reports. This was by far the most common use case for "big data analysis".

Then, Social Media happened, and small businesses needed to process TB, web-scale companies needed to process PB, and neither of them could afford the $millions to do it. With the advent of the Hadoop and HBase ecosystem, however soon anyone can scale their Data Warehousing in predictable, affordable ways.

The established and new vendors in this space may become irrelevant to a decent portion of businesses. They recognize there's a problem, but their solutions so far will do nothing to address the fundamental issues.  They won't disappear, but the high-cost Enterprise Data Warehouse is no longer the only solution out there, and its significance will continue to dwindle.

Hadoop represents the first radical shift in a long time in an industry that was built around "pay big or go home". 
]]></description>
			<content:encoded><![CDATA[<p><em>(&#8230;due to Hadoop, HBase, and Hive)</em></p>
<p>If you wanted to generate intelligence or other OLAPish things from large amounts of data (TBs) three years ago, you faced a terrifying prospect: You bought a server (or several large servers) costing $x00,000, paid for software from Oracle, Sybase, or IBM, and then prayed to Data Jesus that it would meet your needs for a few years.  You&#8217;d find all the data you could in all the disparate formats your company used and try and cram it into tables, have data analysts schedule SQL queries, and output your reports. This was by far the most common use case for &#8220;big data analysis&#8221;.</p>
<p>Then, Social Media happened, and small businesses needed to process TB, web-scale companies needed to process PB, and neither of them could afford the $millions to do it. With the advent of the Hadoop and HBase ecosystem, however soon anyone can scale their Data Warehousing in predictable, affordable ways.</p>
<p>The established and new vendors in this space may become irrelevant to a decent portion of businesses. They recognize there&#8217;s a problem, but their solutions so far will do nothing to address the fundamental issues.  They won&#8217;t disappear, but the high-cost Enterprise Data Warehouse is no longer the only solution out there, and its significance will continue to dwindle.</p>
<p>Hadoop represents the first radical shift in a long time in an industry that was built around &#8220;pay big or go home&#8221;.</p>
<p><span id="more-42"></span></p>
<p><strong>The Big Data Cheap Problem</strong></p>
<p>With the rise of Social Media and the decreasing cost of storage, very small companies have a need for processing massive quantities of data.  Furthermore, it&#8217;s easier than ever to write software to generate/output/process (which is it?  I&#8217;m unclear) this data, thanks to languages like Ruby, frameworks like Spring, and scalability best practices. A few days&#8217; work and a handful of engineers can net you a bare-bones Twitter clone, or a crawler to get the link graph of the entire Internet. This data growth can be far from linear. For example, the more users you have tweeting to each other, the more connections they form, and so on. You simply can&#8217;t analyze this much data in an RDBMS &#8212; but these small startups can&#8217;t spend millions on DWs, either. Since the analysis is a core of the business, internal hacked-together tools cobbled together from SQL boxes often emerged. What results is a temporary solution, not a platform. With Hadoop, HBase, and Hive, there&#8217;s now a free, scalable Data Warehousing platform that makes it possible to migrate a considerable portion of DW analytics. On top of that, it&#8217;s getting easier every day for Data Analysts to just hop in and start working in a supported environment, thanks to companies like Cloudera.</p>
<p><strong>Vendor Approaches</strong></p>
<p>Upstart enterprise DW vendors like Greenplum, Vertica, Aster, and Netezza are really struggling here. Not only are they fighting against a low-cost solution, but it&#8217;s more scalable and easier to tweak. A lot of established enterprises won&#8217;t care about this &#8212; they can pay money to purchase something that &#8220;just works&#8221;. Upstart Social Media companies can&#8217;t afford that, in cost or risk. They often have problems that don&#8217;t work for classic SQL (like PageRank&#8217;s graph traversals).  Each has interesting approaches to indexing, scaling, and dealing with bottlenecks. All of these vendors require pricey hardware &#8212; from tens to hundreds of thousands of dollars. Several of these vendors claim to support &#8220;MapReduce&#8221;, but that&#8217;s a topic for a separate article.</p>
<p>A frequent thing I&#8217;ve seen in vendor presentations is claims of revolutionary speed increases for specific problems vs. Oracle.  &#8220;This analysis took 12 hours to run on Oracle, but only 10 minutes on our product!&#8221;. I have no doubt that it&#8217;s true &#8212; but how much tweaking did it take to achieve that? Does performance on other queries degrade? For many types of large data warehouse analytics, the difference between 20 minutes from a Vendor solution and 1-2 hours from Hadoop may not be enough to justify the extra expenditure.</p>
<p>The frequent comparisons to Oracle is one of the lynchpins of understanding the state of the large DW vendors. Just making the price and performance improvements of a few dozen percent over Oracle would have a great selling point a few years ago. Now, they&#8217;re competing against something that is not just orders of magnitude cheaper but also more scalable. That&#8217;s tough.</p>
<p><strong>The Killer Apps on the Cloud</strong></p>
<p>Putting Hadoop on a Cloud is where one it really shines &#8212; one can spawn clusters to run analytics on-demand, instead of paying for large amounts of servers 24/7. There&#8217;s quite a few success stories here. The dating service eHarmony uses Hadoop + Amazon Elastic MR to create millions of &#8220;matches&#8221; between customer profiles. The cost for this turns out to be &lt; $50 a day. A comparable vendor solution combined with hosting in a colo would be many times that amount.</p>
<p>Until HBase came along, you basically had no random access in Hadoop clusters. This was a harsh limit on ad-hoc and selective queries. HBase rectifies that, however. Instead of following a paradigm of &#8220;Index everything! Buy faster servers!&#8221;, you can denormalize, replicate, and sort your data on a primary key. If you have 7 columns in your data set, you may have to copy your data set 7 times if you want to slice and dice on every field &#8212; but disk space is cheap and scales extremely well.</p>
<p>Pairing well with HBase, Hive brings the flexibility of SQL to the scalability of MapReduce. Now, analysts can run queries just as they would any other DW. This abstraction on top of MapReduce is incredibly powerful &#8212; the millions who know SQL can hop right into using a free, scalable Data Warehouse for the first time in history.</p>
<p><strong>The Future: Real-time Analytics in HBase?</strong></p>
<p>There&#8217;s an interesting question I&#8217;ve been pondering lately &#8212; just what *can* you do in real-time on HBase? There&#8217;s no Hadoop MapReduce overhead, so you can achieve low latencies &#8212; but how much data can you crunch through in a handful of seconds? This could be useful for driving a web UI with some charts and dashboards on an arbitrary dataset. A lot of these types of queries are built from the fundamentals of GROUP, SORT, FILTER, COUNT, and SUM. I think a partial MapReduce algorithm could run on each node, pulling fields and grouping results (&#8220;This author appeared 12 times in this data set on this node&#8221;), and then combining those results on the master node that made the request. Is this process infinitely scalable with any query? Of course not &#8212; you&#8217;re limited by how quickly you can get data to the master node, and how complex the operations are. It&#8217;s still incredibly applicable towards a large variety of use cases, however.</p>
<p><strong>And Finally&#8230;</strong></p>
<p>Data Warehousing is more than just an analytical tool for large businesses &#8212; it&#8217;s an integral component of many startups, especially in the social media and BI fields. This need is driving one of the largest revolutions in the DW industry. Anyone who knows Java or SQL can derive complex intelligence from massive datasets for a fraction of the cost a few years ago. Enterprise DW vendors, used to competing with Oracle, now have to compete with something that is both free, powerful, and highly scalable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.roadtofailure.com/2009/07/10/decline-of-the-enterprise-data-warehouse/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Social Media Kills the Database</title>
		<link>http://www.roadtofailure.com/2009/06/19/social-media-kills-the-rdbms/</link>
		<comments>http://www.roadtofailure.com/2009/06/19/social-media-kills-the-rdbms/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 03:27:35 +0000</pubDate>
		<dc:creator>Bradford</dc:creator>
				<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[HBase]]></category>

		<guid isPermaLink="false">http://www.roadtofailure.com/?p=21</guid>
		<description><![CDATA[(or: How the Greatest Tool of the 1980's Crippled a Generation, and how Hadoop and HBase help)

Imagine someone told you that there was a piece of software out there which could change the way you do everything – and I mean everything. This code is so perpetually practical; it’s a Swiss Army Knife! Surely, it can handle the simple data storage and analytics you want to do on a ‘Social Media’ scale.  For example, you can:

    * Store pieces of content for your website so it’s easy to manage
    * Store content from EVERY website on the Internet
    * Track your company’s financial transactions
    * Track every credit card transaction for your multibillion-dollar banking conglomerate
    * Store an address so it’s easy to find by a unique key
    * Store every photo on Facebook so it’s accessible by a unique key
    * Generate charts and graphs on how your business did in the last month
    * Generate charts and graphs on key analytics for every piece of Social Media on the Internet.
    * Analyze records of how people have accessed your website and attempt to simulate their behavior
    * Analyze every click ever made on MySpace and optimize intrasite workflow.

…Well, in theory you can do the above.

Does it make sense that people can install the exact same software package and be able to do this, at all scales? Just throw bigger computers at the problem? It’s counter-intuitive to me, and it sure doesn’t work in reality. With the coming need to analyze things not on an enterprise-scale, but a Web Scale, social media is driving the final stake into the large analytical RDBMS (Relational Database Management System).

The ACIDy, Transactional, RDBMS doesn’t scale, and it needs to be relegated to the proper dustbin before it does any more damage to engineers trying to write scalable software.]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><em>(or: How the Greatest Tool of the 1980&#8217;s Crippled a Generation, and how Hadoop and HBase help)</em></p>
<p><em>postnote: This isn&#8217;t about a complete death of the RDBMS. Just the death of the idea that it&#8217;s a tool meant for all your structured data storage needs.</em></p>
<p class="MsoNormal"><span>Imagine someone told you that there was a piece of software out there which could change the way you do everything – and I mean everything. This code is so perpetually practical; it’s a Swiss Army Knife! Surely, it can handle the simple data storage and analytics you want to do on a ‘Social Media’ scale.  For example, you can:</span></p>
<ul type="disc">
<li class="MsoNormal"><strong>Store</strong><span> pieces of      content for your website so it’s easy to manage</span></li>
<li class="MsoNormal"><strong>Store</strong><span> content      from EVERY website on the Internet</span></li>
<li class="MsoNormal"><strong>Track</strong><span> your      company’s financial transactions</span></li>
<li class="MsoNormal"><strong>Track</strong><span> every      credit card transaction for your multibillion-dollar banking conglomerate</span></li>
<li class="MsoNormal"><strong>Store</strong><span> an address      so it’s easy to find by a unique key</span></li>
<li class="MsoNormal"><strong>Store</strong><span> every      photo on Facebook so it’s accessible by a unique key</span></li>
<li class="MsoNormal"><strong>Generate</strong><span> charts and      graphs on how your business did in the last month</span></li>
<li class="MsoNormal"><strong>Generate</strong><span> charts and      graphs on key analytics for every piece of Social Media on the Internet.</span></li>
<li class="MsoNormal"><strong>Analyze</strong><span> records of      how people have accessed your website and attempt to simulate their      behavior</span></li>
<li class="MsoNormal"><strong>Analyze</strong><span> every      click ever made on MySpace and optimize intrasite workflow.</span></li>
</ul>
<p class="MsoNormal"><span>…Well, in theory you can do the above.</span></p>
<p class="MsoNormal"><span>Does it make sense that people can install the exact same software package and be able to do this, at all scales? Just throw bigger computers at the problem? It’s counter-intuitive to me, and it sure doesn’t work in reality. With the coming need to analyze things not on an enterprise-scale, but a Web Scale, social media is driving the final stake into the large analytical RDBMS (Relational Database Management System). </span></p>
<p class="MsoNormal"><span>The ACIDy, Transactional, RDBMS doesn’t scale, and it needs to be relegated to the proper dustbin before it does any more damage to engineers trying to write scalable software.</span></p>
<p><span id="more-21"></span></p>
<p class="MsoNormal"><strong>IN THE BEGINNING&#8230;</strong></p>
<p class="MsoNormal"><span>Traditional relational databases (like those used in finance) evolved in the 70’s and 80’s as a glorified spreadsheet-and-file-cabinet. The metaphor prevails today.  RDBMSs have made the modern business possible: being able to slice, dice, and analyze data in a neat, intuitive format is immensely powerful.</span></p>
<p class="MsoNormal"><span>The problem is that the price of processing data in an RDBMS scales exponentially with the amount of data – getting twice the processing speed on twice the data rarely costs only twice as much. No matter what you do, something has to give. Eventually, you can try to shard out databases (like Oracle, Greenplum and Vertica), but their solutions still require expensive hardware, custom hash algorithms, compression, brittle analysis structures, and the licenses are enormously pricey.  With those sorts of limitations, it&#8217;s difficult to tackle “Web-Scale” problems.</span></p>
<p class="MsoNormal"><span>In addition, developers have become crippled by being able to only think of data in terms of Rows and Columns. There’s a multitude of database paradigms: Graphs, Trees, Objects, and so on. Furthermore, databases limit developers to SQL, which is great for certain kinds of set mathematics and not much else. In order to overcome fundamental limitations of DBs, things like Conditionals, Iteration, String Manipulation, and more have been hacked into what was at first an elegant set mathematics language.</span></p>
<p class="MsoNormal"><span>Algorithms (such as MapReduce) which make data analysis scalable are highly unintuitive in SQL. The limitations in the environment lead to a limitation in engineers’ ability to solve “big data” problems.</span></p>
<p class="MsoNormal"><span>People treat Databases as The Only Way To Store And Process Lots Of Data, and this leads them down the Road To Failure…</span></p>
<p class="MsoNormal"><strong>THE CRIPPLING</strong></p>
<p class="MsoNormal"><span>RDBMSs are really just a storage abstraction on top of some B-trees, bitmap indices, disk sectors, etc. With SQL on top, they enable some pretty powerful (if limited) analytical expressions.</span></p>
<p class="MsoNormal"><span>However, there are a few fundamental problems:</span></p>
<ul>
<li> The row/column approach limits you to one static storage paradigm</li>
<li><span> Updating indices does not scale linearly… the more data you have, the longer it takes to put it in. You can’t delete data if your DB gets too large in a production environment, so performance continually decays until </span><strong>The Datapocalypse</strong><span> occurs (or you throw more money at the problem).</span></li>
<li> There’s an immense amount of overhead with transactions.</li>
<li> The internals are totally opaque for most DB solutions. Optimization, required for any performant solutions, becomes a “black art”.</li>
<li> Backups are quite difficult to do – real-time mirrored, or periodic deltas.</li>
<li> Normalization is the only way to keep data sizes from exploding, but joins are incredibly expensive. It’s also a bitch to shard out indices.</li>
<li> The initial low latency for complex analysis lulls the average developer into a false sense of security – “Oh, when we need a larger DB, we’ll just get a larger machine”.</li>
<li> Sooner or later, you hit physical limits on how many electrons you can pull from your SAS drives, dozens of processor cores, and RAM.</li>
</ul>
<p class="MsoNormal">
<p class="MsoNormal">The Social Media space is littered with the corpses of those who have attempted to scale their RDBMSs (Twitter has teetered on the precipice several times). But even the Big Boys have dealt with the horror of DB scalability:</p>
<ul type="disc">
<li class="MsoNormal"><span>Google      (and Yahoo) once ran off of 40,000 MySQL Boxes (later replaced with minty      MapReduce/GFS/HDFS goodness)</span></li>
<li class="MsoNormal"><span>MySpace      has about xx,000 Microsoft SQL Servers (with license fees) to serve their      content</span></li>
<li class="MsoNormal"><span>Facebook      was spending $1,000,000/month+ for specialized database hardware just to      serve their photos</span></li>
<li class="MsoNormal"><span>A      company uses FPGAs to make disk access faster for databases, since they’ve      reached their scalability limit on hardware.</span></li>
</ul>
<p class="MsoNormal"><strong>OUR PROBLEM</strong></p>
<p class="MsoNormal"><span>My team at Visible Technologies focuses on ways to perform quasi-OLAP on discrete document fields in near real-time. This is part of a Social Media metrics and analysis framework. Our corpus may be hundreds of millions of documents, but we only have about 10-15 fields we care about.</span></p>
<p class="MsoNormal"><span>The current system is built on top of a multitude of SQL Server instances on $x0,000 boxes, each of which contain so much data that data aging is quite difficult. Not to mention the ever-increasing latency on queries which drive user experiences.</span></p>
<p class="MsoNormal"><strong>HOW WE’RE SOLVING IT</strong></p>
<p class="MsoNormal">
<p class="MsoNormal"><span>Like most people who try to scale RDBMSs, we don’t actually need most of the features a modern database provides. Most of them prevent proper “shared-nothing scale-out”, and slow things down.</span></p>
<p class="MsoNormal">Many of our analytics and back-end ingestion processes are being supplanted by elegant MapReduce algorithms on top of Hadoop clusters.  We still have a need for low-latency calculations over moderate size metadata sets (MBs, not GBs) which drive BI Dashboards, however.</p>
<p class="MsoNormal"><span>One of the ideas we’re prototyping is a distributed Key-Value store that we can perform set mathematics on. For our analytics, we just need to support a handful of operations. This could be built on top of <a href="http://hadoop.apache.org/hbase/" target="_blank"><span>HBase</span></a>, <a href="http://sourceforge.net/projects/tokyocabinet/" target="_blank"><span>Tokyo Cabinet</span></a>, <a href="http://memcachedb.org/">Project Voldemort</a>, or a handful of other distributed data stores. There&#8217;s more things we&#8217;re prototyping (perhaps based off vendor solutions), but here&#8217;s our most interesting approach:<br />
</span></p>
<p class="MsoNormal"><strong>WHAT WE&#8217;RE SCRAPPING:</strong></p>
<ul type="disc">
<li class="MsoNormal"><span>Transactions.      Our data is written in from a Hadoop cluster in large batches. If      something fails, we’ll just grab the HDFS block and try again.</span></li>
<li class="MsoNormal"><span>Joins.      Nothing is more evil than normalization when you need to shard data across      multiple servers. If we need to search on 15 primary fields, we’re fine      with copying our data set 15 times, with each field a primary key for its      table.</span></li>
<li class="MsoNormal"><span>Backup      and Complex Replication. All of our data is imported from HDFS. If      high-availability is a must, we can simply use </span><a href="http://hadoop.apache.org/zookeeper/" target="_blank">Zookeeper</a><span> to keep      track of what nodes die, and then bring up a new one and feed it the data      needed in ~ 60 seconds. With scales of hundreds of millions of documents,      no one will miss a few hundred thousand for that brief period of time.</span></li>
<li class="MsoNormal"><span>Consistency.      If our users are analyzing millions of documents, they’re not going to      care if there’s 15,000 unique Authors, or 15,001.</span></li>
</ul>
<p class="MsoNormal"><strong>REQUIREMENTS:</strong></p>
<ul type="disc">
<li class="MsoNormal"><span>Fast      GETs at the expense of PUTs.</span></li>
<li class="MsoNormal"><span>Support      for SUM, COUNT, GROUP, and FILTER. That covers 95% of our use cases.</span></li>
<li class="MsoNormal"><span>Sharding      that works and handles rebalancing and additions of new nodes elegantly</span></li>
<li class="MsoNormal"><span>We      don’t want to allocate space for data we’re not storing. In addition, we      need to rapidly be able to scan through ranges of single data values –      like “AuthorName”. Perhaps a columnar or graph-oriented paradigm would      best fit our needs.</span></li>
<li class="MsoNormal"><span>Any      ‘reasonable’ query needs to return its results in 10 seconds or less.</span></li>
<li class="MsoNormal"><span>Setting      user expectations properly and giving limits to their &#8217;sandbox&#8217;, so we can      store a few TB of data in fast-access storage instead of 100&#8217;s of TBs.</span></li>
<li class="MsoNormal"><span>Plays      nice with our Hadoop / HBase cluster.</span></li>
</ul>
<p class="MsoNormal"><strong>THE END</strong></p>
<p class="MsoNormal"><span>The RDBMS as we know it is simply not a scalable solution – its jack-of-all-trades nature leads to a fundamental weakness with scalability. Over the next few years, I think a number of solutions to our problem will emerge. A large portion of data analytics can be performed with SUM, COUNT, GROUP, and FILTER on denormalized data.</span></p>
<p class="MsoNormal"><span>I’ll keep you updated on our progress over the next few months.</span></p>
<p class="MsoNormal"><span> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.roadtofailure.com/2009/06/19/social-media-kills-the-rdbms/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
	</channel>
</rss>
