Data needs to be stored
It's pretty obvious, we want our data to be persistent, available and consistent. Hence we have big expectations for our databases. We can't have everything - which is nicely expressed by CAP theorem.
I often read about different databases on blogs such as this excellent one.
But what to choose? What do I need in my app? Choice is often very hard. It's even harder when one doesn't know what are actual advantages and disadvantages of different databases.
My database experience
Up until recently I used only relational databases for storing my data. I can set up sqlite, mysql and postgres and do some queries.
I like good abstractions and I'm used to using ORM's. Unfortunately abstractions are something leaking and I came across some strange MySql has gone away errors and etc.
Relational databases aren't perfect. Migrations can be painful, scallingis practically only vertical. But in the same time relational databases are battle tested and work well with most available frameworks.
I know that I don't use their full capabilities.
NoSQL databases are trending.
Sometimes I feel like everyday there is new NoSql database. Why NoSQL are so popular?
What exactly are NoSQL databases? What kinds of them are there? Is this only a buzzword or real deal?
I didn't feel confident with my current database knowledge and decided to learn something new. My workmate recommended me Seven databases in seven weeks.
What did I learn from this book?
Seven databases is rather an overview than elaborate guide. I was really suprised what I learned about postgres from it!
Yeah, postgres, old, well know relational database is still pretty awesome. It's fast, mature and has great plugins.
However this book is mostly about NoSQL. It's starts with Riak. Riak is distributed key-value store. I wish I could have some problems to solve with it. Recommended minimum cluster size is 5. Not my league right now. However riak looks very nice and solid.
I just started, so I cannot tell much more, but I can't wait to learn more about controversial mongodb, redis (which I use on daily basis), couchdb and so on.
It's good to know other points of view to make wise decisions. Database is pretty important part of most projects. Some people call it it's heart. New trends recommend using few databases at once to use their particular strengts.
Graph, key-value, document, columnar, relational... maybe we can make them all shine?