Я ищу библиотеку Perl для обработки кэширования запросов к БД, но она должна обрабатывать гораздо больший кэш, чем обычное приложение. Для этого необходимо:
кешируется около 200 000 записей одновременно, в среднем около двух МБ или около того (итого, общий размер кэша около 400 ГБ)
не имеют максимального размера записи (или, по крайней мере, достаточно большого, например, несколько ГБ)
учитывает размер, поэтому он автоматически удаляет самые старые (с точки зрения времени последнего доступа) записи, когда общий объем памяти превышает предварительно установленный максимум
будь как можно быстрее с учетом вышеуказанных требований
Библиотеки, на которые я смотрел, это CHI и Cache :: SizeAwareFileCache (расширение Cache :: Cache).
Основная проблема, с которой я столкнулся с CHI, заключается в том, что мне нужно было бы использовать CHI :: Driver :: File с включенным is_size_aware, но документация специально предупреждает об этом:
... для драйверов, которые не могут атомарно считывать и обновлять значение - например, CHI :: Driver :: File - при обновлении размера возникает условие гонки, которое может привести к тому, что размер со временем станет неточным.
Основная проблема, с которой я столкнулся с Cache :: SizeAwareFileCache, заключается в том, что Cache :: Cache является старым и в настоящее время не поддерживается. Первое, что я вижу в документации, - это раздел, который советует мне использовать вместо этого CHI.
Есть какие-нибудь рекомендации? Должен ли я использовать одну из этих двух библиотек или что-то еще? Я схожу с ума от желания использовать кеширование для этого вообще? У кого-нибудь есть опыт работы с подобными требованиями? Буду благодарен за любой совет.
Некоторые сведения о приложении:
У меня есть приложение, которое анализирует большие веб-сайты, чтобы найти трудно обнаруживаемые ошибки / неэффективность в коде HTML, часто скрываемые среди сотен тысяч страниц. Приложение сканирует весь веб-сайт и сохраняет HTML-код каждой страницы в БД. (сервер MySQL, работающий на отдельном компьютере) После завершения сканирования пользователь может запускать различные программные инструменты для анализа HTML каждой страницы на сайте.
Инструменты ждут в очереди и запускаются по одному. Каждый инструмент должен загружать HTML каждой страницы в обходе, всегда в том же порядке. Таким образом, если сканирование захватило 100 000 страниц, и пользователю необходимо запустить на нем 15 различных инструментов, то в кеше должно быть не менее 100 000 записей, каждая из которых будет прочитана 15 раз. Очень важно, чтобы в кеше можно было хранить все страницы данного сайта одновременно. (в противном случае каждая страница будет отброшена, а затем повторно кэширована для каждого инструмента, что будет хуже, чем вообще отсутствие кэширования)
Самая большая цель - уменьшить нагрузку на базу данных. Вторичная (но все же очень важная) цель - повысить скорость.