26 ms·
RethinkDB 2.0 is now production ready
- evo_9 12y agoNow if only Meteor would support this all would be good in the world.
- GordyMD 12y ago+1 RethinkDB's realtime capabilities would fit perfectly with Meteor.
- nileshtrivedi 12y agoHow? Meteor's server-side architecture is still oriented around polling the DB, and I believe that's because many apps are still explicit request-response oriented.
- imslavko 12y agoNo, Meteor's server-side architecture uses MongoDB's replication log that is analyzed to get updates.
- GordyMD 12y agoAs @imslavko said, when using Meteor with MongoDB (which I believe is the only production ready DB driver) it observes the oplog [1] for changes. You can use the polling observer too though. You can find out more about the LiveUpdate core project of Meteor on their site [2] - it basically says the implementation of Live Updates for each db driver is independent to what the db is capable of. Specific mention of RethinkDB and Firebase is made as DBs that are built with making realtime data something that you get for relatively little work. [1] https://github.com/meteor/meteor/blob/devel/packages/mongo/oplog_observe_driver.js https://github.com/meteor/meteor/blob/devel/packages/mongo/o... [2] https://www.meteor.com/livequery https://www.meteor.com/livequery
- jkot 12y agoCongratulations!
- nickstinemates 12y agoBig fan of RethinkDB. Use it in all of my projects these days.
- vonklaus 12y agoWhat were you using before? What are the pros and cons of the switch?
- richardwigley 12y agoIs Rethink going to stay in the community? Or is there a chance that it could be bought out? I don't want to spend time learning something and have it go private like FoundationDB. I'm assuming GNU and Apache is a good thing? How is RethinkDB licensed? The RethinkDB server is licensed under the GNU Affero General Public License v3.0. The client drivers are licensed under the Apache License v2.0. http://rethinkdb.com/faq/ http://rethinkdb.com/faq/
- danielmewes 12y agoDaniel @ RethinkDB here. As you mention, RethinkDB is fully open source so RethinkDB is always going to remain freely available.
- richardwigley 12y agoAuthoritative source of information, thanks ;-) I will evaluate it on my next project.
- vezzy-fnord 12y agoThis does not discount the possibility of a license change after a hypothetical acquisition, however. Though in that case you'll likely get a community fork branching off the upstream proprietary base.
- Shamanmuni 12y agoNo, the AGPL uses strong copyleft, so any future derivative work must be released under the same terms (and the same license or later versions if I'm not mistaken). The only possibility is to start a closed source clone that doesn't use any of the original code from zero. The cases in which the community forks a project licensed with a copyleft license (like LibreOffice) has to do with insatisfaction with the direction in which the company that owns the original trademarks is leading said project. There's no risk of closing the source code.
- coffeemug 12y ago
- _dancannon 12y agoCongratulations, been looking forward to this release for a while!
- straik 12y agoI think this a good place to say thank you for you're work on the Go Rethink driver. This is a clear written easy to follow and effective peace of code.
- _dancannon 12y agoThank you very much! I hope to have an update to the Go driver which supports RethinkDB v2.0 within a couple of hours.
- nulltype 12y agoI would like to thank you as well! I didn't really have any time to work on rethinkgo after I made the first version, thanks for doing such a good job with gorethink.
- _dancannon 12y agoJust released the latest update to the Go driver, it has some pretty big changes including the ability to connect to a RethinkDB cluster + automatic host discovery. For more information check out https://github.com/dancannon/gorethink/releases/tag/v0.7.0 https://github.com/dancannon/gorethink/releases/tag/v0.7.0.
- expando 12y agoSelling support is a great non-intrusive business model.
- ThinkBeat 12y agoExcept that it incentivises a company to build a product that requires continuing support. That can be a good thing or a bad thing.
- giaour 12y agoSelling support for terrible (but free!) software is usually known as the "MongoDB model," so it's a proven path to riches in the database market.
- coffeemug 12y ago> Except that it incentivises a company to build a product that requires continuing support. People say this a lot, but in our case we really haven't seen this incentive for a couple of reasons. Large organizations are more than happy to pay for training and development support to accelerate their time to market. It doesn't matter how polished your product is -- databases are complex enough that people are willing to pay for best practices, training, and support. Similarly, databases are pretty critical pieces of the infrastructure. If anything goes wrong, it can significantly impact the business, so people always want operational/production support. There are many enterprise services that can be built on top of the product that can be very valuable. You don't have to build a crappy product -- there are plenty of ways to monetize with a great product. Finally, a bad product will significantly limit growth of the company in the long term. There are lots of options now -- you can't get away with building a crappy product and an artificial monopoly. If you see a crappy product from a company that offers subscription support, it's probably not because of misaligned incentives. Building databases is really hard, I don't think the business model has much to do with it.
- babo 12y agoLooking forward to install it from homebrew but it's not there yet. Good to see that for python drivers PIP is already updated!
- coffeemug 12y agoIt should be out later today. We're working on it now.
- kolencherry 12y agoCongrats on the 2.0 release! Changefeeds are an incredibly powerful feature. We're looking forward to the next release with automagic failover!
- Xorlev 12y agoCongrats on the 2.0! It's been interesting to watch as a project. Do you expect that as you stabilize you'll officially support more drivers? Or are you going to leave that as a community effort?
- coffeemug 12y agoSlava @ Rethink here. We're planning to take the most well-supported community drivers under the RethinkDB umbrella (assuming the authors agree, of course). It will almost certainly be a collaboration with the community, but we'll be contributing much more to the community drivers, supporting the authors, and offering commercial support for these drivers to our customers.
- tshannon 12y agoThat's good to hear, because the Go driver has been exhaustively maintained by a single developer (https://github.com/dancannon/gorethink https://github.com/dancannon/gorethink) Dan Cannon, and I'm sure he (as well as the Go community) would love to see some support.
- thethimble 12y agoDitto regarding a java driver. It seems crazy for a database to not provide native java support.
- shockzzz 12y agoJAVA
- jwr 12y agoVery glad to hear that. I tried using RethinkDB with Clojure recently, but there are two drivers. Both are mentioned on your pages. Figuring out which driver I should use isn't a great start — so even if you don't do a lot of development, just pointing to the drivers you consider "canonical" would help.
- Fauntleroy 12y agoNow that 2.0 is production ready, will we be seeing some RethinkDB providers? A simple Heroku integration would be amazing for quickly prototyping apps with a new database technology.
- coffeemug 12y agoYou can spin up RethinkDB today with https://www.compose.io/ https://www.compose.io/ (it's surprisingly easy, and their support is awesome). It should be pretty easy to get a RethinkDB Heroku plugin based on Compose. If the community doesn't get around it, we can probably do it internally pretty easily.
- jkarneges 12y agoAs Slava mentioned, you can use Compose.io. It requires using an SSH tunnel, though, which is a little tricky in Heroku. Here's a tunnel script I made to simplify this: https://github.com/fanout/leaderboard/blob/master/tunnel.py https://github.com/fanout/leaderboard/blob/master/tunnel.py In particular, it reads the entire SSH private key as an environment variable, so you don't need to commit the key to the git repository.
- dorfsmay 12y agoWhy would I use RethinkDB instead of OrientDB?
- coffeemug 12y agoCheck out http://rethinkdb.com/faq/ http://rethinkdb.com/faq/ for details on when RethinkDB is a great choice. The short version is that if you're building realtime apps, RethinkDB is an awesome choice because it pushes data to the application (which makes building and scaling realtime apps dramatically easier).
- ScottBurson 12y agoHi Slava, the FAQ has a typo in the second sentence: "architecutre".
- coffeemug 12y agoThanks -- fixed. Will take a little bit to push the site update live.
- mmcclellan 12y agoBut ... but I expected the push to be real time. Just kidding.
- dorfsmay 12y agoDoes RethinDB has a concept of transaction? My question is actually about restoring a lost node... If a node is rebooted, will all the data for its shards going to be sent again? Or just the delta? Similarly if I have to rebuild a node from scratch, is there a way to prime it so that a massive copy of all the data in the cluster gets copied to it from the other nodes?
- coffeemug 12y ago> If a node is rebooted, will all the data for its shards going to be sent again? Or just the delta? Just the delta. We built an efficient, distributed BTree diff algorithm. When a node goes offline and comes back up, the cluster only sends a diff that the node missed. > Similarly if I have to rebuild a node from scratch, is there a way to prime it so that a massive copy of all the data in the cluster gets copied to it from the other nodes? You don't have to do that, it happens automatically. You can have full visibility and control into what's happening in the cluster -- check out http://rethinkdb.com/docs/system-tables/ http://rethinkdb.com/docs/system-tables/ for details on how this works.
- dorfsmay 12y ago> You don't have to do that, it happens automatically Well, in a past life, I used another store that did that automatically, the issue with that is that EITHER it kills the cluster because of read-congestion as it re-builds the "new" node, OR, if you limit the bandwidth for node-building, it takes for ever and a half to rebuild a node which means that you are exposed with one less shard of what was on that node. What are the chances of a filesystem snapshot to be consistent enough to be used to prime a crashed node? What about restoring backup files from other nodes?
- coffeemug 12y agoCongestion vs. time is definitely a hard problem. We've done an enormous amount of tuning to make this work, and the upcoming Raft release does even more. This part has been quite solid for a while, so I think you might have a better experience with RethinkDB than what you're used to. There is currently no other way to prime the node -- I hope we don't have to add it. This sort of functionality should work out of the box.
- mping 12y agoAnyone has some numbers on performance? I tried RethinkDB 1.x and the performance wasn't quite there yet, specially bulk import and aggregations.
- coffeemug 12y agoWe'll be publishing a performance report soon (we didn't manage to get it out today). Rough numbers you can expect for 1KB size documents, 25M document database: 40K reads/sec/server, 5K writes/sec/server, roughly linear scalability across nodes. We should be able to get the report out in a couple of days.
- GordyMD 12y agoLooking forward to seeing the report!
- lobster_johnson 12y agoAny work done in 2.0 for improving aggregation performance? The last time I tried with 1.16, I gave up my testing when even the simplest aggregation query (count + group by with what should be a sequential, streaming scan) took literally minutes with RethinkDB, compared to <1s with PostgreSQL. Rethink coredumped before I gave it enough RAM, after which it blew up to around 7GB, whereas Postgres uses virtually no RAM, mostly OS buffers.
- danielmewes 12y agoWe did a couple of scalability improvements in 2.0, but didn't optimize groups and counts specifically. Would you mind writing me an email with your query or opening an issue at https://github.com/rethinkdb/rethinkdb/issues https://github.com/rethinkdb/rethinkdb/issues (unless you have already?)? I'd like to look into it to see how we can best improve this. We're planning to implemented a faster count algorithm that might help with this (https://github.com/rethinkdb/rethinkdb/issues/3949 https://github.com/rethinkdb/rethinkdb/issues/3949), but it's not completely trivial and will take us slightly longer to implement.
- thomcrowe 12y agoCongrats guys!
- DAddYE 12y agoI'm very happy to see this milestone, even tho I haven't used it recently I remember 2/3 years ago we tried it (adtech) for some heavy production workload. Even if we chosen another product (cassandra) I was literally surprised how well performed! Congrats!
- nviennot 12y agoLots of hard work has been poured into this release :) Congrats to the RethinkDB team!
- covi 12y agoBrilliant name (Yojimbo) and great cover photo there...
- billclerico 12y agocongrats Slava, Mike & team. in an age of thin apps getting shipped in weeks or months, the patience you showed in spending 5 years developing some pretty hard-core technology is amazing. really excited for you guys!
- cdnsteve 12y agoI'm going to give this a spin out of pure respect for the team that's dedicated 5 years to a product without cashing out. Hats off. Your CEO has some respectable... anatomy.
- notdonspaulding 12y agoCool! I've started to look into RethinkDB in the past, and I'm very interested in the features it claims. However, I only have so much time to investigate new primary storage solutions, and our team has been burned in the past by jumping too quickly on a DB's bandwagon when the reliability, performance, or tooling just wasn't there. As of late, we've come to rely on Aphyr's wonderful Call Me Maybe series[0] as a guide for which of a DB's claims are to be trusted and which aren't. But even when Aphyr hasn't tested a particular DB himself, some projects choose to use his tool Jepsen to verify their own claims. According to at least 1 RethinkDB issue on Github, RethinkDB still hasn't done that[1]. Not to poo poo on the hard work of the RethinkDB team, but for me, the TL;DR is NJ;DU (No Jepsen, Didn't Use) [0] https://aphyr.com/tags/jepsen https://aphyr.com/tags/jepsen [1] https://github.com/rethinkdb/rethinkdb/issues/1493 https://github.com/rethinkdb/rethinkdb/issues/1493
- danielmewes 12y agoUnderstood. We're planning to test with Jepsen soon. This will happen once we have implemented fully automatic failover (at the moment it still requires manual intervention, even though it's usually straight forward). We have a first working implementation, but are still working on the details. It should become ready in the next ~2 months. See the issue you mentioned https://github.com/rethinkdb/rethinkdb/issues/1493 https://github.com/rethinkdb/rethinkdb/issues/1493 for progress on this.
- coffeemug 12y agoSlava @ Rethink here. This is a great point, and we're on it! We have a Raft implementation that unfortunately didn't make it into 2.0 (these things require an enormous amount of patient testing). The implementation is designed explicitly to support robust automatic failover, no interruptions during resharding, and all the edge cases exposed in the Jepsen tests (and many issues that aren't). This should be out in a few months as we finish testing and polish, and will include the results of the Jepsen tests. (It's kind of unfortunate this didn't make it into 2.0, but distributed systems demand conservative treatment).
- sixdimensional 12y ago
- mberning 12y agoFor the rubyists out there check out http://nobrainer.io/ http://nobrainer.io/
- sandstrom 12y agoIs anyone using nobrainer in production? We're currently using Mongoid (MongoDB ORM), and an Active Record like ORM for RethinkDB is the main thing holdings us back. I don't have great insight into nobrainer, but last I checked it seemed like joins wheren't implemented (but on the roadmap).
- vdaniuk 12y agoI like rethinkdb and have been successfully using their official ruby and js libraries for some time. Nobrainer orm wasn't fun though, too many edge cases that interfere with activerecord and rails conventions. Going a bit on a tangent, after many experiments I've developed a strong conviction that pg is the best database choice for rails, especially with the jsonb datatype included in 9.4. It is the best of two worlds: reliable, proven sql db that plays really well with Rails and has nosql capabilities, including indexing and quering. So good. Ymmv.
- cookiecat 12y agoCongrats guys, RethinkDB has been a joy to use so far, but the 3rd party .net driver needs some help. I filed an issue here: https://github.com/rethinkdb/rethinkdb/issues/3931 https://github.com/rethinkdb/rethinkdb/issues/3931
- jmtame 12y agoCongrats Slava, Mike and the rest of the folks at RethinkDB!
- dkhenry 12y agoAwesome news. I have used Rethink for a few internal projects and while I don't think it has that one "killer feature" that other DB's don't it is such a painless experience in development and deployment that makes just worlds better then trying to set up and scale some of the other solutions. BZ rethinkdb team.
- xtrumanx 12y agoLots of congratulating on this thread and a hell of a lot of points for a software release. I've been on HN consistently for a long while and I didn't realize there was so much love and hype for RethinkDB here. Have I missed something?
- robertfw 12y agoI've been following RethinkDB on HN for quite a while now and have been eagerly awaiting them to make a production-ready statement. Everything I have read has sounded very promising and I am excited to try it out!
- andrewflnr 12y agoI guess you have. There are a lot of us into alternative databases that are hoping for Rethink to fulfill the original promise of MongoDB. That said, I can't blame you for not devoting a bunch of attention to it. :)
- jasondc 12y agoCan you be more specific on the original promise MongoDB didn't fulfill?
- shockzzz 12y agoIt's a nightmare to scale and has performance quirks that are really unexpected. Many, many companies have had to spend enormous amounts of developer time to migrate off of MongoDB to something else.
- andrewflnr 12y agoThat and the unreliable-by-default write settings.
- e12e 12y agoI think mongodb is following a similar path to what MySQL did. Be really good at one thing, market as something else -- and then slowly, slowly catch up to the hype (sort of). As I understand it mongodb have changed the default settings (probably why someone downvoted you) -- but the fact that it was off by default is still something that is rightfully hard for the team to live down. And while a lot of people are probably still happily using MySQL -- I personally see little use for it, when PostgreSQL is an option. I maybe wrong, but I think both mongodb and mysql appeal to the same groups: people that don't know or care about normalization, databases and datastructures -- and really just want image (as in Smalltalk) based development, but has been tricked into using php/javascript etc. It's kind of crazy that you have two mature (one Free, one free) object databases that have seen some real-world usage -- and neither get any love. One is zodb, the Z object database, developed for zope/plone -- one of the first web application frameworks -- and a major contributor to python (invented eggs, buildout...). It's ridiculously easy to use outside of zope/plone/pyramid[1] and now has a free replication service[2]. The other one is gemstone glass[3] which works with Smalltalk and have their own ruby runtime, maglev[4]. [1] http://zodborg.readthedocs.org/en/latest/documentation/articles/ZODB1.html http://zodborg.readthedocs.org/en/latest/documentation/artic... [2] http://www.zope.com/products/x1752814276/Zope-Replication-Services http://www.zope.com/products/x1752814276/Zope-Replication-Se... [3] http://seaside.gemtalksystems.com/ http://seaside.gemtalksystems.com/ [4] http://maglev.github.io/ http://maglev.github.io/
- weixiyen 12y agoCongratulations guys! Amazing update :D
- Ciantic 12y agoI wish they did official TypeScript definition files. I'm a bit wary to rely on huge DB API with community definitions only. There are reasons to write TypeScript definitions for documentation generation too, if not for the code as TS.
- coffeemug 12y agoThere is an official spec here: http://rethinkdb.com/docs/writing-drivers/ http://rethinkdb.com/docs/writing-drivers/ Not quite TS, but it's well defined and new releases of the spec are carefully managed.
- Ciantic 12y agoFor me the TS is a tool to ensure my code is not using deprecated API. This is a partly reason why Facebook is also pushing typing to JS with Flow. Edit: And Guido is pushing it to Python with PEP 484: https://www.python.org/dev/peps/pep-0484/ https://www.python.org/dev/peps/pep-0484/ It's inherent problem with dynamic languages, you have to read all new release documents and migrate your code. With typed code I at least can be somewhat sure I'm not using deprecated calls and such just by compiling.
- wilsonfiifi 12y agoWell done guys! Have been wanting to use rethinkdb for my project but it didn't have the "production ready" tag, so Mongodb was chosen instead. Now I can confidently switch! It's a pity the Go driver isn't quite there yet though.
- _dancannon 12y agoI hope to have a "production ready" version of the driver ready in about a month. I know its slow but currently I am the only dev working on maintaining this project and all work is done in my free time. If you have any further questions I would be more than happy to answer them on https://gitter.im/dancannon/gorethink https://gitter.im/dancannon/gorethink. Thanks!
- wilsonfiifi 12y agoHey no worries I absolutely understand. Apologies for lamenting on the pace/state of your contribution and thanks for your time and effort.
- ataussig 12y agoCongrats to the RethinkDB team on this huge milestone!
- thoughtpolice 12y agoI've updated NixOS to include 2.0.0-1: https://github.com/NixOS/nixpkgs/commit/fe6ec3d13a1554458e647511fb364b65572b363a https://github.com/NixOS/nixpkgs/commit/fe6ec3d13a1554458e64... - any way we can get it mentioned on the website?
- coffeemug 12y agoCould you suggest a pull request in docs? (https://github.com/rethinkdb/docs https://github.com/rethinkdb/docs)
- gauravphoenix 12y agoany plans of releasing officially supported Java driver? For most enterprise oriented apps, having officially supported Java driver will be great.
- coffeemug 12y agoYes! No ETA yet, but we're on it.
- hemantv 12y agoThis is awesome :)
- jessejhernandez 12y agoCongrats Mike & Team!
- aioprisan 12y agothe commercial services launch is critical and will speed adoption from large players
- geddski 12y agoI've been using RethinkDB for a while now and I really enjoy working with it. It's a great fit for React and Angular 2 apps with their one-way data flow through the application. Hook up a store or a model to an event source (server-sent events) that streams the RethinkDB changes feed and it's just awesome and simple. Realtime shouldn't be this easy, totally feels like cheating. Love it. I also really like the ability to do joins, where before in Mongo I would have to handle data joins in the app level.
- nileshtrivedi 12y agoDo you have any project on github that works like that?
- geddski 12y agoNot that's open source, but I can do a little write up article and share a sample app that shows how to do it.
- GordyMD 12y agoI'd personally love to see this. Think it would be very valuable to the community.
- robertfw 12y agoI second this. I am getting happier by the day with my react client side architecture and am now casting an eye to my server side (currently a Django-rest-framework api) to determine what the best fit there would be.
- kclay 12y agoWould love to see this as well. I'm the creator of the Scala driver and always looking for ways to improve the api.I know you may not be using Scala but having insight on how other devs would use it always helps. Plus I'm still trying to figure out the best way to do change feeds hehe.
- 12y ago
- cachvico 12y agoAny thoughts about multi-doc transactions?
- danielmewes 12y agoIt's not currently on our road map. Even though there are some well-researched algorithms for it, actually implementing transactions in a distributed system is pretty hard. It also comes at significant performance costs, which would interfere with our goal of easy and efficient scalability.
- cachvico 12y agoThank you for the comment. I was wondering if something along the lines of http://blog.labix.org/2012/08/22/multi-doc-transactions-for-mongodb http://blog.labix.org/2012/08/22/multi-doc-transactions-for-... would be feasible.
- jjsalamon 12y agoCongrats guys! I've been looking forward to using Rethink. Is windows support coming anytime?
- deleted 12y ago[deleted]