-
Trying to Wrap My Head Around The Dynamo Storage System: A Deep Dive
Introduction The world of databases is very interesting. To build a loveable product, a core infrastructure piece that’s needed is the data persistence layer. I find this data persistence layer to be like a tip of the iceberg, the get and the put calls have so much going under the hood that it’s mind blowing…
-
Dependency Injection: Taming the modules that make up our software.
Introduction All software projects, (even relatively smaller ones) are the result of aggregation of several components and modules. As these software projects grow and evolve, the way we connect these components becomes a win or lose factor.I believe, that the way we orchestrate these components decides if the software will evolve as fast as the…
-
A Tale on Concatenated Indexes: Master Roshi and Goku’s fireside chat
Right Practice. Right Results This post is part of newsletter that I run “Scamming the Coding Interview”, which is geared towards continuous practice on concepts to ace the engineering interviews. Subscribe Once upon a time there was a master named Roshi whose relational database used to work like a blowing wind. Reads used to be…
-
Introduction to LSM Trees: May the logs be with you
This post is a part of a newsletter that I run: “Scamming The Coding Interview“, which is geared towards helping people ACE their coding interviews. We send a coding question on weekdays along with a system design article like this one on weekends. Do subscribe If you find this article valuable. Introduction What will be the simplest…
-
Architecting for Scale by Lee Atchison: Reading Experience
I recently read the book Architecting for Scale by Lee Atchison. The book contains a high-level overview of the major concepts that revolve around the topic of building highly-available and scalable apps.I felt the book to be more suited as a light read for people already familiar with these concepts rather than being an informative…
-
How To Objectively Reason About Systems: Correctness Properties Of A System
This post is a part of a newsletter that I run: “Scamming The Coding Interview“, which is geared towards helping people ACE their coding interviews. We send a coding question on weekdays along with a system design article like this one on weekends. Do subscribe If you find this article valuable. When a new system…
-
Basics of Database Partitioning and Partition Strategies
You are a part of a startup which has recently scaled to reach a huge number of users. This means that the increased number of users are going to generate a huge amount of data that you have to store and manage. It soon becomes evident that managing a huge dataset is a major hurdle…
-
Tackling Lost Updates Problem In Database Using Stricter Transaction Isolation Level
Introduction Databases are made for scale and are a highly concurrent system. Thus it is normal for them to expect multiple concurrent connections. Also, in most situations, we’ll want our database to be the source of truth and always contain consistent data. There are many concurrency related phenomena that can occur in a database when…
-
Practical Design Patterns Part 1: The Command Pattern
Introduction Most software these days support undoing/redoing actions. For example, text editors support undoing what we have written, file managers support undoing file creation/deletion etc. It’s a good UX practice to make software forgiving and allow users to undo their actions. I always wondered how was this implemented? On a critical analysis, it seems as…