timewarrior
Joined 12 years ago
Joined 12 years ago
I didn't do any IIT coaching and was able to prepare for IIT only for one year in my grade 11. After that I got some major health issue and was harassed by armed bullies in my school, so couldn't study at all in Grade 12. This made me miss Top 200 rank.
But this ended up being a blessing in disguise, because I couldn't get Computer Science at IIT. I have been passionate about computers since I was 8 years old. If I had studied Computer Science as a part of the course curriculum, I might have ended up hating it.
Instead I pursued Computer Science on mine own, based on my interest. I have loved it every single day!
I look forward to my work, versus most of my friends who feel trapped in their jobs!
In IIT, in under 1000 rank, most people who spent more than 2 years were people who were intelligent but didn't take preparation seriously during their grade 11-12 but put in effort after that.
I also know people who were extremely intelligent who could crack under 100 if they gave the exam in grade 8. But they were outliers.
I only wish Tesla has thigh extension. Otherwise the seats are really comfortable.
I have come to trust Mongo with CRUD on a document. Rest of the features might not work as well. Looks at the recent Jespen test for mongo ( https://jepsen.io/analyses/mongodb-4.2.6 )
If you can deterministically determine your use case and are confident that mongo will fit it - it might be a good idea.
My concern which mongo is that is if you push the feature set, it will start falling apart at the seams.
Even though Postgres/MySql have some issues which can reduce the velocity of your team, if you absolutely want to be sure about data integrity and want full flexibility of evolving use case, they might serve better than mongo.
In the end it is a tool which fits some scenarios.
Are you running Mongo yourself. I use to be at MLab, but Mongo Atlas is really good. Give it a shot!
The cost of adding a column is zero, in terms of schema migration. So that helps with developer velocity. We used an ORM (mongoose), so that we can have added constraints including default values. But Mongo did help us avoid the friction of adding columns.
My background:
2007-2010: Used MySQL to run a social network for 50M+ users. Would send 2B messages on peak days. All powered by Mysql.
2015-2020: Used Mongo to power a top 5k site. Zero downtime and dataloss in 5 years. Used Postgres for internal non user facing database
So I have familiarity with all of these databases at a decent scale. I am going to list pros and cons of each and why I would use. Again a tool is a tool. Just because I love a wrench, doesn't mean that I am going to use it instead of a hammer when I need to put some nails.
MongoDB:
They have come a long way since I started using them in 2012. If your use case is CRUD, you would be fine. There is still a lot of marketing fluff about sharding, multi document transactions etc which might not be fully reliable. I stay away from those things. But if you just use CRUD and you data can fit in a single db you are going to be fine at decent scale.
Following are some reasons I prefer Mongodb. It's possible that Postgres/MySQL has some of them even though I couldn't find them:
1. I don't like to manage schema migrations. During development you constantly add columns and it's a pain to make sure that this column is added to the sql databases on development, testing, staging, prod etc. With mongo, you just add a column and you are done.
2. No downtime on migrations: You can change you server type or mongo version with zero downtime. Did that since 6 years. Couldn't figure out how to do that with postgres (even with Aurora).
3. If you data structure fits document and subdocument schema, mongo is really easy to use. I tried jsonb with postgres and didn't find it as easy to use at mongo. If you data fits this paradigm, you can essentially get atomicity for multiple updates because they are all in a single document.
4. The admin interface of MongoDB Atlas is really development friendly. You can easily add read only replicas. You can easily add replicas in different regions. I shudder at the thought of managing Postgres myself and even Amazon Aurora is not as easy to admin as Atlas.
At this point I would consider Postgres only in the following case: If my data structure is like a non-tree graph. In that case I would expect to do multiple complex join and expect transaction consistency between tables.
If I am building a financial product which directly handles money or money instruments (bank, stock trading) I would definitely not use mongo for that.
Happy to answer followup questions.
With Cmd-[] you just use total two keys which are easy with two hands.