Theopen-sourcedatabase
fortherealtimeweb.
Source: http://googledrive.blogspot.com/2014/06/newdocssheetsslides.html
Building realtime apps is hard
It’s hard to keep track of state in realtime architectures.
Realtime web
app server
Realtime web
app server
Mobile app server
Message queue
Database cluster
Queues communicate
state and messages
between servers.
Building realtime apps is hard
Polling data to keep track of updates is cumbersome.
Adding new realtime functionality keeps getting harder.
Routing realtime messages vs. broadcasting messages.
It’s hard to keep track of state in realtime architectures.
What is RethinkDB?
• Open source database for
building realtime web apps
• NoSQL database that stores
schemaless JSON documents
• Distributed database that is easy
to scale
Built for realtime apps
RethinkDB lets you subscribe to change notifications
on database queries.
r.table(‘users’).changes() # Opens a changefeed on a table
Subscribe to changes on the ‘users’ table:
No more polling: the database pushes changes to your app,
with a live stream of updates.
Built for realtime apps
Changefeeds let you build scalable, realtime apps.
Realtime web
app server
Realtime web
app server
Mobile app server
RethinkDB cluster
Each server subscribes to
a RethinkDB changefeed.
Servers are stateless, and
scale easily (just open a
changefeed!)
Built for realtime apps
Changefeeds let you build scalable, realtime apps:
• Collaborative web and mobile apps
• Multiplayer games
• Streaming analytics apps
• Realtime marketplaces
• Connected devices
Querying RethinkDB
r.table(‘users’)
.pluck(‘last_name’)
.distinct().count()
Count unique last names with ReQL:
Querying RethinkDB
r.table(‘users’)
.pluck(‘last_name’)
.distinct().count()
Count unique last names with ReQL:
Access a database table
Querying RethinkDB
r.table(‘users’)
.pluck(‘last_name’)
.distinct().count()
Count unique last names with ReQL:
Isolate a document property
Querying RethinkDB
r.table(‘users’)
.pluck(‘last_name’)
.distinct().count()
Count unique last names with ReQL:
Consolidate duplicate values
Querying RethinkDB
r.table(‘users’)
.pluck(‘last_name’)
.distinct().count()
Count unique last names with ReQL:
Count the number of items
Understanding ReQL
RethinkDB’s query language embeds natively into
your programming language.
• Compose queries by chaining
• Queries are executed and
distributed on the server
• Python, Ruby, JavaScript, and 20+
other languages supported
What can you do with ReQL?
• Transformations: map, orderBy, skip, limit,
slice
• Aggregations: group, reduce, count, sum,
avg, min, max, distinct, contains
• Documents: row, pluck, without, merge,
append, difference, keys, hasFields, spliceAt
• Writing: insert, update, replace, delete
• Control: forEach, range, branch, do,
coerceTo, expr
Changefeeds work on queries
r.table(‘user_profiles’)
.filter(r.row(‘likes’).gt(30))
.changes()
Get notified when a user profile gets over 30 likes:
Changefeeds work on queries
r.table(‘user_profiles’)
.filter(r.row(‘likes’).gt(30))
.changes()
Get notified when a user profile gets over 30 likes:
Changefeeds work on queries
r.table(‘user_profiles’)
.filter(r.row(‘likes’).gt(30))
.changes()
Get notified when a user profile gets over 30 likes:
Clients can subscribe to this
realtime stream of updates.
Example: realtime questions
questions.rethinkdb.com
Let’s play with changefeeds:
Check out the code yourself: github.com/mglukhovsky/realtime-questions
Example: realtime questions
Questions server Questions server Dashboard server
RethinkDB cluster
Changes are pushed to each stateless app server.
Advancing the realtime web
The push access model simplifies realtime architecture.
One source of truth makes it easy to manage state.
RethinkDB is the first database for the realtime web.
Polling for data is slow, cumbersome, hard to maintain.
A realtime, open-source backend
for JavaScript apps
Horizon makes it easy to quickly prototype
your web and mobile app, and then scale it
to millions of users.
Learn more about RethinkDB
Get started: rethinkdb.com/install
Read the docs: rethinkdb.com/docs
Follow on Twitter: @rethinkdb

Database Camp 2016 @ United Nations, NYC - Michael Glukhovsky, Co-Founder, RethinkDB