Я строю сайт для шоппинга. Каждый проданный продукт может иметь несколько изображений, прикрепленных к нему, а также произвольные вложения (например, PDF с руководством и т. Д.). Эти ресурсы хранятся в нашей собственной системе ERP и доступны через удаленный API. На самом деле файл может находиться где угодно - в БД, на жестком диске, в сетевой папке и т. Д. API обеспечивает единый интерфейс доступа к нему.
Для повышения производительности я намерен кэшировать эти файлы на веб-сервере. Существует механизм счетчика версий, который позволяет мне эффективно определять, когда файл был изменен, и делать запись в кэше недействительной. Однако где я могу сохранить номер версии файла, который в данный момент находится в кеше? Кеш, по сути, представляет собой одну папку, к которой могут обращаться несколько рабочих процессов ASP.NET на веб-сервере. Для самого сайта нет БД - все данные поступают из ERP API.
В идеале это число должно храниться вместе с самим файлом. Чтобы при удалении файла (скажем, администратор решил очистить кэш для улучшения использования диска), метаданные не задерживались. Пока у меня есть две идеи:
- Запишите его в ADS (альтернативный поток данных). Нет простого способа получить к нему доступ через .NET. Библиотеки существуют, но я бы предпочел более элегантное решение (и я тоже не имею представления о производительности).
- Добавить его к самому файлу. Все известные мне форматы файлов довольно спокойно относятся к данным, добавляемым в файл. Но мне нужно будет удалить его перед передачей содержимого, и это будет означать, что я не смогу использовать встроенный
TransmitFile
- опять же меня беспокоит производительность.
Есть ли лучший способ?