Realtime Web Apps
with
Horizon + RethinkDB
by Zak Burki
16th Jun 2016
Horizon + RethinkDB
- What is RethinkDB?
- What's this Horizon?
- Why Use any of it?
RethinkDB
- RethinkDB is an opensource NOSQL Database (like MongoDB)
- Documents Store (Objects)
- Built using C++ for speed
- High Availability and Distributed
- Designed to push changes into the queries for real-time updates (instead of traditional polling)
- Supports Table Joins (SQL style)!
RethinkDB
Official Drivers Available for :
- JavaScript
- Ruby
- Python
- Java
Unofficial Drivers Available for many other Programming Languages. (Go, PHP, C#, Haskell, Clojure, Elixir etc.)
ReQL
SQL:
ReQL:
r.table("posts")
.filter(function (post) {
return r.table("users")
.filter(function (user) {
return user("id").eq(post("authorId"))
}).count().gt(0)
})
SELECT * FROM users
WHERE
SELECT *
FROM posts
WHERE EXISTS
(SELECT * FROM users
WHERE posts.author_id
= users.id)
What is Horizon?
Horizon is a small lightweight JavaScript Layer written on-top of RethinkDB to give direct access to the DB via a set of APIs.
Well, in conjunction with changefeeds, you can write a real-time 'severless' application directly using JavaScript front-end web and mobile frameworks.
And why do I care?
Ok - I lied.
It's not really 'serverless'.
Horizon consists of 3 parts:
- Horizon CLI
- Horizon Client
- Horizon Server (middleware)
Sample
hz("airlines").fetch().subscribe(
result => console.log('Result:', result),
(err) => console.log(err),
() => {
console.log('Results fetched')
}
);
horizon.onReady().subscribe(() => console.log("Connected to Horizon server"))
horizon.onDisconnected().subscribe(() => console.log("Disconnected from Horizon server"))
horizon.connect();
Horizon Pros
-
Built in social authentication
-
Scales better than Meteor
-
Is Free to Use (unlike Firebase)
-
Extendible using most languages when you need more complex business logic.
Horizon Cons
To be continued...
Any Questions?
twitter: @zakburki
Realtime Web Apps - Horizon + Rethink
By Zak Burki
Realtime Web Apps - Horizon + Rethink
Real-time capabilities of RethinkDB
- 841