A full-stack RethinkDB integration with Meteor. With livequery, publish/subscribe, latency compensation and client-side cache.
Work in progress. Not ready for its prime-time.
meteor add simple:rethink
Demo app: https://github.com/Slava/meteor-rethinkdb-demo
This packages aims to provide a first-class experience working with RethinkDB building full-stack real-time web and mobile apps on the Meteor framework.
The goals and plans of this package:
- Raw access to RethinkDB on the server, no ORMs
- Client-side cache accessible with the RethinkDB query language (ReQL)
- Use Meteor's publications/subscriptions model
- Take advantage of Meteor's "Latency Compensation" propeties (optimistic client-side updates without waiting for the server to respond)
- User accounts stored in RethinkDB instead of MongoDB (planned)
Adding a package is as simple as running the following command in your Meteor app's directory:
meteor add simple:rethink
The package will connect to a RethinkDB instance by looking at the RETHINK_URL
environment variable.
env RETHINK_URL=rethinkdb://user:password@hostname:port/database meteor run
If you have an instance of RethinkDB running locally on your development
computer, the package will automatically connect to the test db on localhost:28015.
To install and run RethinkDB on a Mac:
$ brew update
$ brew install rethinkdb
$ rethinkdb
When using new Mongo.Collection('items'), the collection is automatically
created in MongoDB if it does not exist. With RethinkDB, you must create the table
yourself beforehand. You can do so in the web UI:
Then declare the table:
Players = new Rethink.Table('players');Query the data using the Javascript API for ReQL:
console.log('Number of players:', Players.count().run());
console.log('All players:', Players.run().toArray());
console.log('Updating players:', Players.filter({team: 'Knicks'}).update({city: 'NYC'}).run());.fetch() is a shortcut for .run().toArray(), fetching the documents without
turning the cursor into an array:
console.log('All players:', Players.fetch());Construct more complex queries with Rethink.r:
var r = Rethink.r;
// Top Players
Players.orderBy(r.desc('score')).limit(3).fetch();Currently, observations (the type of queries you return from publish functions)
can only be point queries (.get(primaryKey)) or orderBy & limit queries (.orderBy({ index: 'id' }).limit(4)).
Since the package relies on the RethinkDB node driver and Reqlite to build the
package, make sure npm is available and ready for use. Then run the build
script:
./driver-source/build.shThis script will output a built version of Reqlite and driver for the client-side cache.
Build the package first, then run the tests.
./driver-source/build.sh
meteor test-packages --driver-package respondly:test-reporterCurrently this project is welcoming contributions to Reqlite, the mini-implementation of RethinkDB in browser that this package is using on the client-side for DB operations simulations. Also, this project would appreciate more tests testing out different commands.
