Представьте себе веб-систему, которая будет кэшировать веб-страницы; это будет хранить около 10 миллионов м. Единственное, что мне нужно сделать, это время от времени возвращать веб-страницу из кеша и обновлять / удалять веб-страницы в кеше.
Примерный размер кеша будет 250 ГБ, искать в содержимом кеша мне не нужно. Я ожидаю около 70 000 запросов / обновлений / удалений в кеш ежедневно.
Вопрос: что лучше всего подходит, база данных или файловый кеш (двухуровневые каталоги). Вы рекомендуете размещать данные на отдельном сервере или NAS?
Любая помощь (и предложения!) Действительно приветствуются!
Адриан
Чтобы поддерживать кеш, вам необходимо иметь возможность находить элементы на основе URL-адреса и возраста (последний для очистки файлов LRU). Таким образом, используя необработанные файлы, вам придется поддерживать дополнительный индекс или более одной ссылки на фактический файл данных. У вас также есть сложность, необходимая для равномерного распределения файлов по каталогам для поддержания эффективности при извлечении контента - например, вы можете использовать md5-хеш URL-адреса для создания пути к файлу / метаданным содержимого.
Таким образом, хотя доступ к базе данных будет более медленным, он упрощает управление метаданными. Это не означает, что фактическое содержимое может по-прежнему находиться в файлах - хранение больших двоичных объектов переменной длины в базе данных часто менее эффективно, чем в обычных файлах.
Еще одна вещь, о которой вам нужно подумать, - это то, как обрабатывать обновления - как это делается, во многом зависит от того, как вы реализуете прокси-сервер - как сервер STDIO, работающий из inetd, разветвленный или поточный сервер или однопоточный сервер. За исключением однопоточного сервера, существует вероятность, что 2 запроса на один и тот же контент, недоступный из локального кеша, могут обрабатываться одновременно, но вы хотите, чтобы прокси-сервер только один раз ссылался на источник. Использование СУБД на бэкэнде обеспечивает большую гибкость при обработке блокировок / одновременном доступе.
Вы рекомендуете размещать данные на отдельном сервере или NAS?
а? Вы имеете в виду хранить хранилище в отдельной системе от прокси? С какой стати вы это сделали? Вы просто добавляете дополнительных задержек для доступа к контенту. И доступ к базе данных файлы по сети никогда не бывает хорошей идеей.
Однако все это предполагает, что вы собираетесь писать собственное программное обеспечение. Если вы хотите заниматься этим просто для удовольствия (?), То часть процесса обучения программированию - это исследование этих проблем самостоятельно - и тестирование разные подходы - спросить кого-нибудь, как бы он это написал, не поможет вам узнать о проблемах. OTOH, если вам просто нужно решение проблемы, почему бы не использовать один из доступных пакетов с открытым исходным кодом - Кальмар очень хорошо.