put all images in a database or just in a folder

I am developing a website which uses a lot of images. The images get manipulated very often (every few seconds, by the clients). All images are on a linux server. It is also possible that two clients try to change an image at the same time. So my question is: should I put the images into a database or just leave them in a folder (how does the OS handle the write-write-collisions?)?

I use node.js and mongoDB on the server.

You usually store the reference to the file location inside of the database. As far as write-write collisions In most whoever has the file open first gets it however it mostly depends on the OS that you are working with. You will want to look into file locking. This wikipedia article gives a good overview.

http://en.wikipedia.org/wiki/File_locking

It is also considered good practice in your code to check and notify the user if the file is in use if write collisions are likely to occur.

I suggest you store your images within the MongoDB using the GridFS file system. This allows you to keep images and their metadata together, it has an atomic update and two more advantages, if you are using replica sets for your database:

  • Your images have the same high availability as the rest of your data and get backed-up together

  • You can, eventually, direct queries to secondary members of the set

For more information, see

http://docs.mongodb.org/manual/applications/gridfs

http://docs.mongodb.org/manual/replication/

Does this help?

Cheers

Ronald