The open-source database for the realtime web.
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