In my experience, beginning developers get into a lot of trouble because they’re afraid of joins. The common symptoms are apps that are:
(i) excessively complex,
(ii) never quite work right, and
(iii) are expensive to change
It definitely is true that we’re moving into an era of web scale systems that are much greater in size and power than traditional enterprise systems. Many people are pushing the performance limits of the traditional RDBMS, and we’re seeing a move towards distributed main-memory databases and other new technologies.
Workaday business apps benefit greatly from normalization, so I think this post has a dangerous message for many developers. In the case above, I think it still makes sense to use a normalized database to keep the authoritative copy of the data, but it makes sense to cache the data in denormalized forms. Rather than creating a table with the notorious phone_number_1, phone_number_2, … phone_number_33 fields that I’m always cleaning up in other people’s applications, you can just serialize the data with the serialization system that comes with your language or JSON or something like that.
Social sites generally have many more reads than writes, so this can improve performance 100 fold or more, but still keep the advantages of a relational back end. If the cache gets messed up, you can always do a partial or complete rebuild based on data you trust.