There was a nice research paper published by Microsoft Research called To Blob or not to Blob where they looked at all sorts of variables and impacts.

Their finding in the end:

  • up to 256 KB in size, blobs are stored in the database more efficiently than in the file system
  • for 1 MB and larger, the file system is more efficient
  • in between it's a toss-up

Since that paper was published, SQL Server 2008 has also added the FILESTREAM attribute which makes storing stuff in the file system, but under transactional control, a reality. Highly recommended you check that out!


This question comes up often - see this SO search result.

There is no one right answer - it depends on circumstances.

Personally - keep a file path in the DB and the file on the filesystem. Each has its own strengths. You can backup files as well as databases. This is also the conclusion of this guy, who manages TBs of data.


Replication of static files, especially across a number of servers, can be difficult to manage. It really comes down to a tradeoff between managing, monitoring and debugging replication problems vs. the database size and load.

I think I'd probably pick the database approach, and if load became an issue look at putting up some sort of cache layer around the image calls.

Suggestions to store a path in the db are missing the real problem, which is replicating this across multiple machines.


Your concerns break down into two camps. The following concerns favour storing documents in the database:

  • Data integrity
  • Data replication
  • Multiple resolutions
  • Data management and backup

These concerns (probably) favour storing documents on the file system:

  • Speed of database vs file system
  • Overhead load of database vs file system

So, decide what matters the most and choose accordingly.