With the above design, it takes six SQL Join operations to
access and display the information about a single user. This makes
rendering the profile page a fairly database intensive operation which is
compounded by the fact that profile pages are the most popular pages on social
networking sites.
Database denormalization is the kind of performance optimization that should be
carried out as a last resort after trying things like creating database indexes,
using SQL views
and implementing application specific in-memory
caching. However if you hit massive scale and are dealing with millions of
queries a day across hundreds of millions to billions of records or have decided
to go with database partitioning/sharding then you will likely end up resorting
to denormalization
De-Normalization is OK if you are'nt going to update
Denormalization means that you you are now likely to deal with data
inconsistencies because you are storing redundant copies of data and may not be
able to update all copies of a column value simultaneously when it is
changed for a variety of reasons. Having tools in your infrastructure to support
fixing up data of this sort then become very important.
the limits you need to put on yourself when storing a billion rows in a
database, and they included: no joins, no transactions, no stored procedures,
and no triggers.
Joshua has similar suggestions from his experience building del.icio.us: no
joins, no transactions, no
autoincrement
BigTable, Google's column-based store with no transactions
What's the point in designing tables for a webapp when an RDF-backed store will manage the data for you and RDF queries will come back as tabular data anyway?
designing and maintaining yet another relational schema for yet another webapp - doing so is starting to make as much sense as designing my own filesystem or TP monitor.
RDF + SPARQL + distributed data sources from around the web?
reason that rails and django are so productive; they're highly optimised for domain models. Raw RDF doesn't really do domains like that; you have to expend effort distilling triples into 'things';