Skip to content

Instantly share code, notes, and snippets.

@dalanmiller
Last active October 5, 2015 23:31
Show Gist options
  • Select an option

  • Save dalanmiller/ff3ec5be8ca87da16ab5 to your computer and use it in GitHub Desktop.

Select an option

Save dalanmiller/ff3ec5be8ca87da16ab5 to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>RethinkDB: the open-source database for the realtime web</title>
<description>News and updates from the RethinkDB team.</description>
<link>http://rethinkdb.com</link>
<atom:link href="http://rethinkdb.com/feed.xml" rel="self" type="application/rss+xml" />
<item>
<title>Expressive ES6 features that shine in Node.js 4.0</title>
<description>
<media:image url="http://rethinkdb.com/assets/images/posts/2015-09-21-node-4-es6.png" type="image/png"/>
<div><p>The developers behind Node.js <a href="https://nodejs.org/en/blog/release/v4.0.0/">released</a> version 4.0 last week. The new
version is a major update that includes significant improvements and many
new language features. It is the first release to incorporate improvements
from io.js, a community-driven fork that recently reintegrated with
upstream Node.js.</p>
<p>The io.js project emerged earlier this year when prominent Node.js
contributors decided to go their own way, seeking more open governance and
a more predictable release cycle. They recently resolved their differences
with Joyent, the corporate steward of the Node.js project. Following the
reconciliation, the upstream maintainers adopted the io.js code base.</p>
<p>Node.js 4.0 includes the latest and greatest version of the V8 JavaScript
runtime, which opens the door for developers to use a number of <a href="https://nodejs.org/en/docs/es6/">new
language features from the ECMAScript 6</a> (ES6) specification. In
previous versions of Node, important ES6 features were only available
while using experimental command line flags. Some of our favorite new
features supported out of the box in Node.js 4.x include arrow functions,
generators, for/of loops, and template strings.</p>
</div>
</description>
<pubDate>Mon, 21 Sep 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/node-4</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/node-4</guid>
</item>
<item>
<title>StartFEST 2015 was awesome</title>
<description>
<media:image url="http://rethinkdb.com/assets/images/posts/2015-09-21-node-4-es6.png" type="image/png"/>
<div><p>Not only are the mountains of Utah great, and the people the friendliest, Provo has some things going for it when it comes to technology.</p>
<p>Last week I got back to RethinkDB HQ in Mountain View from attending <a href="https://startfestival.com/">StartFEST 2015</a> hosted by <a href="https://beehivestartups.com/about/">BeehiveStartups</a> over in Provo, UT. RethinkDB was kindly offered an opportunity to do a small workshop in the developer track of the festival, and being always eager to get out in the world, I packed my bags for Utah.</p>
</div>
</description>
<pubDate>Thu, 10 Sep 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/startfest-is-awesome</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/startfest-is-awesome</guid>
</item>
<item>
<title>Compose announces RethinkDB 2.1 hosting, now with high-availability</title>
<description>
<media:image url="http://rethinkdb.com/assets/images/posts/2015-09-21-node-4-es6.png" type="image/png"/>
<div><p>Our friends at Compose <a href="https://www.compose.io/articles/rethinkdb-production-ready/">announced today</a> that they are taking the beta label off of their RethinkDB hosting, offering it as an officially-supported service that is ready for adoption in production environments. They also updated the service to use RethinkDB 2.1, which introduces support for automatic failover.</p>
</div>
</description>
<pubDate>Tue, 01 Sep 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/compose-2.1</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/compose-2.1</guid>
</item>
<item>
<title>Rethinking temperature, sensors, and Raspberry Pi</title>
<description>
<media:image url="http://rethinkdb.com/assets/images/posts/2015-09-21-node-4-es6.png" type="image/png"/>
<div><p>Getting started on your first hardware project can be difficult. Luckily these
days we have things like the <a href="https://www.raspberrypi.org/">Raspberry Pi</a>. which put almost everything
we need into a nice bundled package to get started on your first cool hardware
project. Even better, the Raspberry Pi runs <a href="https://www.raspbian.org/">Rasbian</a>, a variant of
Debian, which makes it pretty familiar with those already comfortable with
popular Linux distributions. The next step is to connect a sensor and it’s
definitely easier than you think. But the question always remains, once I’m
collecting my data, where will I store it and how do I easily setup some sort of
notification service? In this post, I’ll tell you what you need to do to connect
your first sensor, get RethinkDB going on your Raspberry Pi, and push that data
to all your devices using PushBullet.</p>
</div>
</description>
<pubDate>Fri, 21 Aug 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/temperature-sensors-and-a-side-of-pi</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/temperature-sensors-and-a-side-of-pi</guid>
</item>
<item>
<title>RethinkDB 2.1: high availability</title>
<description>
<media:image url="http://rethinkdb.com/assets/images/posts/2015-09-21-node-4-es6.png" type="image/png"/>
<div><p>Today we’re proud to announce <strong>RethinkDB 2.1</strong> (<a href="http://rethinkdb.com/assets/images/posts/2015-08-11-forbidden-planet-poster.jpg">Forbidden
Planet</a>). <a href="http://rethinkdb.com/install">Download it now</a>!</p>
<p>With over <a href="https://github.com/rethinkdb/rethinkdb/issues?utf8=%E2%9C%93&amp;q=milestone%3A2.1+">200 enhancements</a> and a major restructuring
of the clustering layer to support high availability, this release is
the culmination of over a year of development and many months of
testing. The major features in RethinkDB 2.1 include:</p>
<ul>
<li><strong>Automatic failover</strong> – if a server fails or the cluster
experiences a split-brain scenario, RethinkDB will automatically elect
new servers and continue to operate without human intervention.</li>
<li><strong>Always on</strong> – you can add and remove nodes from a live cluster
without experiencing downtime.</li>
<li><strong>Asynchronous APIs</strong> – asynchronous queries are now supported via
EventMachine in Ruby and Twisted, Tornado, and asyncio frameworks in
Python.</li>
<li><strong>SSL access</strong> – official drivers now come with SSL support to make
it easier to access RethinkDB clusters over the public internet.</li>
<li><strong>More math commands</strong> – ReQL now supports more math operators
including <code class="highlighter-rouge">floor</code>, <code class="highlighter-rouge">ceil</code>, and <code class="highlighter-rouge">round</code>.</li>
</ul>
</div>
</description>
<pubDate>Tue, 11 Aug 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/2.1-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/2.1-release</guid>
</item>
<item>
<title>RethinkDB 2.1 beta: announcing automatic failover</title>
<description>
<media:image url="http://rethinkdb.com/assets/images/posts/2015-09-21-node-4-es6.png" type="image/png"/>
<div><p>RethinkDB 2.1 beta is now available for testing. <a href="https://github.com/rethinkdb/rethinkdb/releases/tag/v2.1.0-0BETA1">Download</a> it now!</p>
<p>The upcoming 2.1 release will introduce <a href="https://github.com/rethinkdb/rethinkdb/releases">important improvements</a>,
including support for automatic failover. Although we’re still hard at
work on the finishing touches that will make the new features ready
for production use, the beta offers an opportunity to get an early
look.</p>
<p>The 2.1 beta release is a culmination of over a year of development
effort. It satisfies three major requirements:</p>
<ul>
<li>If a primary replica fails, RethinkDB will automatically fail over
to another replica without human intervention.</li>
<li>You can reshard your tables live with only a few seconds of
unavailability when the server switches over a shard to a new
server.</li>
<li>The RethinkDB administration API remains the same. You don’t need to
learn anything to take advantage of the new features.</li>
</ul>
<p>Automatic failover increases the reliability of RethinkDB clusters, reducing
the risk of downtime when individual servers fail or drop out of the network.
When a server with a primary shard experiences failure, the servers with
remaining replicas elect an acting primary to take its place until the wayward
server is either restored or permanently removed from the table configuration.
As long as a majority of replicas remain operational to elect an acting
primary, the loss of a primary shard will no longer compromise database
availability.</p>
</div>
</description>
<pubDate>Thu, 16 Jul 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-2.1-beta</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-2.1-beta</guid>
</item>
<item>
<title>Using PassportJS OAuth with RethinkDB</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-06-16-oauth-banner.png" />
]]>
<div><p>I’ve run into many people who have problems setting up authentication on their
Node.js applications. Even with a library as great as <a href="http://passportjs.org/">Passport</a>, it
can be tough to setup authentication in your app. Yet, while it’s tempting to
avoid it, authentication is essential for many types of applications.</p>
<p>In this short tutorial, we’ll go over how to set up a simple app that uses the
<a href="http://en.wikipedia.org/wiki/OAuth">OAuth</a> standard and the <a href="http://passportjs.org/">Passport</a> Node.js library for
authentication. OAuth is an open standard that lets a user ‘secure and
delegated access’ using an account from a major trusted site. Using OAuth, a
developer can create an application that lets users sign in with their GitHub,
Twitter, or Facebook accounts rather than forcing them to create yet another
account. Passport is a developer-friendly abstraction for setting up OAuth
authentication and supports many major companies out of the box. It takes away
a lot of the boilerplate behind user authentication.</p>
<p>In this post, we’ll use a boilerplate repo to get all the hard parts of
authentication out of the way. This is the easiest way to get started with
Passport and OAuth! Users will be able to login, see their username and
avatar, and logout. That’s it. By keeping the functionality of the app as
simple as possible, we can focus on just the authentication.</p>
</div>
</description>
<pubDate>Wed, 08 Jul 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/passport-oauth-with-rethinkdb</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/passport-oauth-with-rethinkdb</guid>
</item>
<item>
<title>Go driver for RethinkDB hits 1.0, production-ready</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-07-02-go-banner.png" />
]]>
<div><p><a href="https://twitter.com/_dancannon">Dan Cannon</a>’s <a href="https://github.com/dancannon/gorethink">GoRethink</a> project provides a RethinkDB driver for
the Go language. Earlier this week, Dan <a href="https://github.com/dancannon/gorethink/releases/tag/v1.0.0">released GoRethink 1.0</a>
and announced that the driver is now ready for use in production
environments.</p>
<p>GoRethink is among the most popular and well-maintained third-party client
drivers for RethinkDB. It supports the latest RethinkDB features while
offering clean integration between ReQL and Go’s native syntax. In
addition to standard driver functionality, GoRethink also includes a
number of advanced features like connection pooling.</p>
</div>
</description>
<pubDate>Thu, 02 Jul 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/go-production-ready</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/go-production-ready</guid>
</item>
<item>
<title>Getting started with RethinkDB and Python 3</title>
<description>
<![CDATA[
]]>
<div><p><em>This post originally appeared on <a href="http://www.giantflyingsaucer.com/blog/?p=5606">Giant Flying Saucer</a>, Chad Lung’s blog.</em></p>
<p>I’ve been keeping an eye on RethinkDB for a while now and recently began
working with it. There is a lot to like about RethinkDB like the ability
to easily cluster and scale your deployment but what I’m going to focus on
today is something called <a href="http://rethinkdb.com/docs/changefeeds/python/">Changefeeds</a>. I’ll start this blog article
off with installing a development server running RethinkDB and then move
onto a quick tutorial. From there we will look at Changefeeds.</p>
<p>Like some of my other articles I’ve created a <a href="https://github.com/chadlung/vagrant-rethinkdb">Github repo</a> with the
scripts needed to get a Vagrant instance running a single RethinkDB node.
Simply go to the repo, clone it, and follow the <a href="https://github.com/chadlung/vagrant-rethinkdb/blob/master/README.md">instructions</a>.</p>
<p>Once the Vagrant RethinkDB server is running you’ll want to create a
Python 3 project folder to work out of. To see how I usually setup my
project folders you can see <a href="http://www.giantflyingsaucer.com/blog/?p=5082">this article</a>.</p>
<p>Make sure to install the <a href="http://rethinkdb.com/docs/install-drivers/python/">RethinkDB Python client</a> (version 1.14 and
above works with Python 3):</p>
<div class="highlighter-rouge"><pre><code class="highlight"><span class="gp">$ </span>pip install rethinkdb
</code></pre>
</div>
<p>At this point I’ll assume you have your Vagrant based RethinkDB server
running and Python 3 project set up. Let’s start with a real simple
example to create a new database and a table to test with.</p>
</div>
</description>
<pubDate>Fri, 19 Jun 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/chad-lung-python3</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/chad-lung-python3</guid>
</item>
<item>
<title>Hands-on with deepstream.io: build realtime apps with less backend code</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-06-17-deepstream-banner.png" />
]]>
<div><p>The developers at <a href="http://www.hoxton-one.com/">Hoxton One</a> recently released <a href="http://deepstream.io/">deepstream</a>, a new
open source framework for realtime web application development. The
framework, which is built with <a href="https://nodejs.org/">Node.js</a> and <a href="https://github.com/Automattic/engine.io">Engine.io</a>, helps
developers build frontend web applications that perform realtime updates
while requiring minimal backend code.</p>
<p>The deepstream framework comes with a client library for the browser that
lets the developer create and update data records on the fly. The client
library relays updates to the server, which propagates the new data to
other subscribed clients. The developer doesn’t have to write any
specialized backend code to handle the changes or propagate the events.</p>
<p>The developers behind deepstream provide an optional RethinkDB data
connector, which lets the framework use RethinkDB for data persistence. As
the frontend client updates records, the deepstream backend stores the
changes in RethinkDB documents.</p>
</div>
</description>
<pubDate>Wed, 17 Jun 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/deepstream</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/deepstream</guid>
</item>
<item>
<title>Data science on the iPad with RethinkDB and Pythonista</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-06-11-pythonista-banner.png" />
]]>
<div><p><a href="http://omz-software.com/pythonista/">Pythonista</a> is an iOS application that brings Python development to
Apple’s mobile devices. It includes a built-in Python runtime, an
interactive REPL console, and a text editor with features like syntax
highlighting and autocompletion. It also comes with its own canvas system
and user interface toolkit, offering developers a way to build games and
simple graphical applications.</p>
<p><img src="http://rethinkdb.com/assets/images/posts/2015-06-11-pythonista-screen.png" /></p>
<p>In addition to the standard Python libraries, Pythonista bundles some
useful extras that extend its functionality. For example, it comes with
<a href="http://www.numpy.org/">NumPy</a> and <a href="http://matplotlib.org/">matplotlib</a>, which support scientific computing and
advanced graphing. It also comes with a set of libraries that expose
native platform and device capabilities, including geolocation and the
system camera.</p>
<p>Used to its full potential, Pythonista is a surprisingly capable
environment for mobile data science. I can use Pythonista on my iPad to
crunch numbers at the coffee shop or on my living room couch. I couldn’t
resist the temptation to add RethinkDB to the mix, giving me backend
persistence and expressive queries.</p>
</div>
</description>
<pubDate>Fri, 12 Jun 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/pythonista</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/pythonista</guid>
</item>
<item>
<title>Batch image uploading with Amazon S3 and RethinkDB</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-06-09-s3-batch-upload.png" />
]]>
<div><p>Many applications provide a way to upload images, offering users a
convenient way to share photos and other rich content. Driven in part by
the ubiquity of built-in cameras on smartphones, image uploading is
practically expected in any application with social or messaging
features. Fortunately, cloud-based hosting services like Amazon’s S3 can
shoulder the burden of storing large amounts of user-generated content.</p>
<p>Of course, you can also use RethinkDB to store thumbnails, important image
metadata, and application-specific details about your S3 uploads. In this
tutorial, I’ll demonstrate how to handle batch image uploading with Amazon
S3 and RethinkDB. The demo application puts full-sized images in an Amazon
S3 bucket while using RethinkDB to store image metadata and small
thumbnails. I’m also going to show you some useful techniques for building
a good frontend image uploading experience on the web, featuring
drag-and-drop support and a live progress bar.</p>
</div>
</description>
<pubDate>Thu, 11 Jun 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/s3-batch-upload</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/s3-batch-upload</guid>
</item>
<item>
<title>Building a realtime API with RethinkDB and Pushpin</title>
<description>
<![CDATA[
]]>
<div><p><em>Justin Karneges is the founder of <a href="https://fanout.io/">Fanout</a>. This post originally appeared on
the <a href="http://blog.fanout.io/2015/05/20/building-a-realtime-api-with-rethinkdb/">Fanout blog</a>.</em></p>
<p><a href="http://rethinkdb.com/">RethinkDB</a> is a modern NoSQL database that makes it easy to build realtime
web services. One of its standout features is called <a href="http://rethinkdb.com/docs/changefeeds">Changefeeds</a>.
Applications can query tables for ongoing changes, and RethinkDB will push any
changes to applications as they happen. The Changefeeds feature is interesting
for many reasons:</p>
<ul>
<li>You don’t need a separate message queue to wake up workers that operate on new data.</li>
<li>Database writes made from anywhere will propagate out as changes. Use the
RethinkDB dashboard to muck with data? Run a migration script? Listeners will
hear about it.</li>
<li>Filtering/squashing of change events within RethinkDB. In many cases it may
be easier to filter events using ReQL than using a message queue and
filtering workers.</li>
</ul>
<p>This makes RethinkDB a compelling part of a realtime web service stack. In this
article, we’ll describe how to use RethinkDB to implement a leaderboard API
with realtime updates. Emphasis on <em>API</em>. Unlike other leaderboard examples you
may have seen elsewhere, the focus here will be to create a clean API
definition and use RethinkDB as part of the implementation. If you’re not sure
what it means for an API to have realtime capabilities, check out <a href="http://blog.fanout.io/2015/04/02/realtime-api-design-guide/">this
guide</a>.</p>
</div>
</description>
<pubDate>Fri, 05 Jun 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/building-a-realtime-api</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/building-a-realtime-api</guid>
</item>
<item>
<title>Build a realtime liveblog with RethinkDB and PubNub</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-05-20-realtime-blog-pubnub.png" />
]]>
<div><p>RethinkDB provides a persistence layer for realtime web applications, but
the rest of the stack is up to you. A number of different frameworks and
services are available to help you convey individual realtime updates to
your application’s frontend.</p>
<p>In this blog post, I’ll demonstrate to use RethinkDB with <a href="http://www.pubnub.com/">PubNub</a>, a
service that provides hosting for realtime message streams. You can build
realtime web application with PubNub and RethinkDB, taking advantage of
PubNub’s cloud infrastructure to simplify development and scalability. To
demonstrate how you can use PubNub with RethinkDB changefeeds, I’ll show
you how to build a simple liveblog application.</p>
</div>
</description>
<pubDate>Wed, 20 May 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-pubnub</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-pubnub</guid>
</item>
<item>
<title>Use RethinkDB with LoopBack and Meteor</title>
<description>
<![CDATA[
]]>
<div><p>Now that RethinkDB is ready for adoption in production environments, a
growing number of developers are working to integrate it with their favorite
backend frameworks. We’ve seen several particularly promising integrations
emerge over the past few weeks.</p>
<h1 id="meteor-integration">Meteor integration</h1>
<p>Meteor developer <a href="https://github.com/Slava">Slava Kim</a> published a <a href="https://www.youtube.com/watch?v=05R-TDP0Ltc">video</a> on YouTube that
demonstrates his proof-of-concept <a href="https://github.com/Slava/meteor-rethinkdb">bridge between Meteor and
RethinkDB</a>. Meteor is a full-stack JavaScript framework for realtime
application development. One of Meteor’s key features is that it gives
developers uniform methods for querying data on both the client and server.</p>
<iframe width="640" height="430" src="https://www.youtube.com/embed/05R-TDP0Ltc?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen=""></iframe>
</div>
</description>
<pubDate>Mon, 11 May 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/meteor-loopback-integration</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/meteor-loopback-integration</guid>
</item>
<item>
<title>Drive iOS push notifications with RethinkDB changefeeds</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-04-28-push-notifications-banner.png" />
]]>
<div><p>Push notifications provide a useful bridge between web applications and mobile
clients, enabling a more seamless user experience across screens. RethinkDB
changefeeds make it easy for developers to add push notification support to
existing applications–using an event-driven approach that doesn’t require the
developer to add much additional plumbing.</p>
<p>In this blog post, I’ll demonstrate how to wire up RethinkDB changefeeds to iOS
push notifications, conveying realtime updates to iPhone users. For my demo, I
built a simple <a href="https://github.com/rethinkdb/rethinkdb-mobile-push">location checkin app</a> that takes advantage of GPS on the
user’s mobile device and RethinkDB’s geospatial indexing on the backend. When a
user checks in, the backend sends a push notification to every user whose last
checkin was made within 100 miles of the new checkin. A map view in the app
displays pins, marking all the nearby checkins.</p>
</div>
</description>
<pubDate>Mon, 04 May 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/ios-push-notifications</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/ios-push-notifications</guid>
</item>
<item>
<title>RethinkDB 2.0: production ready</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-04-14-2.0-release-banner.png" />
]]>
<div><p>We’re proud to announce that after five years of development,
RethinkDB is ready for production. <a href="http://rethinkdb.com/install">Download</a> RethinkDB
2.0 (<a href="https://www.youtube.com/watch?v=y_1iT_GmHTE">Yojimbo</a>) now!</p>
<p>We designed RethinkDB from the ground up to make building and
scaling realtime apps dramatically easier. The cumulative
development effort behind the project includes more than <a href="https://github.com/rethinkdb/rethinkdb/issues?q=is%3Aissue+is%3Aclosed">2,000
improvements</a>,
implemented across 16 major releases. Our GitHub repository has
nearly 30,000 commits, spanning the lifetime of the project.</p>
</div>
</description>
<pubDate>Tue, 14 Apr 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/2.0-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/2.0-release</guid>
</item>
<item>
<title>RethinkDB 2.0 drivers: native support for Tornado and EventMachine</title>
<description>
<![CDATA[
]]>
<div><p>Asynchronous web frameworks like <a href="http://www.tornadoweb.org/en/stable/">Tornado</a> and <a href="https://github.com/eventmachine/eventmachine">EventMachine</a> simplify
realtime application development in Python and Ruby. They support an
event-driven programming model that fits the realtime web, making it easy to
use WebSocket connections without blocking. You can plug in RethinkDB
changefeeds—which allow you to subscribe to changes on database
queries—to extend that event-driven model to your persistence layer,
offering a full backend stack for pushing live updates to your frontend.</p>
<p>The upcoming RethinkDB 2.0 release introduces support for using Tornado and
EventMachine to perform asynchronous queries in the Python and Ruby client
drivers. When we <a href="http://rethinkdb.com/blog/1.16-release">announced the availability</a> of the RethinkDB 2.0 release
candidate last week, the updated client drivers weren’t quite ready yet. Today,
we’re issuing fresh RethinkDB 2.0 RC client drivers that fully incorporate the
new functionality (<a href="https://github.com/rethinkdb/rethinkdb/releases/tag/v2.0.0-0RC1">download them here</a>).</p>
</div>
</description>
<pubDate>Wed, 01 Apr 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/async-drivers</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/async-drivers</guid>
</item>
<item>
<title>Announcing the RethinkDB 2.0 release candidate</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-03-19-2rc-banner.png" />
]]>
<div><p>The RethinkDB 2.0 release candidate is <a href="https://github.com/rethinkdb/rethinkdb/releases/tag/v2.0.0-0RC1">now available for testing</a>.
RethinkDB 2.0 is designed to make building and scaling realtime apps
dramatically easier. The upcoming 2.0 launch is an important milestone, marking
our very first production-ready release. We’ll announce commercial support
options and other services alongside the release.</p>
<p>After five years of development, RethinkDB is ready for widespread adoption
with the upcoming 2.0 release. The cumulative development effort behind the
project includes more than <a href="https://github.com/rethinkdb/rethinkdb/issues?q=is%3Aissue+is%3Aclosed">2,000 improvements</a>, implemented across 16 major
releases. Our most recent release, <a href="http://rethinkdb.com/blog/1.16-release/">RethinkDB 1.16</a>, dramatically expanded
the <code class="highlighter-rouge">changes</code> command and introduced <a href="http://rethinkdb.com/blog/realtime-web/">powerful support for building realtime
web applications</a>.</p>
</div>
</description>
<pubDate>Fri, 20 Mar 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/2.0-release-candidate</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/2.0-release-candidate</guid>
</item>
<item>
<title>Join us online for a live RethinkDB workshop, hosted by Platzi</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-03-11-platzi-banner.jpg" />
]]>
<div><p>Join us Saturday, March 14 for a live RethinkDB training course. The two-hour
workshop, taught by RethinkDB evangelist Ryan Paul and hosted online by our
friends at Platzi, will teach you how to build realtime web applications with
RethinkDB. The course is available for free—all you have to do is sign
up.</p>
<p>The course includes:</p>
<ul>
<li>An introduction to RethinkDB and distributed databases</li>
<li>A hands-on overview of ReQL, the RethinkDB query language</li>
<li>A guided intro to building realtime apps with RethinkDB and Node.js</li>
<li>An introduction to RethinkDB clustering and scalability best practices</li>
</ul>
<p>Attend live to ask questions and participate interactively. If you can’t make
it for the live session, you will be able to watch the recorded video later.</p>
</div>
</description>
<pubDate>Wed, 11 Mar 2015 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/platzi-course</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/platzi-course</guid>
</item>
<item>
<title>Docker introduces official RethinkDB repository</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-03-06-docker-banner.png" />
]]>
<div><p>Our friends at Docker recently added an <a href="https://registry.hub.docker.com/_/rethinkdb/">official RethinkDB repository</a> to
the Docker Hub. They announced the new repo in a <a href="https://blog.docker.com/2015/03/thirteen-new-official-repositories-added-in-january-and-february/">blog post</a> yesterday,
highlighting RethinkDB alongside several other prominent open source projects.</p>
<p>Docker is a tool that helps automate deployments. It takes advantage of
platform-level container technology to make it easy to compose isolated
software components in a reproducible way. A growing number of
infrastructure-related tools, ranging from self-hosted PaaS environments to
cluster management systems, are built around the Docker ecosystem.</p>
</div>
</description>
<pubDate>Fri, 06 Mar 2015 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/docker-repo</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/docker-repo</guid>
</item>
<item>
<title>We&#39;re sponsoring AirPair&#39;s developer writing competition</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-03-04-airpair.png" />
]]>
<div><p>We’re teaming up with <a href="https://www.airpair.com/">AirPair</a> to support their $100k developer writing
competition. We’ve sponsored a $500 cash prize to honor the best RethinkDB post
submitted to the contest.</p>
<p>AirPair, which provides a service that connects developers with experts for
live programming sessions, recently introduced an experimental set of <a href="https://www.airpair.com/social-authoring">social
authoring features</a> that make it possible for authors and readers to
collaborate on content. AirPair’s social authoring platform uses a GitHub-based
workflow that involves forking and pull requests. They launched a <a href="https://www.airpair.com/100k-writing-competition">writing
competition</a> to highlight the experiment and encourage developers to give it
a try.</p>
</div>
</description>
<pubDate>Wed, 04 Mar 2015 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/airpair-writing-contest</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/airpair-writing-contest</guid>
</item>
<item>
<title>Build an IRC bot in Go with RethinkDB changefeeds</title>
<description>
<![CDATA[
]]>
<div><p><a href="https://github.com/dancannon">Dan Cannon’s</a> project, <a href="https://github.com/dancannon/gorethink">GoRethink</a>, is among the most popular and
well-maintained third-party client drivers for RethinkDB. Dan recently updated
the driver to make it compatible with RethinkDB 1.16, adding support for
changefeeds. The language’s native concurrency features make it easy to consume
changefeeds in a realtime Go application.</p>
<p>To see GoRethink in action, I built a <a href="https://gist.github.com/segphault/e6c58469f17259cea1ca">simple IRC bot</a> that monitors a
RethinkDB cluster and sends notifications to an IRC channel when issues are
detected. I built the bot with Go, using Dan’s driver and an IRC client library
called <a href="https://github.com/fluffle/goirc">GoIRC</a>.</p>
</div>
</description>
<pubDate>Wed, 11 Feb 2015 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/go-irc-bot</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/go-irc-bot</guid>
</item>
<item>
<title>A realtime RethinkDB cluster monitoring app with live graphs</title>
<description>
<![CDATA[
]]>
<div><p>When we announced the <a href="http://rethinkdb.com/blog/1.16-release">RethinkDB 1.16</a> last week, we showed how you can use
<a href="http://rethinkdb.com/docs/changefeeds/javascript/">changefeeds</a> with the new <a href="http://rethinkdb.com/docs/administration-tools/">ReQL-based admin API</a> to monitor the status of
a RethinkDB cluster. In this blog post, I’m going to expand on that example and
show you how I used the same underlying RethinkDB features to build a realtime
cluster monitoring dashboard with live graphs—much like the dashboard
built into the RethinkDB web UI.</p>
<p><img src="http://rethinkdb.com/assets/images/posts/2015-02-04-clusterstatus.png" /></p>
</div>
</description>
<pubDate>Wed, 04 Feb 2015 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/realtime-cluster-monitoring</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/realtime-cluster-monitoring</guid>
</item>
<item>
<title>RethinkDB 1.16: cluster management API, realtime push</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-01-30-1.16-release-banner.png" />
]]>
<div><p>Today, we’re happy to announce <strong>RethinkDB 1.16</strong> (<a href="https://www.youtube.com/watch?v=soEFK6PSKEY">Stand by Me</a>).
<a href="http://rethinkdb.com/docs/install/">Download it now!</a></p>
<p>The 1.16 release is a precursor to the upcoming 2.0 release, and is the biggest
RethinkDB release to date with over <a href="https://github.com/rethinkdb/rethinkdb/releases/tag/v1.16.0-1">300 enhancements</a>. This release
includes two exciting new features: a comprehensive API for large cluster
management, and realtime push functionality that <a href="http://rethinkdb.com/blog/realtime-web/">dramatically simplifies</a>
the development of realtime web apps.</p>
</div>
</description>
<pubDate>Fri, 30 Jan 2015 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/1.16-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.16-release</guid>
</item>
<item>
<title>RethinkDB 1.16 webcast: learn about upcoming features</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2015-01-29-webcast-title-card.png" />
]]>
<div><p>Join us tomorrow (Friday, January 30th) for a live webcast at 1:30PM PT. Daniel
Mewes, RethinkDB’s director of engineering, and systems engineer Tim Maxwell
will introduce some of the new features included in our upcoming 1.16 release.</p>
<p>The webcast will offer a first look at RethinkDB’s new comprehensive cluster
management API, which makes it easy to configure sharding and replication with
ReQL expressions. You’ll also get a hands-on introduction to RethinkDB’s
<a href="http://rethinkdb.com/blog/realtime-web/">realtime push functionality</a>,
demonstrating how RethinkDB can dramatically simplify the development of
realtime web apps. The webcast will conclude with a live Q&amp;A segment, where
you’ll have a chance to query the RethinkDB team in realtime.</p>
</div>
</description>
<pubDate>Thu, 29 Jan 2015 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/1.16-webcast</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.16-webcast</guid>
</item>
<item>
<title>Advancing the realtime web</title>
<description>
<![CDATA[
]]>
<div><p>Over the past few months the team at RethinkDB has been working on a project to
make building modern, realtime apps dramatically easier. The upcoming features
are the start of an exciting new database access model – instead of polling
the database for changes, the developer can tell RethinkDB to continuously push
updated query results to applications in realtime.</p>
<p>This work started as an innocuous feature to help developers integrate
RethinkDB with other realtime systems. A <a href="http://rethinkdb.com/blog/1.13-release">few releases ago</a> we shipped
<a href="http://rethinkdb.com/docs/changefeeds">changefeeds</a> – a way to subscribe to change notifications in the database.
Whenever a document changes in a table, the server pushes a notification
describing the change to subscribed clients. You can subscribe to changes on a
table like this:</p>
<div class="highlighter-rouge"><pre><code class="highlight"><span class="n">r</span><span class="o">.</span><span class="n">table</span><span class="p">(</span><span class="s">'accounts'</span><span class="p">)</span><span class="o">.</span><span class="n">changes</span><span class="p">()</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
</code></pre>
</div>
<p>Originally we intended this feature to help developers push data from RethinkDB
to specialized data stores like ElasticSearch and message systems like
RabbitMQ, but the release generated enormous excitement we didn’t expect.
Digging deeper, we saw that many web developers used changefeeds as a solution
to a much broader problem – how do you adapt the database to push realtime
data to applications?</p>
</div>
</description>
<pubDate>Tue, 27 Jan 2015 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/realtime-web</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/realtime-web</guid>
</item>
<item>
<title>Query RethinkDB tables from PostgreSQL with foreign data wrappers</title>
<description>
<![CDATA[
]]>
<div><p>Rick Otten (<a href="https://github.com/rotten">@rotten</a>) recently released a <a href="https://github.com/wilsonrmsorg/rethinkdb-multicorn-postgresql-fdw">foreign data wrapper</a> for
PostgreSQL that provides a bridge to RethinkDB. The wrapper makes it possible
to expose individual tables from a RethinkDB database in PostgreSQL, enabling
users to access their RethinkDB data with with SQL queries.</p>
<p>The wrapper could prove especially useful in cases where a developer wants to
incorporate RethinkDB into an existing application built on PostgreSQL, taking
advantage of RethinkDB features like changefeeds to easily add realtime
updates. You could, for example, use RethinkDB to store and propagate realtime
events while continuing to use PostgreSQL for things like account management
and other data persistence.</p>
</div>
</description>
<pubDate>Thu, 22 Jan 2015 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/postgres-foreign-data-wrapper</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/postgres-foreign-data-wrapper</guid>
</item>
<item>
<title>Using RethinkDB with io.js: exploring ES6 generators and the future of JavaScript</title>
<description>
<![CDATA[
]]>
<div><p>A group of prominent Node.js contributors recently launched a community-driven
fork called <a href="https://iojs.org/">io.js</a>. One of the most promising advantages of the new fork is
that it incorporates a much more recent version of the V8 JavaScript runtime.
It happens to support a range of useful <a href="http://git.io/es6features">ECMAScript 6</a> (ES6) features right
out of the box.</p>
<p>Although io.js is still too new for production deployment, I couldn’t resist
taking it for a test drive. I used io.js and the experimental <a href="https://github.com/neumino/rethinkdbdash">rethinkdbdash</a>
driver to get an early glimpse at the future of ES6-enabled RethinkDB
application development.</p>
</div>
</description>
<pubDate>Fri, 16 Jan 2015 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/rethinkdbdash-iojs</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdbdash-iojs</guid>
</item>
<item>
<title>Hands-on with Remodel: a new Python ODM for RethinkDB</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2014-12-10-remodel_blog.png" />
]]>
<div><p>This week, <a href="https://github.com/linkyndy">Andrei Horak</a> released <a href="https://github.com/linkyndy/remodel">Remodel</a>, a new Python-based object
document mapping (ODM) library for RethinkDB. Remodel simplifies RethinkDB
application development by automating much of the underlying logic that comes
into play when working with relations.</p>
<p>Remodel users create high-level model objects and rely on a set of simple class
attributes to define relationships. The framework then uses the model objects
to generate tables and indexes. It abstracts away the need to do manual work
like performing join queries or populating relation attributes when inserting
new items. Remodel also has built-in support for connection pooling, which
obviates the need to create and manage connections. In this brief tutorial,
I’ll give you a hands-on look at Remodel and show you how to use it in a web
application.</p>
</div>
</description>
<pubDate>Wed, 10 Dec 2014 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/remodel</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/remodel</guid>
</item>
<item>
<title>Make beautiful charts with RethinkDB queries and Charted.co</title>
<description>
<![CDATA[
]]>
<div><p>While building applications with RethinkDB, I often find cases where I want to
be able to produce simple visualizations to help me better understand my data.
Ideally, I’d like to take the output of a simple query and see what it looks
like in a graph with as little work as possible. A new project recently
introduced by the developers at Medium offers a compelling solution.</p>
<p>Medium’s product science team <a href="https://medium.com/data-lab/introducing-charted-15161b2cd71e">built a lightweight web application</a> called
<a href="http://www.charted.co/">Charted</a> that makes it easy for users to generate and share graphs. As
input, the user provides a URL that points to CSV data. Charted processes the
data and produces simple graphs with a clean and elegant design. No
configuration is needed, though it allows the user to choose between bar and
line formats and customize certain aspects of the output.</p>
<p><img style="border: thin solid #eee;" src="http://rethinkdb.com/assets/images/posts/2014-12-05-charted.png" /></p>
</div>
</description>
<pubDate>Fri, 05 Dec 2014 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/csv-charted</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/csv-charted</guid>
</item>
<item>
<title>A tasty RethinkDB video roundup for Thanksgiving</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2014-11-26-thanksgiving.png" />
]]>
<div><p>Thanksgiving is almost here: it is time to configure your dinner tables for
family clusters and prepare some turkey for batch insertion of stuffing. To
show how thankful we are for our amazing community, we put together this tasty
video playlist with our best leftovers from October and November. It will help
keep you entertained while you try not to succumb to the inevitable post-turkey
tryptophan coma. Enjoy!</p>
</div>
</description>
<pubDate>Wed, 26 Nov 2014 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/thanksgiving-video-roundup</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/thanksgiving-video-roundup</guid>
</item>
<item>
<title>CatThink: see the cats of Instagram in realtime with RethinkDB and Socket.io</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2014-11-05-cat-instagram.png" />
]]>
<div><p>Modern frameworks and standards make it easy for developers to build web
applications that support realtime updates. You can push the latest data to
your users, offering a seamless experience that results in higher engagement
and better usability. With the right architecture on the backend, you can put
polling out to pasture and liberate your users from the tyranny of the refresh
button.</p>
<p>In this tutorial, I’ll show you how I built a realtime Instagram client for the
web. The application, which is called CatThink, displays a live feed of new
Instagram pictures that have the <code class="highlighter-rouge">#catsofinstagram</code> tag. Why cats of Instagram?
Because it’s one of the photo service’s most popular and beloved tags. People
on the internet really, really like cats. Or maybe we just think we do because
our feline companions have <a href="http://en.wikipedia.org/wiki/Toxoplasmosis">reprogrammed us with brain parasites</a>.</p>
</div>
</description>
<pubDate>Wed, 05 Nov 2014 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/cats-of-instagram</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/cats-of-instagram</guid>
</item>
<item>
<title>Deploying RethinkDB applications with Docker using Dokku</title>
<description>
<![CDATA[
]]>
<div><p><a href="http://progrium.com/blog/2013/06/19/dokku-the-smallest-paas-implementation-youve-ever-seen/">Dokku</a> is a simple application deployment system built on Docker. It gives
you a Heroku-like PaaS environment on your own Linux system, enabling you to
deploy your applications with git. Dokku automatically configures the proper
application runtime environment, installs all of the necessary dependencies,
and runs each application in its own isolated container. You can easily run
Dokku on your own server or an inexpensive Linux VPS.</p>
<p>The <a href="https://github.com/stuartpb/dokku-rethinkdb-plugin">RethinkDB Dokku plugin</a>, created by <a href="https://github.com/stuartpb">Stuart Bentley</a>, lets
developers create containerized RethinkDB instances for their Dokku-deployed
apps. I’ve found that Dokku is a really convenient way to share my RethinkDB
demos while I’m prototyping without having to manually deploy and configure
each one. In this short tutorial, I’ll show you how you can set up Dokku and
install the plugin on a <a href="https://www.digitalocean.com/">Digital Ocean</a> droplet.</p>
</div>
</description>
<pubDate>Thu, 23 Oct 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/dokku-deployment</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/dokku-deployment</guid>
</item>
<item>
<title>Upcoming RethinkDB events for October and November</title>
<description>
<![CDATA[
]]>
<div><p>Join the RethinkDB team at the following upcoming events:</p>
<h2 id="rethinkdb-at-html5devconf">RethinkDB at HTML5DevConf</h2>
<p><img src="http://rethinkdb.com/assets/images/posts/2014-10-17-html5con.png" style="float: right; margin: 0px 40px;" /></p>
<p><em>October 21-22</em>, <a href="http://html5devconf.com/venue.html">Moscone Center</a></p>
<p>RethinkDB will be in San Francisco next week for <a href="http://html5devconf.com/">HTML5DevConf</a>, a popular
event for frontend web developers. Conference attendees will be able to find us
at table 29 in the conference expo hall. You can see our latest demo apps and
meet RethinkDB co-founder, Slava Akhmechet. We will also have some fun
RethinkDB goodies on hand to give away, including shirts and stickers.</p>
</div>
</description>
<pubDate>Fri, 17 Oct 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/october-events</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/october-events</guid>
</item>
<item>
<title>Hosted RethinkDB deployments in the cloud now available from Compose</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2014-10-14-compose.png" />
]]>
<div><p>We are pleased to announce that our friends at
<a href="https://www.compose.io/">Compose</a> now offer RethinkDB hosting in the cloud.
Their new service lets you get a managed RethinkDB deployment in a matter of
seconds, providing a fast and easy way to start working on your RethinkDB
project without the overhead of managing your own infrastructure or
provisioning your own cluster.</p>
<p>Compose, formerly known as MongoHQ, is a dedicated Database as a Service
(DBaaS) company. RethinkDB is the third database in their product lineup,
launching alongside their existing support for MongoDB and Elasticsearch.
Available today as a public beta, their hosted RethinkDB deployments come with
automatic scaling and backups.</p>
</div>
</description>
<pubDate>Wed, 15 Oct 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/compose</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/compose</guid>
</item>
<item>
<title>BeerThink: infinite scrolling in a mobile app with Ionic, Node.js, and RethinkDB</title>
<description>
<![CDATA[
]]>
<div><p>Developers often use pagination to display large collections of data. An
application can fetch content in batches as needed, presenting a fixed number
of records at a time. On the frontend, paginated user interfaces typically
provide something like “next” and “previous” navigation buttons so that users
can move through the data set. In modern mobile apps, it is increasingly common
to implement an infinite scrolling user interface on top of paginated data. As
the user scrolls through a list, the application fetches and appends new
records.</p>
<p>To demonstrate the use of pagination in RethinkDB applications, I made a simple
mobile app called <a href="https://github.com/rethinkdb/beerthink">BeerThink</a>. It displays a list of beers and breweries,
providing a detailed summary when the user taps an item. The app uses a data
dump from the <a href="https://github.com/brewdega/open-beer-database-dumps">Open Beer Database</a>, which contains information about roughly
4,400 beers and 1,200 breweries. I converted the data to JSON so that it is
easy to import into RethinkDB. There are two tables, one for beers and one for
breweries. The application uses RethinkDB’s support for table joins to
correlate the beers with their respective breweries.</p>
</div>
</description>
<pubDate>Tue, 07 Oct 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/beerthink</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/beerthink</guid>
</item>
<item>
<title>Building an earthquake map with RethinkDB and GeoJSON</title>
<description>
<![CDATA[
]]>
<div><p><a href="http://rethinkdb.com/blog/1.15-release/">RethinkDB 1.15</a> introduced new <a href="http://rethinkdb.com/docs/geo-support/javascript/">geospatial features</a> that can help you
plot a course for smarter location-based applications. The database has new
geographical types, including points, lines, and polygons. Geospatial queries
makes it easy to compute the distance between points, detect intersecting
regions, and more. RethinkDB stores geographical types in a format that
conforms with the GeoJSON standard.</p>
<p>Developers can take advantage of the new geospatial support to simplify the
development of a wide range of potential applications, from location-aware
mobile experiences to specialized GIS research platforms. This tutorial
demonstrates how to build an earthquake map using RethinkDB’s new geospatial
support and an open data feed hosted by the USGS.</p>
</div>
</description>
<pubDate>Tue, 30 Sep 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/earthquake-geojson</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/earthquake-geojson</guid>
</item>
<item>
<title>RethinkDB 1.15: Geospatial queries</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2014-09-25-1.15-release-banner.png" />
]]>
<div><p>Today, we’re happy to announce <strong>RethinkDB 1.15</strong> (<a href="https://www.youtube.com/watch?v=zmr1iSG3RTA">Lawrence of Arabia</a>).
<a href="http://rethinkdb.com/docs/install">Download it now!</a></p>
<p>The 1.15 release includes over <a href="https://github.com/rethinkdb/rethinkdb/issues?q=is%3Aissue+milestone%3A1.15+is%3Aclosed">50 enhancements</a> and introduces geospatial
queries to RethinkDB. This has been <em>by far</em> the <a href="https://github.com/rethinkdb/rethinkdb/issues/1158">most requested
feature</a> by RethinkDB users. In addition, we’ve sped up many queries
dramatically by lazily deserializing data from disk. This release also brings a
new <a href="http://rethinkdb.com/docs/javascript/uuid">r.uuid</a> command that allows server-side generation of UUIDs.</p>
</div>
</description>
<pubDate>Thu, 25 Sep 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.15-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.15-release</guid>
</item>
<item>
<title>Publish and subscribe entirely in RethinkDB</title>
<description>
<![CDATA[
]]>
<div><p>With RethinkDB’s changefeeds, it’s easy to create a publish-subscribe message
exchange without going through a third-party queue. <a href="https://github.com/deontologician)">Josh Kuhn</a> has written a
small library, <a href="https://github.com/rethinkdb/example-pubsub">repubsub</a>, that shows you how to build topic
exchanges—and he’s written it in all three of our officially-supported
languages. He’s put together a terrific <a href="http://www.rethinkdb.com/docs/publish-subscribe/">tutorial</a> article demonstrating how
to use it. You can simply create a topic and publish messages to it:</p>
<div class="highlighter-rouge"><pre><code class="highlight"><span class="n">topic</span> <span class="o">=</span> <span class="n">exchange</span><span class="o">.</span><span class="n">topic</span><span class="p">(</span><span class="s">'fights.superheroes.batman'</span><span class="p">)</span>
<span class="n">topic</span><span class="o">.</span><span class="n">publish</span><span class="p">({</span><span class="s">'opponent'</span><span class="p">:</span> <span class="s">'Joker'</span><span class="p">,</span> <span class="s">'victory'</span><span class="p">:</span> <span class="bp">True</span><span class="p">})</span>
</code></pre>
</div>
<p>Then subscribe to just the messages that match your interest.</p>
<div class="highlighter-rouge"><pre><code class="highlight"><span class="n">filter_func</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">topic</span><span class="p">:</span> <span class="n">topic</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s">r'fights</span><span class="err">\</span><span class="s">.superheroes.*'</span><span class="p">)</span>
<span class="n">queue</span> <span class="o">=</span> <span class="n">exchange</span><span class="o">.</span><span class="n">queue</span><span class="p">(</span><span class="n">filter_func</span><span class="p">)</span>
<span class="k">for</span> <span class="n">topic</span><span class="p">,</span> <span class="n">payload</span> <span class="ow">in</span> <span class="n">queue</span><span class="o">.</span><span class="n">subscription</span><span class="p">:</span>
<span class="k">print</span> <span class="n">topic</span><span class="p">,</span> <span class="n">payload</span>
</code></pre>
</div>
<p>Josh describes how to implement tags, nested topics and more, so check out the
<a href="http://www.rethinkdb.com/docs/publish-subscribe/">publish-subscribe tutorial</a>.</p>
</div>
</description>
<pubDate>Wed, 03 Sep 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/publish-subscribe</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/publish-subscribe</guid>
</item>
<item>
<title>September events in San Francisco</title>
<description>
<![CDATA[
]]>
<div><p>Join the RethinkDB team at the following events for September 2014:</p>
<h2 id="meetup-rethinkdb-sf-group-at-heavybit-industries">Meetup: RethinkDB SF Group at Heavybit Industries</h2>
<p><img src="http://rethinkdb.com/assets/images/posts/2014-09-02-heavybit.jpg" style="float: right; margin: 0px 40px;" /></p>
<p><em>Thursday, September 11th at 6pm</em>, <a href="http://www.heavybit.com/">Heavybit Industries</a>), 325 Ninth
Street (<a href="https://www.google.com/maps/place/325+9th+St,+San+Francisco,+CA+94103/@37.773589,-122.411017,17z/data=!3m1!4b1!4m2!3m1!1s0x808f7e283f30b915:0x6697580414bf2352?hl=en-US">map</a>)</p>
<p>RethinkDB co-founder, Slava Akhmechet, will be talking about the latest
RethinkDB advances and where it’s headed; come meet the founders &amp; engineers!</p>
<p>Get architectural advice, improve your code, give the RethinkDB team product
feedback, and catch a sneak peek of upcoming features. Talks will start at
7pm. Food and drinks provided.</p>
<p><a href="http://www.meetup.com/RethinkDB-SF-Meetup-Group/events/200802562/">RSVP here</a></p>
</div>
</description>
<pubDate>Tue, 02 Sep 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/september-events</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/september-events</guid>
</item>
<item>
<title>RethinkDB 1.14: binary data, seamless migration, and Python 3 support</title>
<description>
<![CDATA[
]]>
<div><p>Today, we’re happy to announce <strong>RethinkDB 1.14</strong> (<a href="http://www.youtube.com/watch?v=EvBF3Lxla98">Brazil</a>). <a href="http://rethinkdb.com/docs/install/">Download it
now!</a></p>
<p><a href="http://xkcd.com/303/"><img src="http://rethinkdb.com/assets/images/posts/2014-08-26-1.14-release-poster.png" /></a></p>
<p>The 1.14 release includes over <a href="https://github.com/rethinkdb/rethinkdb/issues?q=is%3Aissue+milestone%3A1.14+is%3Aclosed">50 enhancements</a> including:</p>
<ul>
<li><strong>Seamless migration</strong> (read more below)</li>
<li>Simple <a href="http://rethinkdb.com/api/javascript/binary/">binary data</a> support</li>
<li>Python 3 support</li>
<li>Support for returning changes from multiple writes</li>
<li>Better <a href="https://github.com/rethinkdb/docs/issues?q=is%3Aclosed+is%3Aissue+assignee%3Achipotle">documentation</a></li>
<li>New options for handling conflicts on inserts</li>
<li>Dozens of stability and performance improvements</li>
</ul>
</div>
</description>
<pubDate>Tue, 26 Aug 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.14-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.14-release</guid>
</item>
<item>
<title>Join us online for a live presentation and Q&amp;A for RethinkDB 1.14</title>
<description>
<![CDATA[
]]>
<div><p>Join us online on <strong>Thursday, August 21st at 1:30pm</strong> for a live presentation
and Q&amp;A session presented by RethinkDB’s co-founder Slava Akhmechet. You’ll
learn about new and upcoming features in RethinkDB 1.14, including:</p>
<ul>
<li><strong>Changefeeds</strong>: get realtime push notifications of changes in the database.</li>
<li><strong>r.http</strong>: Don’t fetch data from the internet and store it in the database,
get the database to fetch it for you!</li>
<li><strong>Binary data types</strong>: store images, zip files, and arbitrary binary data in
a field.</li>
<li>Other features in RethinkDB 1.14: Promises in the JavaScript driver, Python 3
support, and seamless migrations.</li>
</ul>
<p>To attend, <a href="https://attendee.gotowebinar.com/register/4543556240365418498">register for the webinar</a>, and follow the instructions you
receive via email.</p>
</div>
</description>
<pubDate>Fri, 15 Aug 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.14-release-webinar-announcement</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.14-release-webinar-announcement</guid>
</item>
<item>
<title>Feed RethinkDB changes directly into RabbitMQ</title>
<description>
<![CDATA[
]]>
<div><p>RethinkDB’s new <a href="http://rethinkdb.com/docs/changefeeds">changefeeds</a> let your applications subscribe to changes
made to a table in real-time. They’re a perfect match with a distributed
message queue system like <a href="http://www.rabbitmq.com">RabbitMQ</a>: changes can be sent from RethinkDB to
a RabbitMQ topic exchange with only a few extra lines of code. RabbitMQ then
queues them to pass on to any client subscribed to that exchange. If you need
to to send information about those changes to a large number of clients as
efficiently as possible, RabbitMQ is the rodent you need. Imagine a changefeed
for real-time stock updates being distributed to a thousand terminals on a
trading floor.</p>
</div>
</description>
<pubDate>Fri, 25 Jul 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-rabbitmq</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-rabbitmq</guid>
</item>
<item>
<title>Rethink and Rails together? A NoBrainer!</title>
<description>
<![CDATA[
]]>
<div><p>Have you been looking for a tutorial on using RethinkDB with Ruby on Rails?
RethinkDB’s Josh Kuhn (<a href="https://github.com/deontologician">@deontologician</a>) has contributed a new integration
article for our documentation on using <a href="http://nobrainer.io/">NoBrainer</a>, a RethinkDB ORM that’s
close to a drop-in replacement for ActiveRecord.</p>
<p>If you already have a little experience with Rails, NoBrainer will feel
familiar and natural to you already. You get model generation, scaffolding,
validation, and <code class="highlighter-rouge">belongs_to</code> and <code class="highlighter-rouge">has_many</code> associations. And, you get a
lightweight wrapper around ReQL that lets you execute queries like this:</p>
<div class="highlighter-rouge"><pre><code class="highlight"><span class="c1"># Find a comment from a user with 'bob' in its name sorted by the name.</span>
<span class="c1"># Note: NoBrainer will use the :name index from User by default</span>
<span class="no">User</span><span class="p">.</span><span class="nf">where</span><span class="p">(</span><span class="ss">:name</span> <span class="o">=&gt;</span> <span class="sr">/bob/</span><span class="p">).</span><span class="nf">order_by</span><span class="p">(</span><span class="ss">:name</span> <span class="o">=&gt;</span> <span class="ss">:desc</span><span class="p">).</span><span class="nf">to_a</span>
</code></pre>
</div>
<p>Go read the full guide: <a href="http://rethinkdb.com/docs/rails">Using RethinkDB with Ruby on Rails</a></p>
</div>
</description>
<pubDate>Fri, 18 Jul 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethink-rails-nobrainer</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethink-rails-nobrainer</guid>
</item>
<item>
<title>Building realtime apps with RethinkDB and Firebase</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2014-06-20-rethinkdb-firebase-meetup.png" />
]]>
<div><p>We’re co-hosting a RethinkDB + Firebase meetup on realtime sync architectures
for web and mobile apps. We’ll be talking about:</p>
<ul>
<li>designing backend realtime sync architectures</li>
<li>scaling those architectures when it’s time</li>
<li>new features in RethinkDB and Firebase to make building realtime apps easier</li>
</ul>
<p>Come hang out with the RethinkDB and Firebase teams – or even better, give a
lightning talk on how you’re using RethinkDB!</p>
</div>
</description>
<pubDate>Fri, 20 Jun 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-firebase-meetup</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-firebase-meetup</guid>
</item>
<item>
<title>RethinkDB 1.13: pull data via HTTP, push data via changefeeds</title>
<description>
<![CDATA[
<img src="http://rethinkdb.com/assets/images/posts/2014-06-12-1.13-release-banner.png" />
]]>
<div><p>Today, we’re happy to announce <strong>RethinkDB 1.13</strong> (<a href="https://www.youtube.com/watch?v=hkCqSHwhKVg">My Name is Nobody</a>).
<a href="http://rethinkdb.com/docs/install/">Download it now!</a></p>
<p>The 1.13 release includes over <a href="https://github.com/rethinkdb/rethinkdb/issues?milestone=61&amp;state=closed">150 enhancements</a>, including:</p>
<ul>
<li>New <a href="http://rethinkdb.com/docs/external-api-access">http</a> command for seamlessly pulling data from external APIs into
RethinkDB</li>
<li>New <a href="http://rethinkdb.com/docs/changefeeds/">changes</a> command for subscribing to document changes on tables</li>
<li>Full promises support in the JavaScript driver</li>
<li>A high performance JSON driver protocol</li>
<li>Dozens of performance and stability improvements</li>
</ul>
</div>
</description>
<pubDate>Thu, 12 Jun 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.13-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.13-release</guid>
</item>
<item>
<title>@antirez, thank you for Redis!</title>
<description>
<![CDATA[
]]>
<div><p>Yesterday, Salvatore <a href="http://antirez.com/news/75">posted an amazing write-up</a> on implementing
the really neat HyperLogLog data structure in Redis. We keep being
amazed by Redis and Salvatore — he’s taught us a great deal
about good APIs, usability, and software development in general. We
learned so much from Redis, we drew this to celebrate his work.
Thanks for your hard work, <a href="https://twitter.com/antirez">@antirez</a>!</p>
<p><img src="http://rethinkdb.com/assets/images/posts/2014-04-03-thanks-redis.jpg" /></p>
</div>
</description>
<pubDate>Thu, 03 Apr 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/thanks-redis</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/thanks-redis</guid>
</item>
<item>
<title>RethinkDB 1.12: simplified map/reduce, ARM port, new caching infrastructure</title>
<description>
<![CDATA[
]]>
<div><p>Today, we’re happy to announce <strong>RethinkDB 1.12</strong> (<a href="https://www.youtube.com/watch?v=vQLNS3HWfCM">The Wizard of Oz</a>).
<a href="http://rethinkdb.com/docs/install/">Download it now!</a></p>
<p>With over <a href="https://github.com/rethinkdb/rethinkdb/issues?milestone=53&amp;state=closed">200 enhancements</a>, the 1.12 release is one of the biggest releases
to date. This release includes:</p>
<ul>
<li>Dramatically simplified map/reduce and aggregation commands.</li>
<li>Big improvements to caching that do away with long-standing stability and performance limitations.</li>
<li>A port to the ARM architecture.</li>
<li>Four new ReQL commands for object and string manipulation.</li>
<li>Dozens of bug fixes, stability enhancements, and performance improvements.</li>
</ul>
<p><a href="https://www.youtube.com/watch?v=mktjXnWfaGc">
<img src="http://rethinkdb.com/assets/images/videos/releases/rethinkdb-1.12.png" />
</a></p>
</div>
</description>
<pubDate>Sat, 15 Mar 2014 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.12-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.12-release</guid>
</item>
<item>
<title>RethinkDB raises an $8M Series A</title>
<description>
<![CDATA[
]]>
<div><p>Today we’re delighted to announce our Series A! We’ve raised $8M to fund
development, grow the RethinkDB community, and ultimately make database tools
<a href="https://github.com/rethinkdb/rethinkdb/issues/1000">feel indistinguishable from magic</a>.</p>
<p>Here’s what we’re planning to accomplish with this new development budget:</p>
<ul>
<li>
<p><strong>Get to a long-term support release</strong>: Since we first shipped the beta
version of RethinkDB we’ve been humbled by the feedback, support, and
encouragement from our users. Over the past thirteen months we’ve shipped ten
new releases, fixed hundreds of bugs, and added dozens of new features. We’re
now hard at work polishing the final rough edges in preparation for the
upcoming LTS release.</p>
</li>
<li>
<p><strong>Grow the community:</strong> An amazing community has sprung up around RethinkDB
over the past year. We’re incredibly grateful to all the people who’ve spent
time developing and supporting client drivers for <a href="http://rethinkdb.com/docs/install-drivers/">15 different
languages</a>, building frameworks, ORMs, and designing new
admin tools. We’re now in a position to give back to our community by
sponsoring conferences, promoting community projects, improving
documentation, and introducing more developers to RethinkDB.</p>
</li>
<li>
<p><strong>Offer commercial support:</strong> Thousands of developers are already building
applications backed by RethinkDB; from mobile games to gene sequence
analysis, and everything in between. In the coming months we’ll be adding
commercial support options to give these teams everything they need to
confidently use RethinkDB in production deployments.)</p>
</li>
</ul>
</div>
</description>
<pubDate>Tue, 10 Dec 2013 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/funding</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/funding</guid>
</item>
<item>
<title>RethinkDB 1.11: query profiler, new streaming algorithm, devops enhancements</title>
<description>
<![CDATA[
]]>
<div><p>Today, we’re happy to announce <strong>RethinkDB 1.11</strong> (<a href="http://www.youtube.com/watch?v=rVFi-yeTe5g">Breakfast at
Tiffany’s</a>), which improves the experience of operating live RethinkDB
deployments. <a href="http://rethinkdb.com/docs/install/">Download it now!</a></p>
<p>The 1.11 release features more than <a href="https://github.com/rethinkdb/rethinkdb/releases/tag/v1.11.0">70 enhancements</a>, including:</p>
<ul>
<li>A new <strong>query profiler</strong> to analyze the performance of ReQL queries.</li>
<li>An improved <strong>streaming algorithm</strong> that reduces query latency.</li>
<li>DevOps enhancements, including <strong>new ReQL commands</strong> designed for operations</li>
</ul>
<p><a href="https://www.youtube.com/watch?v=avbTx3tpIc8">
<img src="http://rethinkdb.com/assets/images/videos/releases/rethinkdb-1.11.png" />
</a></p>
</div>
</description>
<pubDate>Fri, 22 Nov 2013 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/1.11-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.11-release</guid>
</item>
<item>
<title>RethinkDB 1.10: multi-indexes and serialization improvements</title>
<description>
<![CDATA[
]]>
<div><p>We are happy to announce <strong>RethinkDB 1.10</strong> (<a href="http://www.youtube.com/watch?v=0JPu3BP5Ets">Von Ryan’s Express</a>).
<a href="http://rethinkdb.com/docs/install">Download it now!</a></p>
<p>This release lets you index a row by multiple values at once, which can make
entire classes of queries much faster (see below). It also includes major
improvements to the way we serialize small values, which should increase the
performance of many disk/network-bound workloads.</p>
<p>Take a look at the <a href="https://github.com/rethinkdb/rethinkdb/releases/tag/v1.10.0">full list</a> of improvements, or watch Daniel Mewes
(<a href="https://github.com/danielmewes">@danielmewes</a>), an engineer at RethinkDB, talk about the 1.10 release in
this two-minute video:</p>
<p><a href="https://www.youtube.com/watch?v=JXxfwY7OkLI">
<img src="http://rethinkdb.com/assets/images/videos/releases/rethinkdb-1.10.png" />
</a></p>
</div>
</description>
<pubDate>Mon, 23 Sep 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.10-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.10-release</guid>
</item>
<item>
<title>RethinkDB 1.9: indexing and query runtime performance</title>
<description>
<![CDATA[
]]>
<div><p>We are happy to announce <strong>RethinkDB 1.9</strong> (Kagemusha).
<a href="http://rethinkdb.com/docs/install/">Download it now!</a></p>
<p>This release includes massive enhancements that improve performance of many
queries by orders of magnitude. See the <a href="https://github.com/rethinkdb/rethinkdb/releases/tag/v1.9.0">full list</a> of <a href="https://github.com/rethinkdb/rethinkdb/issues?milestone=49&amp;state=closed">enhancements</a>, or
watch Joe Doliner (<a href="https://github.com/jdoliner">@jdoliner</a>), an engineer at RethinkDB, talk about the 1.9
release in this two-minute video:</p>
<p><a href="https://www.youtube.com/watch?v=m1Ds1VpECv0">
<img src="http://rethinkdb.com/assets/images/videos/releases/rethinkdb-1.9.png" />
</a></p>
</div>
</description>
<pubDate>Tue, 10 Sep 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.9-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.9-release</guid>
</item>
<item>
<title>RethinkDB 1.8: date support, nested object syntax, 8x disk usage improvement</title>
<description>
<![CDATA[
]]>
<div><p>We are happy to announce <strong>RethinkDB 1.8</strong> (High Noon). <a href="http://rethinkdb.com/docs/install/">Download it
now!</a></p>
<p>This release includes the following features and improvements:</p>
<ul>
<li>ReQL improvements
<ul>
<li><strong>Dates and times</strong> are natively supported, and there are over 20 new
commands for creating, manipulating, and querying them.</li>
<li><strong>Nested documents</strong> are easier to work with in <code class="highlighter-rouge">update</code> and <code class="highlighter-rouge">merge</code>. (We
also extended support for <code class="highlighter-rouge">pluck</code>’s nested document syntax to <code class="highlighter-rouge">without</code>,
<code class="highlighter-rouge">group_by</code>, <code class="highlighter-rouge">with_fields</code>, and <code class="highlighter-rouge">has_fields</code>.)</li>
</ul>
</li>
<li>Server improvements
<ul>
<li>Server uses <strong>8x less disk space</strong>.</li>
<li>Tables support <strong>efficient ordering</strong> by primary or secondary indexes.</li>
<li><strong>Javascript evaluation</strong> is more efficient and reliable.</li>
<li><strong>Cross-network cluster operation</strong> is much easier.</li>
</ul>
</li>
</ul>
<p>See the <a href="https://github.com/rethinkdb/rethinkdb/releases/tag/v1.8.0">full list</a> of <a href="https://github.com/rethinkdb/rethinkdb/issues?milestone=40&amp;state=closed">over 90</a> bug fixes, features, and enhancements.</p>
<p>Michael Lucy (<a href="https://github.com/mlucy">@mlucy</a>), an engineer at RethinkDB, introduces these new
features in this two-minute video:</p>
<p><a href="https://www.youtube.com/watch?v=j65mZzKLaMM">
<img src="http://rethinkdb.com/assets/images/videos/releases/rethinkdb-1.8.png" />
</a></p>
</div>
</description>
<pubDate>Tue, 13 Aug 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.8-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.8-release</guid>
</item>
<item>
<title>Computing Fibonacci in RethinkDB</title>
<description>
<![CDATA[
]]>
<div><p>Yesterday I saw <a href="https://github.com/taybin/lexthink">@taybin’s</a> RethinkDB driver for <a href="http://elixir-lang.org/">Elixir</a>. I didn’t know
anything about the language so I started browsing through the documentation,
and stumbled on the obligatory <a href="https://gist.github.com/kyanny/2026028">Fibonacci example</a>. Of course I
immediately got the itch to compute Fibonacci in ReQL. It turned out to be
pretty simple.</p>
<p>First, create a table to store the Fibonacci numbers and insert the two base
cases:</p>
<div class="highlighter-rouge"><pre><code class="highlight"><span class="nx">r</span><span class="p">.</span><span class="nx">tableCreate</span><span class="p">(</span><span class="s1">'fib'</span><span class="p">);</span>
<span class="nx">r</span><span class="p">.</span><span class="nx">table</span><span class="p">(</span><span class="s1">'fib'</span><span class="p">).</span><span class="nx">insert</span><span class="p">([{</span><span class="na">id</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="na">value</span><span class="p">:</span> <span class="mi">0</span><span class="p">},</span>
<span class="p">{</span><span class="na">id</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="na">value</span><span class="p">:</span> <span class="mi">1</span><span class="p">}]);</span>
</code></pre>
</div>
</div>
</description>
<pubDate>Wed, 17 Jul 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/fib</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/fib</guid>
</item>
<item>
<title>RethinkDB 1.7: hot backup, atomic set and get, 10x insert performance improvement</title>
<description>
<![CDATA[
]]>
<div><p>We are happy to announce <strong>RethinkDB 1.7</strong> (Nights of Cabiria). <a href="http://rethinkdb.com/docs/install/">Download it
now!</a></p>
<p>This release includes the following features and improvements:</p>
<ul>
<li>Tools for CSV and JSON import and export</li>
<li>Support for hot backup and restore</li>
<li>ReQL support for atomic set and get operations</li>
<li>A powerful new syntax for handling nested documents</li>
<li>Greater than 10x performance improvement on document inserts</li>
<li>Native binaries for CentOS / RHEL</li>
<li>A number of small ReQL improvements (explained below)</li>
</ul>
<p>See the full list of <a href="https://github.com/rethinkdb/rethinkdb/issues?milestone=37&amp;page=1&amp;state=closed">over 30</a> bug fixes, features, and enhancements.</p>
<p>Etienne Laurin (<a href="https://github.com/atnnn">@atnnn</a>), an engineer at RethinkDB, introduces these new
features in this one-minute video:</p>
<p><a href="https://www.youtube.com/watch?v=eC3zSDCGepw">
<img src="http://rethinkdb.com/assets/images/videos/releases/rethinkdb-1.7.png" />
</a></p>
</div>
</description>
<pubDate>Wed, 03 Jul 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.7-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.7-release</guid>
</item>
<item>
<title>RethinkDB 1.6: regex matching, new array operations, random sampling</title>
<description>
<![CDATA[
]]>
<div><p>We are happy to announce <strong>RethinkDB 1.6</strong> (Fargo). Go <a href="http://rethinkdb.com/docs/install/">download it
now</a>)!</p>
<p>This release includes regex string matching, fourteen new array operations,
support for random sampling, error handling improvements, support for
authentication keys, and <a href="https://github.com/rethinkdb/rethinkdb/issues?milestone=31&amp;state=closed">over 65</a> bug fixes, features, and enhancements.</p>
<p><a href="https://twitter.com/arhoads76/status/305234472717127681">
<img src="http://rethinkdb.com/assets/images/posts/2013-06-13-1.6-release-1.png" />
</a></p>
</div>
</description>
<pubDate>Thu, 13 Jun 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.6-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.6-release</guid>
</item>
<item>
<title>All about lambda functions in RethinkDB queries</title>
<description>
<![CDATA[
]]>
<div><p>It’s no secret that ReQL, the RethinkDB query language, is modeled after
functional languages like Lisp and Haskell. The functional paradigm is
particularly well suited to the needs of a distributed database while being
more easily embeddable as a DSL than SQL’s ad hoc syntax. Key to functional
programming’s power and simplicity is the anonymous (aka lambda) function.</p>
<p>This post covers all aspects of lambda functions in ReQL from concept to
implementation and is meant for <a href="http://github.com/mfenniak/rethinkdb-net">third</a> <a href="http://github.com/christopherhesse/rethinkgo">party</a>
<a href="http://github.com/taybin/lethink">driver</a> <a href="http://github.com/danielmewes/php-rql">developers</a> and those interested in functional
programming and programming language design. For a more practical guide to
using ReQL please see our <a href="http://rethinkdb.com/docs">docs</a> where you can find <a href="http://rethinkdb.com/docs/faq">FAQs</a>,
<a href="http://rethinkdb.com/screencast">screencasts</a>, an <a href="http://rethinkdb.com/api">API reference</a>, as well as various tutorials and
examples.</p>
</div>
</description>
<pubDate>Thu, 23 May 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/lambda-functions</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/lambda-functions</guid>
</item>
<item>
<title>RethinkDB 1.5: secondary indexes, batched inserts performance improvements, soft durability mode</title>
<description>
<![CDATA[
]]>
<div><p>We are pleased to announce <strong>RethinkDB 1.5</strong> ( The Graduate), so go <a href="http://rethinkdb.com/docs/install/">download
it now</a>!</p>
<p>This release includes the long-awaited support for secondary indexes, a new
algorithm for batched inserts that results in an ~18x performance improvement,
support for soft durability (don’t worry – off by default), and <a href="https://github.com/rethinkdb/rethinkdb/issues?milestone=8&amp;page=1&amp;state=closed">over 180</a>
bug fixes, features, and enhancements.</p>
</div>
</description>
<pubDate>Thu, 16 May 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/1.5-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/1.5-release</guid>
</item>
<item>
<title>A tool for RethinkDB driver developers</title>
<description>
<![CDATA[
]]>
<div><p>The <a href="http://rethinkdb.com/blog/rethinkdb-1.4-release/">main focus of the 1.4 release</a> was to refactor the client-server
wire protocol to simplify future development of the query language and also to
make writing client drivers for new languages significantly easier.</p>
<p>It’s been a bit over a month since the release and we’ve already heard of a
couple of new drivers being developed. <a href="https://github.com/taybin/lethink">Erlang</a>, <a href="https://github.com/mfenniak/rethinkdb-net">C#</a>, Scala, and the
just-announced <a href="http://danielmewes.github.io/php-rql/">PHP</a> are the ones we know about, but we hope to hear from
you about even more of them!</p>
<p>This seemed like a confirmation that a refactored, simplified and source
documented <a href="https://github.com/rethinkdb/rethinkdb/blob/next/src/rdb_protocol/ql2.proto">protobuf definition</a> and the rewritten official drivers were
indeed what was needed to enable users to start working on new drivers. But we
realized, and our users helped us with this, that while being a good start,
these do not (and can not) provide all the details needed while developing new
drivers.</p>
</div>
</description>
<pubDate>Mon, 22 Apr 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/a-tool-for-rethinkdb-driver-developers</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/a-tool-for-rethinkdb-driver-developers</guid>
</item>
<item>
<title>RethinkDB 1.4: improved wire protocol, updated drivers, data explorer history</title>
<description>
<![CDATA[
]]>
<div><p>RethinkDB 1.4 (<a href="http://www.youtube.com/watch?v=Eo2v3kTxzBU">Some Like it Hot</a>) is out. This release includes an
improved wire protocol, updated drivers, support for query history in the data
explorer, and a brand-new build system. It contains well over 100 bug fixes,
features, and improvements (you can see the complete list of <a href="https://github.com/rethinkdb/rethinkdb/issues?milestone=5&amp;page=1&amp;state=closed">closed issues on
Github</a>).</p>
</div>
</description>
<pubDate>Mon, 18 Mar 2013 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-1.4-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-1.4-release</guid>
</item>
<item>
<title>RethinkDB tech talk at Walmart Labs</title>
<description>
<![CDATA[
]]>
<div><p>Bill Rowan, engineer at RethinkDB, gives a talk
introducing our open-source distributed document
database– he discusses replication, sharding,
writing queries with ReQL, and its internal
architecture.</p>
<p><a href="https://www.youtube.com/watch?v=H9G1dCMTWps">
<img src="http://rethinkdb.com/assets/images/videos/walmart-labs.png" />
</a></p>
</div>
</description>
<pubDate>Mon, 25 Feb 2013 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/walmart-labs</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/walmart-labs</guid>
</item>
<item>
<title>Query languages and DSLs in Ruby</title>
<description>
<![CDATA[
]]>
<div><p>Michael Lucy, engineer at RethinkDB, gives a talk on
how we built our query language (ReQL) as a DSL for
languages like Ruby, Python, and Javascript and the
challenges we encountered along the way.</p>
<p><a href="https://www.youtube.com/watch?v=1KTtYJImCDE">
<img src="http://rethinkdb.com/assets/images/videos/dsls-mlucy.png" />
</a></p>
</div>
</description>
<pubDate>Mon, 25 Feb 2013 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/query-languages-and-dsls-in-ruby</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/query-languages-and-dsls-in-ruby</guid>
</item>
<item>
<title>RethinkDB example apps</title>
<description>
<![CDATA[
]]>
<div><p>Today we’ve updated the <a href="http://rethinkdb.com/docs">documentation page</a> with a set of simple example
apps that use RethinkDB as the backend database. These examples should serve as
a quick way to figure out how to use stack X with RethinkDB. While very basic,
the examples give a good idea of how to put all the pieces together.</p>
<p>So far we’ve published two applications based on the following stacks:</p>
<ul>
<li>A <a href="http://rethinkdb.com/docs/examples/flask-backbone-todo">todo list</a> built with Flask, Backbone.js, and RethinkDB (see it on
<a href="https://github.com/rethinkdb/rethinkdb-example-flask-backbone-todo">GitHub</a>)</li>
<li>A <a href="http://rethinkdb.com/docs/examples/sinatra-pastie">simple Pastie app</a> built with Sinatra and RethinkDB (see it on
<a href="https://github.com/rethinkdb/rethinkdb-example-sinatra-pastie">GitHub</a>)</li>
</ul>
<p>The code is available on GitHub under the MIT license. We really like the
documentation format generated by <a href="http://rtomayko.github.com/rocco/">rocco.rb</a>, so we used it to annotate the
source code. Documenting these apps has been a good exercise in eating our own
dog food because we had to put the API to work and identify new ways to improve
it.</p>
</div>
</description>
<pubDate>Fri, 01 Feb 2013 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-example-apps</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-example-apps</guid>
</item>
<item>
<title>Our take on RethinkDB vs today&#39;s NoSQL</title>
<description>
<![CDATA[
]]>
<div><div class="infobox "><p><strong>Interested in a less biased overview?</strong> We encourage you to also read the
technical comparison between <a href="http://rethinkdb.com/docs/comparison-tables">RethinkDB and MongoDB</a>.</p>
</div>
<p>Many people have been asking how RethinkDB differs from MongoDB and other NoSQL
systems. Our first attempt to address these questions is a high level
<a href="http://rethinkdb.com/docs/comparison-tables">technical overview</a> comparing RethinkDB with MongoDB. However, the
overview is meant to be impartial, and it omits some of the more interesting
bits about what makes RethinkDB special (such as our irrational love for Dota).
In this post we wanted to describe the product from a more personal
perspective.</p>
</div>
</description>
<pubDate>Thu, 31 Jan 2013 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/mongodb-biased-comparison</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/mongodb-biased-comparison</guid>
</item>
<item>
<title>Check out the RethinkDB screencast</title>
<description>
<![CDATA[
]]>
<div><p>We’ve put together a short screencast to showcase some of the features of
RethinkDB. The screencast walks through starting RethinkDB, inserting and
updating JSON documents through the web UI using the Javascript ReQL driver,
building data analysis queries (to get insight into GitHub’s commit information
dataset), as well as sharding and replicating data. Check it out!</p>
<p><a href="https://www.youtube.com/watch?v=cnpSi9qI02E">
<img src="http://rethinkdb.com/assets/images/videos/screencast.png" />
</a></p>
</div>
</description>
<pubDate>Thu, 17 Jan 2013 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-screencast</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-screencast</guid>
</item>
<item>
<title>Filesystem vulnerability identified, please update to RethinkDB 1.3.2</title>
<description>
<![CDATA[
]]>
<div><p>We identified a filesystem vulnerability this morning that allows read access
to arbitrary files on the filesystem through the web administation tool.</p>
<p>A fix has been pushed for all platforms in RethinkDB 1.3.2, so <strong>please update
immediately</strong>: see the <a href="http://rethinkdb.com/docs/install">install page</a> for instructions.</p>
<h1 id="what-caused-this-vulnerability">What caused this vulnerability?</h1>
<p>The built-in web server has a whitelist to allow serving only a very specific
set of files required to run the web administration tool (see the <a href="https://github.com/rethinkdb/rethinkdb/blob/next/src/clustering/administration/http/server.cc">whitelist</a>
on Github).</p>
<p>However, we inadvertently disabled the whitelist during development. One of our
engineers noticed this during a procedural code review (a policy recently
introduced after the release of RethinkDB 1.2) and we implemented <a href="https://github.com/rethinkdb/rethinkdb/commit/b8dc4af9215b0bf6943114c3f84d8ee50ede858f">a fix</a>
immediately.</p>
</div>
</description>
<pubDate>Tue, 15 Jan 2013 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/filesystem-vulnerability</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/filesystem-vulnerability</guid>
</item>
<item>
<title>RethinkDB in under two minutes</title>
<description>
<![CDATA[
]]>
<div><p>This short video does a quick walkthrough of RethinkDB and its key
features. The video showcases the query language, the administration
UI, sharding, replication, and other important capabilities of
RethinkDB, all in less than two minutes. If you’d like to get a quick
sense for what RethinkDB feels like, check it out!</p>
<p><a href="https://www.youtube.com/watch?v=qKPKsBNw604">
<img src="http://rethinkdb.com/assets/images/videos/what-is-rethinkdb.png" />
</a></p>
</div>
</description>
<pubDate>Sun, 13 Jan 2013 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/what-is-rethinkdb</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/what-is-rethinkdb</guid>
</item>
<item>
<title>RethinkDB 1.3 is out, now available on OS X</title>
<description>
<![CDATA[
]]>
<div><p>We’ve released RethinkDB 1.3 (<a href="http://www.youtube.com/watch?v=ZSExdX0tds4">Metropolis</a>) which has a large number of
enhancements, and adds support for OS X and several other platforms. As of the
1.3 release, the server can now be installed on the following platforms:</p>
<ul>
<li>OS X Lion and above (&gt;= 10.7)</li>
<li>32-bit and 64-bit Ubuntu Lucid and above (&gt;= 10.04)</li>
</ul>
<p>Porting to OS X was one of the most requested features, and allows OS X users
to try RethinkDB without installing a Linux VM. The story of long and arduous
adventure of overcoming the many differences between the Darwin and Linux
kernels and their surrounding environments remains to be told by <a href="https://github.com/srh">@srh</a>.</p>
</div>
</description>
<pubDate>Thu, 20 Dec 2012 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-13-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-13-release</guid>
</item>
<item>
<title>Call for comments: RethinkDB wire protocol</title>
<description>
<![CDATA[
]]>
<div><p>When version 1.2 was released, we were <a href="http://news.ycombinator.com/item?id=4763879">surprised (and delighted) by how many
people</a> asked about writing RethinkDB clients in their language.
RethinkDB’s query language (RQL) is encoded using Google’s Protocol Buffers,
which are available in many languages. So writing a client should have been
relatively easy, at least in theory. In practice, <a href="https://github.com/rethinkdb/rethinkdb/blob/1451f83cabf412484d2db2e9a49ab6f30c41d0c5/src/rdb_protocol/query_language.proto">our first Protobuf spec</a>
was a mess. It accreted a number of hacks and inconsistencies as the scope of
the query language grew, and the scramble to release didn’t help matters.</p>
</div>
</description>
<pubDate>Fri, 30 Nov 2012 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-wire-protocol-call-for-comments</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-wire-protocol-call-for-comments</guid>
</item>
<item>
<title>RethinkDB&#39;s first community client driver is for Haskell</title>
<description>
<![CDATA[
]]>
<div><p>Thanks to <a href="https://github.com/atnnn">Etienne Laurin</a>, there is now a <strong>Haskell client for
RethinkDB</strong>: check out the <a href="http://permalink.gmane.org/gmane.comp.lang.haskell.cafe/101764">release announcement</a> on Haskell-Cafe.</p>
<p>The first version of the protocol definition is arcane and undocumented (a <a href="https://github.com/rethinkdb/rethinkdb/wiki/protobuf_rfc_raw_spec">new
spec proposal</a> is in the works), so he took on the daunting task of reverse
engineering <a href="http://rethinkdb.com/docs/guides/drivers/">the existing published drivers</a>. Etienne and is the first
community member to release a RethinkDB community driver.</p>
</div>
</description>
<pubDate>Wed, 28 Nov 2012 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-first-community-client-driver-is-for-haskell</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-first-community-client-driver-is-for-haskell</guid>
</item>
<item>
<title>Answers to common questions about RethinkDB</title>
<description>
<![CDATA[
]]>
<div><p><strong><em>Note: this is a blog post from November 2012, and much of the information
here is outdated. RethinkDB has <a href="http://rethinkdb.com/docs/install">official packages</a> for Ubuntu,
Centos, Debian, and OS X (both prebuilt and via Homebrew); current versions of
RethinkDB use a <a href="http://rethinkdb.com/docs/driver-spec/">JSON-based protocol</a> rather than Protobufs; in
addition to the official client drivers for Python, Ruby and JavaScript, we
have <a href="http://rethinkdb.com/docs/install-drivers">community-supported drivers</a> for a variety of languages
including C#, Clojure, Dart, Go, Haskell, Java, Lua, Perl, PHP and Scala;
RethinkDB has <a href="">geospatial support</a>; and while RethinkDB supports “upserts,”
the <a href="http://rethinkdb.com/api/javascript/insert">insert</a> command now uses a different syntax.</em></strong></p>
<p>We received a lot of questions in past few days since <a href="http://news.ycombinator.com/item?id=4763879">our release</a>. While
my colleagues are busy expanding <a href="http://rethinkdb.com/docs/install">support for other Linux distros</a>,
<a href="https://github.com/rethinkdb/rethinkdb">squashing bugs</a>, and improving the <a href="http://rethinkdb.com/docs">documentation</a>), I thought
I’d use this time to answer some of the most common questions we received.</p>
</div>
</description>
<pubDate>Fri, 16 Nov 2012 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/answers-to-common-questions</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/answers-to-common-questions</guid>
</item>
<item>
<title>RethinkDB challenge: find a bug, get a job</title>
<description>
<![CDATA[
]]>
<div><h1 id="the-challenge">The challenge</h1>
<p>Follow the <a href="http://rethinkdb.com/docs/install/">installation instructions</a> to set up the server. Then, in
a language of your choice, write an automated fuzzer that sends randomized
traffic to the database server with the purpose of discovering a crash. The
fuzzer can use <code class="highlighter-rouge">rethinkdb admin</code> to reshard or replicate the database, one or
more rethinkdb clients to send randomized queries, direct TCP access to send
faulty traffic to the server, or a combination of approaches. We will consider
all candidates whose fuzzer manages to expose a server crash.</p>
</div>
</description>
<pubDate>Thu, 15 Nov 2012 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/challenge</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/challenge</guid>
</item>
<item>
<title>RethinkDB is out: an open-source distributed database</title>
<description>
<![CDATA[
]]>
<div><p>There are <a href="http://www.mongodb.org/">many</a> <a href="http://basho.com/">exciting</a> <a href="http://couchdb.apache.org/">database</a> products that make
developing scalable applications much, much friendlier and easier. After three
years of work, our humble contribution to the field is out. RethinkDB is built
to store JSON documents, and scale to multiple machines with very little
effort. It has a pleasant query language that supports really useful queries
like table joins and group by, and is easy to setup and learn.</p>
</div>
</description>
<pubDate>Fri, 09 Nov 2012 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-12-release</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-12-release</guid>
</item>
<item>
<title>RethinkDB internals: Patching for fun and throughput</title>
<description>
<![CDATA[
]]>
<div><p>A central challenge in developing a high performance database is to maximize
the efficiency at which hardware resources are used. By implementing a new
optimization in how RethinkDB handles disk writes - the patch log - we were
able to achieve an additional 50% increase in query throughput. The following
graph compares the sustainable performance of RethinkDB for a mixed read/write
workload (roughly 10% write operations) with and without the patch log. In both
cases we configured the system to be bound by the disks’ write bandwidth.</p>
<p><img src="http://rethinkdb.com/assets/images/posts/2011-06-20-rethinkdb-internals-patching-for-fun-and-throughput-1.png" alt="RethinkDB internals: Patching for fun and throughput" /></p>
</div>
</description>
<pubDate>Mon, 20 Jun 2011 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-internals-patching-for-fun-and-throughput</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-internals-patching-for-fun-and-throughput</guid>
</item>
<item>
<title>You should make it a portal</title>
<description>
<![CDATA[
]]>
<div><p>In a recent <a href="http://www.entrepreneur.com/article/219377">interview</a> with Entrepreneur magazine, Paul Graham said
something that reminded me of an interesting story:</p>
<p><em>When Google started, there were eight to 10 successful established search
engines already, and search was so uncool that they were trying to get people
to call them “portals”.</em></p>
<p>I landed my first real programming job at a long defunct dot-com startup when I
was a senior in high school in 1999. We were building an EBay for home
improvement. Homeowners would post home improvement projects, and contractors
would bid on them. We were going to take a cut out of each job.</p>
</div>
</description>
<pubDate>Thu, 24 Mar 2011 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/you-should-make-it-a-portal</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/you-should-make-it-a-portal</guid>
</item>
<item>
<title>On TRIM, NCQ, and Write Amplification</title>
<description>
<![CDATA[
]]>
<div><p>Alex Popescu wrote a <a href="http://nosql.mypopescu.com/post/3859565367/rethinkdb-and-ssd-write-performance">blog post</a> asking some questions about RethinkDB and
SSD performance. There is a related Twitter conversation happening <a href="http://twitter.theinfo.org/47379240475295745">here</a>.
There are two fundamental questions:</p>
<ul>
<li>In which cases does SSD performance begin to degrade over time?</li>
<li>How does the TRIM command affect performance degradation?</li>
</ul>
<p>The questions are very deep and I cannot do them justice in a single blog post,
but I decided to post a quick write-up as a start.</p>
</div>
</description>
<pubDate>Tue, 15 Mar 2011 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/on-trim-ncq-and-write-amplification</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/on-trim-ncq-and-write-amplification</guid>
</item>
<item>
<title>RethinkDB internals: the caching architecture</title>
<description>
<![CDATA[
]]>
<div><p>A few days ago Salvatore Sanfilippo wrote about his work on a new <a href="http://groups.google.com/group/redis-db/browse_thread/thread/d444bc786689bde9">Redis
diskstore</a> – a reworking of the <a href="http://antirez.com/post/redis-virtual-memory-story.html">old VM layer</a> based on a different set of
assumptions and tradeoffs. I was very interested in the new approach because it
is very similar to the RethinkDB caching architecture in principle. When we
designed our caching layer we had a number of constraints we needed to satisfy:</p>
</div>
</description>
<pubDate>Thu, 06 Jan 2011 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-internals-the-caching-architecture</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-internals-the-caching-architecture</guid>
</item>
<item>
<title>Handling stack overflow on custom stacks</title>
<description>
<![CDATA[
]]>
<div><p>On my computer, the callstack of a new process is around 10MB [1]. Modern
operating system automatically reserve some amount of virtual memory and
install protections on the page below the stack to create a segmentation fault
on stack overflow. This ensures that a stack overflow won’t go corrupting
random parts of memory.</p>
<p>We want to have a lot of coroutines, so they should have smaller stacks, maybe
16 or 64KB. This makes stack overflow an even greater possibility, but at the
same time, coroutines implemented in user space don’t get this checking for
free–we have to build it ourselves. In the process, we can even do better: we
can give some information about the coroutine which crashed.</p>
</div>
</description>
<pubDate>Fri, 31 Dec 2010 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/handling-stack-overflow-on-custom-stacks</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/handling-stack-overflow-on-custom-stacks</guid>
</item>
<item>
<title>Making coroutines fast</title>
<description>
<![CDATA[
]]>
<div><p>Previously, I wrote about <a href="http://rethinkdb.com/blog/improving-a-large-c-project-with-coroutines">using coroutines in RethinkDB</a>. Coroutines are a
nice alternative to callbacks because they are easier to program in, and they
are a nice alternative to threads because of their greater performance. But how
fast are they?</p>
<p>Just using an off-the-shelf library like libcoroutine isn’t as fast as you
might think. The graph below shows the huge performance degradation of a naive
implementation of coroutines (the short red bar) compared to the old callback-
based code (the blue bar on the left). But with the right set of optimizations,
we can recover a level of performance about equal to the non- coroutine
version. With these optimizations, throughput is recorded as the pink bar on
the right, which is within the margin of error of the original version.</p>
<p><img src="http://rethinkdb.com/assets/images/posts/2010-12-23-making-coroutines-fast-1.png" alt="Making coroutines fast" /></p>
</div>
</description>
<pubDate>Thu, 23 Dec 2010 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/making-coroutines-fast</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/making-coroutines-fast</guid>
</item>
<item>
<title>Improving a large C++ project with coroutines</title>
<description>
<![CDATA[
]]>
<div><p>At the core of RethinkDB is a highly parallel B-tree implementation. Due to our
performance requirements, it is too expensive to create a native thread for
each request. Instead, we create one thread per CPU on the server (logical CPU
in the case of hyperthreading) and use cooperative concurrency within a thread.</p>
<p>A single thread will have multiple logically concurrent units of control,
taking turns when a unit needs to block. Blocking needs to take place
ultimately for either I/O–waiting for information from the network or disk, or
waiting to be notified that sending information there has completed–or for
coordination with other threads. On top of this, we implemented higher-level
abstractions which also block.</p>
</div>
</description>
<pubDate>Mon, 20 Dec 2010 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/improving-a-large-c-project-with-coroutines</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/improving-a-large-c-project-with-coroutines</guid>
</item>
<item>
<title>Distributed software testing</title>
<description>
<![CDATA[
]]>
<div><h1 id="about-me">About me</h1>
<p>A word about me first: My name is Daniel Mewes, and I just came over to
California to work at RethinkDB as an intern for the oncoming months. After
having been an undergraduate student of computer science at Saarland
University, Germany for the last two years, I am exited to work on an
influential real-world project at RethinkDB now. Why RethinkDB? Not only does
RethinkDB develop an exciting and novel piece of database technology, RethinkDB
also provides the great “startup kind” of work experience.</p>
<h1 id="software-testing">Software testing</h1>
<p>In complex software systems like database management systems, different
components have to work together. These components can interact in complex
ways, yielding a virtually infinite number of possible states that the overall
system can reach. This has consequences for software testing. As bugs in the
code might only show up in a small fraction of the possible states,
comprehensive testing of the system is essential. Encapsulation of code and
data into objects can reduce the number of states that must be considered for
any single piece of code. However an extremely large number of states can still
remain, especially when considering parallel systems. Reliability requirements
for database management systems on the other hand are stringent. Losing or
corrupting data due to bugs in the program cannot be tolerated here.</p>
</div>
</description>
<pubDate>Thu, 09 Dec 2010 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/distributed-software-testing</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/distributed-software-testing</guid>
</item>
<item>
<title>Multi slicing</title>
<description>
<![CDATA[
]]>
<div><p>The basic data structure that powers databases is called a B-tree. This is
where you actually store the user’s data. B-trees are great because you can put
huge amounts of data in them and access remains fast. In fact, the naive
strategy of putting a whole data set into one B-Tree doesn’t break down because
of access time. It does, however, break down when you try to support a
multiaccess paradigm.</p>
<p>Six years ago, multiaccess was nice. Now that processors have multiple cores,
it’s crucial. Four cores fighting over one B-tree means a lot of wasted
processor time. In a multiaccess scheme, different cores can concurrently
access data. This gets tricky. You can go looking for a piece of data only to
find that someone has moved it since you started; that’s trouble: for all you
know it was deleted. You could start the search over, but without guarantees–
maybe you’ll get unlucky and it will be plucked out from under you again. How
do you know when to give up? Your database is now blazingly fast, but also
broken. We handle this with a locking scheme.</p>
</div>
</description>
<pubDate>Wed, 25 Aug 2010 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/multi-slicing</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/multi-slicing</guid>
</item>
<item>
<title>Make debugging easier with custom pretty-printers</title>
<description>
<![CDATA[
]]>
<div><h1 id="whats-good-about-pretty-printers">What’s good about pretty-printers</h1>
<p>One of the best features in Gdb 7.0+ is the ability to write pretty-printers in
Python. Instead of printing a vector and seeing this:</p>
<div class="highlighter-rouge"><pre><code class="highlight"><span class="err">$</span><span class="mi">1</span> <span class="o">=</span> <span class="p">{</span>
<span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">_Vector_base</span><span class="o">&lt;</span><span class="kt">int</span><span class="p">,</span><span class="n">std</span><span class="o">::</span><span class="n">allocator</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="o">&gt;&gt;</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">_M_impl</span> <span class="o">=</span> <span class="p">{</span>
<span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">allocator</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;&gt;</span> <span class="o">=</span> <span class="p">{</span>
<span class="o">&lt;</span><span class="n">__gnu_cxx</span><span class="o">::</span><span class="n">new_allocator</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;&gt;</span> <span class="o">=</span> <span class="p">{</span><span class="o">&lt;</span><span class="n">No</span> <span class="n">data</span> <span class="n">fields</span><span class="o">&gt;</span><span class="p">},</span> <span class="o">&lt;</span><span class="n">No</span> <span class="n">data</span> <span class="n">fields</span><span class="o">&gt;</span><span class="p">},</span>
<span class="n">members</span> <span class="n">of</span> <span class="n">std</span><span class="o">::</span><span class="n">_Vector_base</span><span class="o">&lt;</span><span class="kt">int</span><span class="p">,</span><span class="n">std</span><span class="o">::</span><span class="n">allocator</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="o">&gt;::</span><span class="n">_Vector_impl</span><span class="o">:</span>
<span class="n">_M_start</span> <span class="o">=</span> <span class="mh">0x0</span><span class="p">,</span>
<span class="n">_M_finish</span> <span class="o">=</span> <span class="mh">0x0</span><span class="p">,</span>
<span class="n">_M_end_of_storage</span> <span class="o">=</span> <span class="mh">0x0</span>
<span class="p">}</span>
<span class="p">},</span> <span class="o">&lt;</span><span class="n">No</span> <span class="n">data</span> <span class="n">fields</span><span class="o">&gt;</span><span class="p">}</span>
</code></pre>
</div>
<p>I can now see this:</p>
<div class="highlighter-rouge"><pre><code class="highlight"><span class="err">$</span><span class="mi">1</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span> <span class="n">of</span> <span class="n">length</span> <span class="mi">0</span><span class="p">,</span> <span class="n">capacity</span> <span class="mi">0</span>
</code></pre>
</div>
</div>
</description>
<pubDate>Thu, 19 Aug 2010 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/make-debugging-easier-with-custom-pretty-printers</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/make-debugging-easier-with-custom-pretty-printers</guid>
</item>
<item>
<title>The benchmark you&#39;re reading is probably wrong</title>
<description>
<![CDATA[
]]>
<div><p>Mikeal Rogers wrote a <a href="http://www.futurealoof.com/posts/mongodb-performance-durability.html">blog post</a> on MongoDB performance and durability. In
one of the sections, he writes about the request/response model, and makes the
following statement:</p>
<p><em>MongoDB, by default, doesn’t actually have a response for writes.</em></p>
<p>In response, one of 10gen employees (the company behind MongoDB) made the
following comment on Hacker News:</p>
<p><em>We did this to make MongoDB look good in stupid benchmarks.</em></p>
</div>
</description>
<pubDate>Thu, 08 Jul 2010 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/the-benchmark-youre-reading-is-probably-wrong</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/the-benchmark-youre-reading-is-probably-wrong</guid>
</item>
<item>
<title>Will the real programmers please stand up?</title>
<description>
<![CDATA[
]]>
<div><p>We’ve been actively recruiting for four months now, and if there is one thing
we’ve learned, it’s that Jeff Atwood wasn’t kidding about <a href="http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html">FizzBuzz</a>.</p>
<p>Among our friends in the startup community, RethinkDB has the rep for having
the toughest interview process on the block. And it’s true - the interview
process is something we won’t compromise on. We’re prepared to turn away as
many people as it takes to build a superb development team. We wrote that much
in an earlier <a href="http://rethinkdb.com/blog/will-the-real-programmers-please-stand-up">post</a>. In the past few months we ran into people that thought
we have ridiculously high standards and are hiring rocket scientists who also
double majored in quantum mechanics and computer science. We don’t. We just
won’t hire programmers that can’t code.</p>
</div>
</description>
<pubDate>Tue, 29 Jun 2010 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/will-the-real-programmers-please-stand-up</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/will-the-real-programmers-please-stand-up</guid>
</item>
<item>
<title>Lock-free vs. wait-free concurrency</title>
<description>
<![CDATA[
]]>
<div><p>There are two types of <a href="http://en.wikipedia.org/wiki/Non-blocking_synchronization">non-blocking thread synchronization</a> algorithms -
lock-free, and wait-free. Their meaning is often confused. In lock-free
systems, while any particular computation may be blocked for some period of
time, all CPUs are able to continue performing other computations. To put it
differently, while a given thread might be blocked by other threads in a
lock-free system, all CPUs can continue doing other useful work without stalls.
Lock-free algorithms increase the overall throughput of a system by
occassionally increasing the latency of a particular transaction. Most high-
end database systems are based on lock-free algorithms, to varying degrees.</p>
<p>By contrast, wait-free algorithms ensure that in addition to all CPUs
continuing to do useful work, no computation can ever be blocked by another
computation. Wait-free algorithms have stronger guarantees than lock-free
algorithms, and ensure a high thorughput without sacrificing latency of a
particular transaction. They’re also much harder to implement, test, and debug.
The <a href="http://lwn.net/Articles/291826/">lockless page cache</a> patches to the Linux kernel are an example of a
wait-free system.</p>
</div>
</description>
<pubDate>Mon, 28 Jun 2010 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/lock-free-vs-wait-free-concurrency</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/lock-free-vs-wait-free-concurrency</guid>
</item>
<item>
<title>Why start a new database company in 2010?</title>
<description>
<![CDATA[
]]>
<div><p>We were honored to give a closing keynote talk at <a href="http://en.oreilly.com/mysql2010/">MySQL Conference &amp; Expo
2010</a>, and wanted to share the video with you. Why start a new database
company? What is RethinkDB all about? What will database technology look like
twenty years from now? In this talk we explore these questions, present some of
the exciting technology we’ve been developing at RethinkDB, and show how it
fits into our larger vision of what database systems may look like in the
future.</p>
<iframe width="640" height="360" src="https://www.youtube.com/embed/uDHc3lkr3Ns?rel=0" frameborder="0" allowfullscreen=""></iframe>
</div>
</description>
<pubDate>Fri, 16 Apr 2010 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/why-start-a-new-database-company-in-2010</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/why-start-a-new-database-company-in-2010</guid>
</item>
<item>
<title>We&#39;ve raised $1.2m to help build RethinkDB</title>
<description>
<![CDATA[
]]>
<div><p>2010 will be an incredibly exciting year for database technology. The amount of
stored information has long been increasing exponentially, presenting
unprecedented challenges for modern technology companies. Dropping RAM prices
and affordable multicore CPUs have drastically changed the hardware profile of
a typical server machine from what it was only five years ago. The emergence of
solid-state drives is about to revolutionize database systems, enabling new
kinds of applications we can barely envision today.</p>
</div>
</description>
<pubDate>Thu, 01 Apr 2010 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/weve-raised-12m-to-help-build-rethinkdb</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/weve-raised-12m-to-help-build-rethinkdb</guid>
</item>
<item>
<title>RethinkDB is switching over to Lisp</title>
<description>
<![CDATA[
]]>
<div><p><strong>April Fools! We aren’t switching to Lisp (as much as we love the language).
We couldn’t resist having a bit of fun.</strong></p>
<p>Over the past few months we’ve had many architectural discussions about the
future of database technology. It quickly became apparent to us that C++, the
language we used to develop RethinkDB, is not sufficiently expressive to build
the next-generation database product. We realized that in order to design the
database system of the future, we need to use a programming language of the
future as well.</p>
</div>
</description>
<pubDate>Thu, 01 Apr 2010 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-is-switching-over-to-lisp</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-is-switching-over-to-lisp</guid>
</item>
<item>
<title>Building a world-class team: six mistakes I made early in my career</title>
<description>
<![CDATA[
]]>
<div><p>For the past few weeks my primary job at RethinkDB has been to hire world-
class software developers. Recruiting great people is a difficult
process with at least seven components: sourcing candidates, reviewing
resumes, doing technical phone screens, conducting technical interviews,
closing candidates, extending offers, and keeping candidates happy once
they’ve joined. Each component seems simple in principle, but is very subtle
in practice. A testament to this is that all software companies aspire to hire
only the best people, but in practice very few companies achieve this goal.</p>
</div>
</description>
<pubDate>Mon, 22 Mar 2010 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/building-a-world-class-team</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/building-a-world-class-team</guid>
</item>
<item>
<title>High scalability: SQL and computational complexity</title>
<description>
<![CDATA[
]]>
<div><p>Recently there has been <a href="http://www.yafla.com/dforbes/Getting_Real_about_NoSQL_and_the_SQL_Isnt_Scalable_Lie/">a lot</a> <a href="http://cacm.acm.org/blogs/blog-cacm/50678-the-nosql-discussion-has-nothing-to-do-with-sql/fulltext">of</a> <a href="http://blogs.computerworld.com/15510/the_end_of_sql_and_relational_databases_part_1_of_3">discussion</a> on fundamental
scalability of traditional relational database systems. Many of the blog posts
on this topic give a great overview of some of the immediate issues faced by
engineers while scaling relational databases, but don’t dissect the problem in
a systematic way and with sufficient depth to get to the core issues. I’d like
to dedicate a series of blog posts to the problem of scalability and how it
pertains to relational databases.</p>
</div>
</description>
<pubDate>Fri, 05 Mar 2010 00:00:00 -0800</pubDate>
<link>http://rethinkdb.com/blog/high-scalability-sql-and-computational-complexity</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/high-scalability-sql-and-computational-complexity</guid>
</item>
<item>
<title>More on alignment, ext2, and partitioning on SSDs</title>
<description>
<![CDATA[
]]>
<div><p>In our previous <a href="http://rethinkdb.com/blog/page-alignment-on-ssds">post</a> we touched on alignment issues on solid-state drives.
Our test read different-sized blocks from various random points on a raw
device, aligned to a particular boundary. Today we’d like to expand on that
work, and discuss how other factors affect SSD read performance. In addition to
testing different block sizes and alignment boundaries, we tested two other
factors: how the drive is partitioned, and what filesystem is used.</p>
</div>
</description>
<pubDate>Tue, 20 Oct 2009 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/more-on-alignment-ext2-and-partitioning-on-ssds</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/more-on-alignment-ext2-and-partitioning-on-ssds</guid>
</item>
<item>
<title>Page alignment on SSDs</title>
<description>
<![CDATA[
]]>
<div><p>In our previous <a href="http://rethinkdb.com/blog/rethinking-b-tree-block-sizes-on-ssds">post</a> we discussed the optimal block-size for B-trees on
solid-state drives. A few people mentioned page alignment - an issue that can
cause serious performance hits on SSDs if unaccounted for. It’s a complex
topic, and we will dedicate two posts to its discussion. In this post we’ll
address alignment behavior while reading directly from the block device. In the
next post, we’ll talk about partitioning the drive, and the effects of reading
from the filesystem instead of reading from the device directly.</p>
</div>
</description>
<pubDate>Thu, 08 Oct 2009 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/page-alignment-on-ssds</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/page-alignment-on-ssds</guid>
</item>
<item>
<title>Rethinking B-tree block sizes on SSDs</title>
<description>
<![CDATA[
]]>
<div><p>One of the first questions to answer when running databases on SSDs is what
B-tree block size to use. There are a number of factors that affect this
decision:</p>
<ul>
<li>The type of workload</li>
<li>I/O time to read and write the block size</li>
<li>The size of the cache</li>
</ul>
<p>That’s a lot of variables to consider. For this blog post we assume a fairly
common OLTP scenario - a database that’s dominated by random point queries. We
will also sidestep some of the more subtle caching effects by treating the
caching algorithm as perfectly optimal, and assuming the cost of lookup in RAM
is insignificant.</p>
</div>
</description>
<pubDate>Mon, 05 Oct 2009 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinking-b-tree-block-sizes-on-ssds</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinking-b-tree-block-sizes-on-ssds</guid>
</item>
<item>
<title>Rebench: cutting through the myths of I/O performance</title>
<description>
<![CDATA[
]]>
<div><p>A very wise systems programmer once told me: “Don’t guess. Measure.” Since
then, I’ve learned the hard way that guessing too much about performance is
death by a thousand cuts. For RethinkDB, dozens of factors for I/O alone
affect performance (not to mention memory, buses, caches, and CPU cores).</p>
</div>
</description>
<pubDate>Fri, 02 Oct 2009 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rebench-cutting-through-the-myths-of-io-performance</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rebench-cutting-through-the-myths-of-io-performance</guid>
</item>
<item>
<title>RethinkDB performance data</title>
<description>
<![CDATA[
]]>
<div><p>It’s been a busy and exciting week since we announced RethinkDB. Of all the
feedback we received, the most common request was for performance numbers.
Before the launch our top priority was correctness. We spent most of our time
testing RethinkDB with Wordpress and adding the missing features. As a result,
performance suffered. In the past week we tuned the engine back up to high
performance. We’re still far from finished with the improvements we want to
make, but we feel that we’ve reached a level of performance we can be proud to
display.</p>
</div>
</description>
<pubDate>Wed, 12 Aug 2009 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-performance-data</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-performance-data</guid>
</item>
<item>
<title>RethinkDB: a new kind of database</title>
<description>
<![CDATA[
]]>
<div><p>Today, we’re ready to announce <a href="http://www.rethinkdb.com">RethinkDB</a> – a new kind of database. It’s
been a winding road. For two years, Mike, Leif, and I have been thinking
independently on how to bring a breath of fresh air to the database world.
Three months ago, we came together to form a company and bring our ideas to
reality. In these three months, we’ve raised seed funding from <a href="http://www.ycombinator.com">Y
Combinator</a>, moved to California, and built a MySQL plugin that implements
the core of our vision – a storage engine redesigned for the modern world.
With the exception of storage technology, database design has always been
beautiful. Now, with dropping costs of storage, the advent of solid state
drives, and advances in functional data structures theory, we can finally
replace that last messy component of database management systems with an
elegant, beautiful solution.</p>
</div>
</description>
<pubDate>Fri, 24 Jul 2009 00:00:00 -0700</pubDate>
<link>http://rethinkdb.com/blog/rethinkdb-a-new-kind-of-database</link>
<guid isPermaLink="true">http://rethinkdb.com/blog/rethinkdb-a-new-kind-of-database</guid>
</item>
</channel>
</rss>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment