I am building an application where I need to store millions of images and later tag them. The tags attributed to the images could change over time as the tagging system evolves. Images will then be searched for by tags.
In terms of storing the files, I have eliminated the option of storing them in a RDBMS; I have tried this in the past and ran into scaling and performance problems and likewise I have eliminated the option of storing them on a file system as that too has given me performance, scalability and backup issues. I am now considering using a NOSQL key-value data store or something like Amazon S3. Is a key-value store an appropriate choice for this type of data?
In terms of storing the tag data for each image, since the tag types are unknown upfront I am looking to leverage the schemaless nature of NOSQL and use either and document data store or perhaps a column profile one. What would be the key factors in deciding which type of store to use? Are there other options that I should consider?
Lastly, does it make sense to split the image data and meta data into separate stores or is there a technology that can do both? Perhaps something like a key value store that also allows the addition of Metadata and querying against the Metadata?
Update: I have seen the previous answers but they are a few years old and do not seem to be leveraging contemporary technologies. Can someone please comment if RDBMS + Filesystem is still the best way to do this or are their newer and improved solutions.