Not sure about a cheat sheet, understanding which tool to use when requires some understanding of distributed systems and their limitations, such as the CAP theorem. This book goes deep on how databases work, getting into the nitty gritty on things like b-trees and index implementation and eventually zooming out to distributed databases. It's a grind but it's an amazingly thorough walk through (at least for someone like me who only had working knowledge of databases prior):
Database Internals: A Deep Dive into How Distributed Data Systems Work https://www.amazon.com/dp/1492040347/ref=cm_sw_r_awdo_BV61XFFBK9HS97W061HG
The canonical Designing Data Intensive Applications by Martin Kleppman is a bit easier to get through and gives a really great base understanding to work from with regards to distributed systems, and examines many different distributed technologies with discussions on their tradeoffs.
database internals is my favorite on how dbs work, and can be a good base for branching your learning into different areas of DBing
Database Internals: A Deep Dive into How Distributed Data Systems Work https://www.amazon.com/dp/1492040347/ref=cm_sw_r_cp_api_glt_i_G6TT6ZTK7WNKYEKA3FD0
Here's a list of some of the resources that I used for getting to where I'm at:
(tbh, this is all obviously 100X better content than what I'm putting out. However, it will probably take multiple years to digest all of it... in fact, I'm still not all the way through all of this despite embarking on this system design reading adventure roughly 4 years ago)
Books:
Others:
here's a pic that I used to post around a bit on other platforms: https://i.imgur.com/xbSlJmj.jpeg somebody had recommended making the pic into a github gist (which I haven't gotten around to yet), and something like that would be nice to see in the description section of the video
I'm also going to make a quick call out that there's this super cool website out there that you've probably already heard of called libgen.li which is literally piratebay but for books (and it basically has 95%-99% of all books that you could possibly think of, unlike piratebay)
However, my favorite material of all is "Designing Data-Intensive Applications", which is probably the very first system design book that I got. I bought a physical copy of it roughly 4 years ago before my very first system design interview ever, and I still learn new things while re-reading some of the chapters in it today. I've also seen a lot of praise for it even from people that have landed google staff engineer offers. It's basically the best compilation of the material in existence. I'd highly recommend getting that book first and getting a physical copy.
The first 3? Here's my whole list of books and resources that I study and recommend to others:
Books:
Others:
The first three would be the following from above:
I haven't tried putting it in writing but I do actually save the diagram files and text files.
Another option is to set the playback speed to 1.5X, but I also prefer written content myself as well.
Also, here's a list of some of the resources that I used for getting to where I'm at:
Books:
Others:
I'm also going to make a quick call out that there's this super cool website out there that you've probably already heard of called libgen.li which is literally piratebay but for books (and it basically has 95%-99% of all books that you could possibly think of, unlike piratebay)
Knowledge of internal workings of a Database is also helpful in design. Check these 2 books,
Hi :) I assume that you want to create a single node database. Then both LSM tree and Btree are an ok option. To learn more about these two data structures I recommend the Database Internals book by Alex Petrov.
If you want some easier to implement (in my opinion at least) data structure that can serve as key-value store I would recommend Bitcask(1 or 2 or 153p in Database internals book) data structure. It consists of a log to which we append new versions of our records and a in-memory hash map that points to newests version of records in this log.
To get some inspiration you can look at:
LMDB - kv store that uses b-tree,
RocksDB - kv store that uses LSM tree;
I started work on the same thing! I haven’t gotten far, but have found the following resources to be very resourceful.
https://www.amazon.com/Database-Internals-Deep-Distributed-Systems/dp/1492040347