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

Preview:

Citation preview

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

Recommended