I have a web application that stores a lot of user generated files. Currently these are all stored on the server filesystem, which has several downsides for me.
- When we move “folders” (as defined by our application) we also have to move the files on disk (although this is more due to strange design decisions on the part of the original developers than a requirement of storing things on the filesystem).
- It’s hard to write tests for file system actions; I have a mock filesystem class that logs actions like move, delete etc, without performing them, which more or less does the job, but I don’t have 100% confidence in the tests.
- I will be adding some other jobs which need to access the files from other service to perform additional tasks (e.g. indexing in Solr, generating thumbnails, movie format conversion), so I need to get at the files remotely. Doing this over network shares seems dodgy…
- Dealing with permissions on the filesystem as sometimes given us problems in the past, although now that we’ve moved to a pure Linux environment this should be less of an issue.
So, my main questions are
- What are the downsides of storing files as BLOBs in MySQL?
- Do the same problems exist with NoSQL systems like Cassandra?
- Does anyone have any other suggestions that might be appropriate, e.g. MogileFS, etc?
Not a direct answer but some pointers to very interesting and somehow similar questions (yeah, they are about blobs and images but this is IMO comparable).
PS: I don’t want to be the killjoy but I don’t think that any NoSQL solution is going to solve your problem (NoSQL is just irrelevant for most businesses).