Source

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metaname="author"content="Basho Technologies"/><metaname="description"content="riak - a decentralized key value store - basho technologies"/><metaname="keywords"content="riak nosql decentralized distributed key value store"/><metahttp-equiv="content-type"content="text/html;charset=utf-8"/><linkrel="stylesheet"href="css/style.css"type="text/css"/><title>Riak - A database at Web scale</title></head><body><divid="content"><h1><spanclass="hr"></span><ahref="/">riak</a></h1><ulid="top"><li><ahref="/">Home</a></li><li><ahref="http://bitbucket.org/justin/riak/">Source Code</a></li><li><ahref="edoc/index.html">API Docs</a></li><li><ahref="faq.html">FAQ</a></li><li><ahref="contact.html">Contact</a></li></ul><divid="intro"><p>Developed with solid distributed systems fundamentals from the start, Riak scales out to meet your needs. It also scales down easily, making development and prototyping easy.</p></div><divid="left"><h3>Whatever size you need it to be</h3><p>"Scalability" is an often-misused word on the Web. Scaling is not the same as being fast, and it is not the same as being large. To say meaningfully that something scales, you must do so in terms of some numerically measurable feature (throughput, latency, volume, anything you can describe with a single number) and some other numerically measurable resource that presumably costs you money (such as the number of computers being used). To say that something scales is to say that there is a relationship between that resource and that feature which remains constant regardless of how much you increase the numbers. This is practically useful because it gives you predictable cost ceilings when your needs grow. If there is no such useful resource/benefit relation, your system does not scale. (If turning the dial way up on your scaling factor causes some other aspect of your system to perform much worse, your system's scalability is questionable at best.)</p><p>One important way in which Riak scales is in the relationship between total storage capacity and the number of disk-containing servers in the cluster. If your cluster has a given total capacity of some number "C", and is comprised of "N" servers (which roughly equivalent amounts of disk in each) then you can double your capacity by doubling your number of servers -- no matter what the original values of C and N.</p><p>This is a huge deal, as it means that you don't have to keep packing more and more resources into a single master database, incurring greater and greater marginal expense the farther you go. Instead, when you need more capacity you just plug in another ordinary server and walk away.</p><p>Most storage systems (including both traditional RDBMS and some more recent document databases) do not scale in any meaningful way. While you can often add replicas to such systems for redundancy or load-balancing, such systems still require all of the data to fit on a single master. As soon as you run out of room to add disks to that master, you establish a maximum practical capacity.</p><p>Some systems achieve scaling through <ahref="http://en.wikipedia.org/wiki/Shard_%28database_architecture%29">sharding</a>, or dividing the data up into segments, each of which is owned by a separate master. This achieves some scaling, but typically at the cost of multiplying the points of failure that can bring everything crashing down. Between namenodes responsible for knowing which shard is which and the fact that each of these shards must now be treated with all of the care of the previous master, operational concerns can climb rapidly as such systems grow. The <ahref="ops.html">operational design</a> of Riak does not have any of these drawbacks. Riak's scaling is done not by making more "master" locations, but by having no master at all.</p><p>Another essential and often ignored aspect of scaling is "scaling down". Systems that are designed to work in the large are often very inconvenient to set up, manage, and use in a very small environment such as a developer's laptop. If a system cannot run in a scaled-down and simple setup, it will be much harder for <ahref="dev.html">developers</a> to explore the system and work with it to its fullest potential. Riak works well even when running on just a single node; developers can easily work against a local instance and have the same code work when deployed on a large cluster elsewhere.</p></div><divid="right"><imgsrc="images/more.gif"alt="partitioning the ring"/></div><divid="footer"></div></div><script type="text/javascript">vargaJsHost=(("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"));</script><script type="text/javascript">try{varpageTracker=_gat._getTracker("UA-10051263-1");pageTracker._trackPageview();}catch(err){}</script></body></html>