databasearchitecturestoragedocuments

Recommended location for document storage - in database or elsewhere?


Background:

We have an in house document storage system that was implemented long ago. For whatever reason, using the database as the storage mechanism for the documents was chosen.

My question is this:

What is the best practice for storing documents? What are the alternatives? What are the pros and cons? Answers do not have to be technology or platform specific, it is more of a general best practice question.

My Thoughts:

Databases are not meant for document storage. File Systems or 3rd party Document Management systems may be of better use. Document Storage in Databases is expensive. Operations are slow. Are these logic assumptions? Perhaps this is best, but in my mind, we have better alternatives. Could oracle BFILE's (links to document on NAS or SAN) be better than BLOB / CLOB?

Details:

UPDATE (from questions below):


Solution

  • The only limit to storing documents in the database is technological.

    A relation database is meant to be the persistent store of the mission critical data of an enterprise. How well it can perform that function varies from database to database and system to system, of course. But ideally the ACID properties of a relational database are intended to make it the store of all enterprise data. The file system, revision controller systems and other local store storage systems might have specific advantages but they are not designed for enterprise data storage as such.

    If the documents you are storing qualify as enterprise data - if they are used persistently through-out the enterprise - then it is logical to keep them in the database. If you are having problems with storing in the database, perhaps a DBA can find a better solution. You might even have to move them out of the database for performance reasons but I don't think you should move them out of the database for best-practices reasons.

    Of course, if the documents aren't enterprise data, if they're only used for one application, say, then moving them out of the database would also make sense.