Thanks for the article; It was a nice read; however when we start out with implementing HA or Scale-ability with SQL DB, I have seen the inherent design creating problems; Here is a problem we faced in Postgres HA, and I guess this is common for most master -slave DB architectures; The Split brain syndrome — if there is a network partition then which of the two nodes is the master, which is the slave ? We were using pgpool-2 ; The bug is something like this and I see work even now active on it; Basically, it is a hard problem and I guess the only way to solve it is by designing your DB with it in mind— eventual consistency? —
So I guess there is no silver bullet here; SQL is a great abstraction, but like all abstractions, it gets leaky in certain scenarios and you won't know it is leaking — split-brain syndrome, load balanced read using asynchronous WAL streaming between master and slaves etc, leading to hard to debug application errors.

Cassandra has a similar abstraction like SQL called CQL, and like all abstractions you can do silly things with it; read and think read will give you what is written, write and think it is written in all nodes, use ALLOW FILTERING at the first chance etc; I have used the earlier Hector APIs before CQL and at that time it was very hard to write a query with some complexity — Query Slices and the horrors; I would not touch it if it were not for something simple like CQL;

So what is the difference then- If you have some understanding of the DB technology, with an interface like CQL you can model your query and table for elegant and easy scaleability and high availability; The master-slave approach to HA or the application level horizontal sharding employed by many SQL DB bites us when we start walking deeper into the implementation jungle… (note I am not an expert in DB technologies, just a user with some experience)

SW Architect/programmer- in various languages and technologies from 2001 to now.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store