← All Articles

I'm surprised by how many times my team is asked this question. I think it speaks to a larger misunderstanding in the broader IT ecosystem about what the data layer(s) is/are for and ultimately how you choose to implement it/them.

First, let me be clear, I don't have a favorite database or data store. I have ones that I prefer for specific tasks required by specific coding paradigms, but to attempt to say my favorite one is "X" can't be done without first giving context to the problem the client (or questioner) is trying to solve.

Let's say for example you were writing an application which required large user data gathering, but needed to be optimistically concurrent because the data was not financial data and it could tolerate the ability to "catch up" while maximizing performance. In this scenario you might use something like MongoDB or Azure Storage tables to write a highly scalable, performant solution.

What if you were writing an on premises application that had the capacity for hundreds of concurrent users with data that had to be right 100% of the time. An optimistic record locking pattern could be problematic, depending on when each use pulled the data and updated it, you could conceivably get out of sync. You may decide ACID is a requirement and if so, you may find yourself moving towards a more relational database like SQL Server or MySQL.

If you were writing an Inventory solution, you may want to look at Event Sourcing models and what data sources are best for those implementations.

My point is, as with most things around systems architecture, the selection of individual aspects of the whole depend on how the architect envisions the pieces working together, and so, "the best data storage solution", is going to be different for different implementations. It is also not unheard of to find multiple data store implementations living within the context of one enterprise level solution.

So, the next time someone asks you what's the best data storage solution, you should ask them a series of informed questions, make sure you understand the problem they are trying to solve, within what context, and within what kind of ecosystem so that you can make sure you give them correct advice, and in doing so help inform on best practice implementations of a well defined system.