Я думаю, что «решение» сильно зависит от того, что вы собираетесь делать с метаданными.
Например, почти все метаданные, которые мы храним (несколько наборов научных данных), все разделены и сохранены в базе данных. Это позволяет нам создавать наборы данных для сохранения общих метаданных между файлами (как вы говорите, категории и теги), в то время как у нас есть специфичные для файла структуры (заголовок, время начала / остановки, минимальные / максимальные значения и т. Д.). Хотя мы могли бы хранить их в скрытые файлы, мы много ищем и открываем наш интерфейс для внешних потребителей через веб-сервисы.
Если вы храните метаданные, которые не будут использоваться для поиска, то скрытые файлы или выделенный XML-файл для каждого «реального» файла - неплохой путь. Он может быть прочитан практически всем, может быть легко преобразован в различные форматы и не потеряется, если вы решите изменить механизм хранения.
Метаданные должны помогать вам, а не мешать вам. Я видел (и был частью) системы, где хранение метаданных стало более обременительным, чем хранение фактических данных, и стало ответственностью. Просто имейте в виду, что вы пытаетесь с этим делать, и не переусердствуйте с «что если».