I have been using RethinkDB for a while now (although mostly for small side projects + maintaining the Go driver <a href="https://github.com/dancannon/gorethink" rel="nofollow">https://github.com/dancannon/gorethink</a>) and have really enjoyed it, having a functional query language is quite refreshing. The recent introduction of change feeds are also really cool, building a realtime app with websockets was surprisingly easy.<p>Honestly I would recommend RethinkDB to anybody looking to start a new (small-medium sized) project. While there are some small performance issues this is to be expected for a project at this early stage and after seeing how the RethinkDB team works I am confident that these will be sorted pretty quickly.
We have used RethinkDB in production for a handful of months now. 100M docs, 250 GB data spread out on two servers.<p>We added it to the mix because it got increasingly difficult to tune SQL queries involved in building API responses, especially for endpoints that needed to pull data from many tables.<p>Our limited experience of MySQL operations was also a factor. We're on 5.5 and couldn't do some table operations that seemed promising without service disruptions. There were solutions to perform the actions we wanted without downtime but they scared us a bit. We also looked into upgrading to 5.6 or MariaDB but that seemed like it would take a long time and need much testing, while there were no guarantees that we would see performance gains.<p>We looked for alternative solutions and found RethinkDB. We reused the parts that serialize data for the API and put the resulting documents in RethinkDB. Then we had our API request handlers pull data from there instead of from MySQL and added indexes to support various kinds of filtering, pagination, and so on. We built this for our most problematic endpoint and got the two-server cluster up and running in about a week, tried it out on employees for another week, and then enabled it for everyone (with the option to quickly fall back to pulling data from MySQL).<p>This turned out to work well and we saw good response times, so we did the same thing for other endpoints.<p>There's some complexity involved in keeping RethinkDB docs up to date with MySQL (where writes still go) but nothing extreme and we haven't had many sync issues.<p>RethinkDB has been rock solid and it's a joy to operate.
Things I love about RethinkDB as a NodeJS dev:<p>- first class support for JS bindings, unlike mongoose which wraps the super low level mongodb js library into something palatable but crashes in a horribly undebuggable way.<p>- server-side joins<p>- a nice web UI for monitoring and running queries packaged up with the service<p>- public docker images that are super simple to run<p>- easy clustering
From RethinkDB docks [1], I am still a bit confused how this locking system works for read/write and also a bit skeptical regarding their claim that 'in most cases writes can be performed essentially lock-free'.<p>I am using MongoDB and didn't have many issues when my databases had 120,000 documents either, the problem began when we hit the millions... The combination of write locks and our need for dynamic queries (meaning: we can't index) made the database the worst performance bottleneck in our system by far. Although I must be honest that we haven't yet tried MongoDB's new 3.0 version that promises a boost in performance [2] and also has 'document-level locking and compression' [3]<p>Is anybody aware of any benchmark that perform random writes (inserts/updates) and non-indexed reads for RethinkDB? (Is it even a common use scenario, anyways?)<p>[1] <a href="http://rethinkdb.com/docs/architecture/#how-does-rethinkdb-execute-queries" rel="nofollow">http://rethinkdb.com/docs/architecture/#how-does-rethinkdb-e...</a><p>[2] <a href="http://www.mongodb.com/mongodb-3.0#performance" rel="nofollow">http://www.mongodb.com/mongodb-3.0#performance</a><p>[3] <a href="http://docs.mongodb.org/manual/release-notes/3.0/#wiredtiger-concurrency-and-compression" rel="nofollow">http://docs.mongodb.org/manual/release-notes/3.0/#wiredtiger...</a>
+1 to using RethinkDB! I'm also using RethinkDB in production, and I love it! The only issue is that you have to set up <i>persistent</i> filters via iptables in addition to having an authKey. They do have a guide[0] for that, however they do not provide any instructions for ensuring that the filters on iptables stay up, or how to restore them if they are temporarily wiped out :/<p>[0] <a href="http://rethinkdb.com/docs/security/" rel="nofollow">http://rethinkdb.com/docs/security/</a>
I've been using/following RethinkDB since I started as Lavaboom's CTO. It's been a smooth ride so far, and the occasional perf improvements are always welcome. Some aspects of the database are especially lovely, like the web admin or painless deployments of new nodes, especially if you're using Docker.<p>Shameless plug (we've just went open sourced most of our services): <a href="https://www.lavaboom.com/" rel="nofollow">https://www.lavaboom.com/</a>
We use RethinkDB in production and our main frustration lies around the lack of automatic failover. We're looking forward to 2.0, which is supposed to bring automatic failover (using Raft for consensus) to RethinkDB.
Is anyone using RethinkDB as a "lightweight" Business Intelligence / Analytics / Datawharehouse store? (Maybe for use cases like Amazon Redshift?)<p>It seems like there could be a sweet spot of their nice query language, schemaless, and easy scaling for moderate size data sets?<p>I'm kinda tired of having to go all in on a big hadoop-ecosystem just to figure out average X to Y in a dataset....
I've always wondered what's the best way to integrate a database engine with the application.<p>1) Use a middleware/ORM/Whatever which abstracts away the query-lang of the db, and provides a pluggable multi-db support<p>2) Just use native db query language with all exclusive features of the engine.<p>Companies like workshape.io, why do they prefer the latter?
I see him here and Reddit every once in a while, but there is a cool client-side encrypted note taking app, Turtl, using Common Lisp and RethinkDB server-side, and what was node-webkit client-side. Very cool, everyone should check it.<p><a href="https://turtl.it/docs/server/running" rel="nofollow">https://turtl.it/docs/server/running</a><p><a href="http://www.reddit.com/r/lisp/comments/1mkxp2/turtl_clientside_encrypted_browser_addon_for/" rel="nofollow">http://www.reddit.com/r/lisp/comments/1mkxp2/turtl_clientsid...</a><p>Not a dedicated user, but I have been playing with this dude's CL work and I like his approach and attitude. Maybe thought people would want to see a self-hosted RethinkDB proj.
I'm also working on a noSQL database. What I'm struggling with is the abstraction for searches/filters. For example, if you want to get all books with "beginner" in the title, in SQL it would look something like:<p><pre><code> "SELECT * FROM books WHERE title LIKE %beginner%"
</code></pre>
Where in no-SQL it would look like<p><pre><code> book.filter({title: ["like", "beginner"]});
</code></pre>
Any ideas on how to abstract the filtering in a more clear way?
I'm a relative newcomer to the NoSQL scene and have been using RethinkDB for a couple of sideprojects. The IRC channel (#rethinkdb on FreeNode) is really second-to-none - the people on there are incredibly friendly and patient when answering what are probably obvious questions.
I use RethinkDB for <a href="http://soopara.com" rel="nofollow">http://soopara.com</a> with PubSub. <a href="http://rethinkdb.com/docs/publish-subscribe/python/" rel="nofollow">http://rethinkdb.com/docs/publish-subscribe/python/</a>