8 ms·
RethinkDB 1.7: hot backup, atomic set/get, 10x insert performance improvement
- xfour 13y ago+1 for the ease of export and import now! Not directly related to the new version, but speaking of upgrading previously, make sure you do the migration scripts beforehand if you have a current server. I make the mistake of upgrading and not migrating beforehand from 1.4 to 1.6 and couldn't find an version of 1.4 since all the archives were down and building from source on a VPS just wasn't happening. The Rethink team was amazing in their support of building the old version for me specifically, and if this is indicative of their dedication to user support can't wait to see this become a big success.
- coffeemug 13y agoslava @ rethink here. Thanks for the vote of confidence, and sorry for the poor experience. The product is improving very quickly, and we decided to trade off format stability for speed of development until we hit 2.0 (at which point we'll freeze the formats and put more resources into backwards compatibility).
- simcop2387 13y agoThis latest release has actually prompted me to check it out. I had been meaning to but hadn't found an exact usecase for it yet, now I'm just going to try to build something with it, though I don't know what yet. This kind of dedication to it is definitely what makes me want to check it out, you guys are doing some really great work on it.
- mey 13y agoCan anyone compare/contrast RethinkDB to CouchDB and MongoDB?
- coffeemug 13y agoYou can check out the technical comparison (http://rethinkdb.com/docs/comparisons/mongodb/ http://rethinkdb.com/docs/comparisons/mongodb/), and a more biased comparison overview (http://rethinkdb.com/blog/mongodb-biased-comparison/ http://rethinkdb.com/blog/mongodb-biased-comparison/). Hope this helps!
- alexpopescu 13y agoWhile both CouchDB and RethinkDB store JSON, the differences between them are more radical. I cannot post an as-extensive comparison as the one with MongoDB, but here are some aspects. Please keep in mind that this is not an authoritative comparison and it may contain mistakes. Plus as for many such systems, the aspects covered are in reality not that easy to be described in just a few words. Platforms: - RethinkDB: Linux, OS X - CouchDB: where Erlang VM is supported Data model: - both JSON Data access: - RethinkDB: Unified chainable dynamic query language - CouchDB: key-value, incremental map/reduce Javascript integration: - RethinkDB: V8 engine; JS expressions are allowed pretty much anywhere in the RQL - CouchDB: Spindermonkey (?); incremental map/reduce, views are JS-based Access languages: - RethinkDB: Protocol Buffers - CouchDB: HTTP Indexing: - RethinkDB: Multiple types of indexes (primary key, compound, secondary, arbitrarily computed) - CouchDB: incremental indexes based on view functions Sharding: - RethinkDB: Guided range-based sharding (supervised/guided/advised/trained) - CouchDB: - Replication: - RethinkDB - sync and async replication - CouchDB - bi-directional replication can be set between multiple CouchDB servers Multi-datancenter: - RethinkDB - Multiple DC support with per-datacenter replication and write acknowledgements - CouchDB - (?) MapReduce: - RethinkDB: Multiple MapReduce functions executing ReQL or Javascript operations - CouchDB: views are map/reduce but they need to be pre-defined Consistency model: - RethinkDB: Immediate/strong consistency with support for out of date reads - CouchDB: http://guide.couchdb.org/draft/consistency.html http://guide.couchdb.org/draft/consistency.html Atomicity: - both document level Durability: - both durable Storage engine: - RethinkDB: Log-structured B-tree serialization with incremental, fully concurrent garbage compactor - CouchDB: B-tree Query distribution engine: - RethinkDB: Transparent routing, distributed and parallelized - CouchDB: none Caching engine: - RethinkDB: Custom per-table configurable B-tree aware caching - CouchDB: none (?)
- apendleton 13y agoAre there any plans for Couch-style incrementally-computed aggregates/views in RethinkDB?
- alexpopescu 13y agoConsidering RethinkDB's secondary indexes can be defined around pretty complex ReQL expressions [1] you could already get some of it already. [1] http://rethinkdb.com/docs/pragmatic-faq/#how-do-i-take-advantage-of-secondary-indexes http://rethinkdb.com/docs/pragmatic-faq/#how-do-i-take-advan...
- RyanZAG 13y ago10x insert performance improvement seems very small considering this simple benchmark someone did: http://stackoverflow.com/questions/15151554/comparing-mongodb-and-rethinkdb-bulk-insert-performance http://stackoverflow.com/questions/15151554/comparing-mongod... MongoDB: 0m0.618s RethinkDB: 2m2.502s Although as stated in that post, this is likely because of the different fsync() policies between the two databases.
- coffeemug 13y agoThis is a bit misleading -- the performance difference between 1.6.1 and 1.7 ranges from 2x to >1000x depending on the circumstances (size of documents, durability, whether the client waits on network reply, etc.) This also doesn't account for 10-100x performance improvements on the batch insert algorithm made prior to 1.7. I suspect that RethinkDB 1.7 would be comparable to Mongo on insert performance workload described in this stack overflow thread.
- RyanZAG 13y agoIt was not deliberately misleading - it's simply the top result when doing a google search on rethinkdb and mongo performance. It's a shame that decent, general case database benchmarks are so hard to find.
- coffeemug 13y agoSorry, I meant to say that the benchmark in the release announcement is misleading (since it doesn't address all relevant issues), not the link in your comment. We're working on getting authoritative benchmarks out, but unfortunately good benchmarks are extremely time consuming (much like any science experiment).
- univerz 13y agoit would be great to see comparison with tokutek benchmark on mongodb / version with fractal tree indexes http://www.tokutek.com/2013/05/sysbench-benchmark-for-mongodb-v0-1-0-performance-update/ http://www.tokutek.com/2013/05/sysbench-benchmark-for-mongod...
- astral303 13y agoCache getting out of control and the server getting OOM killed needs to be fixed before I'd consider the database production-ready for large sets of data. https://github.com/rethinkdb/rethinkdb/issues/97 https://github.com/rethinkdb/rethinkdb/issues/97 It's a little disappointing that it has not been resolved for several releases now. Is there a target milestone for a production-ready release of RethinkDB? Is it 1.8 or 1.9?
- coffeemug 13y agoYou are absolutely right. FYI, the rationale for this decision is that people are rapidly adopting Rethink and writing applications on top of it, so we decided to allocate most development resources to nailing down ReQL as quickly as possible so people won't have to rewrite their apps. Some operations issues (like #97) unfortunately had to temporarily take a backseat. I suspect we'll be able to resolve #97 in the 1.8 release. RethinkDB will be marked production ready when it hits 2.0, though it will be ready for useful work way before that. (A huge number of people are already using it in their daily work and building important software on top of Rethink)
- astral303 13y agoThat's a reasonable rationale. Thanks!
- StavrosK 13y agoI've generally found the Rethink guys very level-headed and customer-focused. I made a feature request a year or so ago for a feature that was pretty outside the scope of a DBMS (custom memory/CPU limits for map/reduce operations) and they implemented it in a day or so, even though I was just asking if it's possible in theory. They even sent me a small care package with a hand-written note, it was great of them. Marc, the guy who sent me the package, is now one of my regular DOTA2 teammates, and he's great at that too. Major props to them, I really hope Rethink becomes as amazing as I think it will. I'll give it another spin over the weekend and write it up. Congrats on the new release, guys!
- 13y ago
- mglukhovsky 13y agoFYI-- for those looking to install on Ubuntu, we have a build problem with one of our dependencies for the web UI. We're rebuilding the packages now; this should take about half an hour on Launchpad. I'll update this comment when the new package is available. Edit: Packages have been uploaded to Launchpad, waiting in queue to build. (12PM PST)
- mglukhovsky 13y ago@atnnn confirms that Launchpad builds are now working and available-- Ubuntu packages are live.
- dkhenry 13y agoI have been working on the Java driver for rethink for a bit now and I will tell you the DB seems like an awesome mix of Mongo and Riak, Mapping objects into the DB is super easy and doing datacenter aware operations is amazingly easy.
- mglukhovsky 13y agodkhenry, still looking forward to the day I see it on Github and get to play with it! Can't wait to try it out.
- dkhenry 13y agohttps://github.com/dkhenry/rethinkjava https://github.com/dkhenry/rethinkjava
- mglukhovsky 13y agoThat's phenomenal!
- enjo 13y agoWhat's the state of that driver look like? It's literally the only thing holding me back from moving over today.
- dkhenry 13y agoRight now you should have complete functionality, but Its not fully tested and there are some "convience" methods that need to be added to some of the ReQL classes to make it mimic the official API ( for example row is not a member function of connection yet so r.update(r.row("foo")) doesn't work yet )
- InAnEmergency 13y agoThis is a really nice update. Migrating data between releases with a giant Ruby script feels like a hack each time there's an update. Insert speed has been a real annoyance. Fetching multiple keys is really nice (instead of map/filter the entire thing). And expanding pluck() to nested documents makes so much sense (I was worried ReQL would be limited to manipulating top-level documents). Overall, an exciting release. Going to upgrade and see what insert speed is like on my setup.
- InAnEmergency 13y agoFor those interested, my insert time for ~250 records (~9.2MB of JSON) went from 340 seconds to 20 seconds. Unfortunately when migrating from 1.6.2 to 1.7.1 I lost a table (not sure how) and all secondary indexes :(
- leif 13y agoFor my curiosity, where is the insert bottleneck now?
- coffeemug 13y agoWe have to investigate to know for sure, but if I had to guess it's probably in the storage engine/disk IO.
- leif 13y agoSurely your SSD has more than 800 IOPS though. Have you done any profiling?
- coffeemug 13y agoSorry, I misunderstood your question. In this specific benchmark the bottleneck is in the network and disk latency (since the benchmark sends out a batch of writes, waits for a server acknowledgement, which in hard durability mode means waiting on disk), and then sends out the next batch. When we use a benchmark that doesn't bottleneck on latency (by adding more concurrent clients, or by using noreply) the ops throughput approaches theoretical IOPS throughput of the SSD.
- KaoruAoiShiho 13y agoAre you guys aware of any rethinkdb cloud hosts that are starting up?
- coffeemug 13y agoCheck out https://www.rethinkdbcloud.com https://www.rethinkdbcloud.com. (I don't know about their current state, but it seems like an interesting service)
- ConceitedCode 13y agoI'm the main developer for RethinkDB Cloud. It's pretty rough at the moment. You can expect 1.7 instances available in the over the weekend, along with smaller shared instances, and lots of various updates. If there are any questions or if anyone wants to be apart of the Heroku add-on testing you can contact me at cam@rethinkdbcloud.com .
- kclay 13y agoScala driver for anyone https://github.com/kclay/rethink-scala https://github.com/kclay/rethink-scala, been fun working with rethink (its not updated to 1.7 changes yet)
- blantonl 13y agoDoes anyone know the status of PHP drivers for RethinkDB? I'm surprised there aren't official drivers out yet.
- coffeemug 13y agoThere is a pretty well maintained community supported PHP driver -- https://github.com/danielmewes/php-rql https://github.com/danielmewes/php-rql.
- charlieyuan 13y agoIs there a plan to fix: "If the machine is acting as a master for any shards, the corresponding tables lose read and write availability (out-of-date reads remain possible as long as there are other replicas of the shards). ... Currently, RethinkDB does not automatically declare machines dead after a timeout. This can be done by the user, either in the web UI, manually via the command line, or by scripting the command line tools." http://www.rethinkdb.com/docs/advanced-faq/#what-happens-when-a-machine-becomes-unreachab http://www.rethinkdb.com/docs/advanced-faq/#what-happens-whe...
- wildchild 13y agoIt's cool to see atomic operations. Any plans to implement multi-document ACID transactions? Just like all_or_nothing in pre 0.9 couchdb when in case of conflict update was being rejected.