Создание индексных файлов для ускорения работы с дисковым кэшем и хранения дополнительных атрибутов

править

Предпосылки создания индексов, а не NTFS-потоков или парных файлов-паспортов:

править
  • Создание индексов позволит по мере необходимости загружать их в память и проверять наличие файлов в кэше и их атрибутов без обращения к диску, что ускорит работу HC;
  • Индексирование должно работать на всех операционных и файловых системах без ограничений:
    • Хранение дополнительных атрибутов в NTFS-потоках неприемлемо из-за невозможности их хранения на FAT32, сетевом сервере, сложностей с переносом кэша на флешке, CD/DVD-RW и т.д. (Линк)
    • Использование парных файлов-паспортов на FAT32 нецелесообразно из-за ее архитектуры; (Линк1, Линк2)


Пожелания:

править
  • При первом запросе файлов сайта загружать индекс в память и временами сохранять его на диск. При отсутствии запросов в течение n минут выгружать неиспользуемый индекс из памяти; (Линк)
  • Для уменьшения размера индекса не хранить в нем "лишних" данных. Например, пользователей пусть хранит "Историк", "Content-Type" не нужен для известных форматов, даты доступа хватит одной на папку и т.д. (Линк)
  • Предпочтительно создавать по отдельному индексу на корневую папку сайта (хоста) в кэше. Это лучше, чем постоянно лопатить один большой индекс. Удаление одной папки или порча ее индекса не приведет к утрате всей информации по кэшу; (Линк)
  • Для защиты от случайного удаления/порчи индексов предусмотреть возможность создания резервных копий. При порче индекса предусмотреть возможность его восстановления из резерва, либо по файлам в кэше с восстановлением возможных атрибутов. Сохранять на диск признак открытия индекса, чтобы в случае ненормального завершения работы HC (зависания) при перезапуске проверить "плохие" индексы по файлам кэша;
  • Для копирования индексов с разных компьютеров предусмотреть возможность уникальных названий (например, index1.idx, index2.idx и т.д.). При наличии после копирования кэша 2-х таких индексов в одной папке производить их слияние в один общий; (Линк)

Что хранить в индексе:

править
  • URL;
  • Дату модификации файла (для быстрой проверки "критерия свежести" и формирования заголовка "If-Modified-Since");
  • Дату доступа к папке с файлами (для чистки кэша от "старых" файлов);
  • "Content-Type" для неизвестных HC форматов (для заголовочных правил и формирования ответа HC при загрузке из кэша).