Сколько ключей я могу использовать для хранения в файловом кэше Django, прежде чем это станет узким местом в производительности?

Я работаю с большим количеством записей данных небольшого размера (обычно по 2-3 КБ каждая) и использую файловый кэш-сервер Django для хранения данных. Я хотел бы понять пределы масштабируемости этого подхода. В частности:

Существует ли практическое или рекомендуемое ограничение на количество ключей кэша, которые серверная часть на основе файлов может эффективно обрабатывать?

В какой момент (количество ключей или общий размер кэша) я могу начать замечать снижение производительности или узкие места?

Существуют ли какие-либо известные проблемы или ограничения на уровне файловой системы, о которых я должен знать при кэшировании десятков или сотен тысяч небольших файлов?

Я открыт для альтернативных стратегий кэширования, если серверная часть, основанная на файлах, не подходит для этого варианта использования.

Какой сервер кэширования Django наиболее подходит для хранения большого объема небольших записей (возможно, десятков или сотен тысяч)?

TL;DR: Ваши потребности настолько "скромны", что выбор кэша не имеет значения - подойдет любой кэш, включая файловый. Но теоретически, хотя при таком масштабе вы не заметите никакой разницы в пользовательской среде, кэширование памяти лучше.

Если вы используете что-то вроде diskcache, вы должны иметь возможность масштабировать как минимум до миллионов записей, прежде чем начнете замечать заметное влияние на производительность. Важным фактором также является количество записей, а не общий размер кэша, поскольку именно поисковая проверка будет масштабироваться по мере увеличения объема кэша.

Дисковый ввод-вывод - это также то, что в первую очередь станет ограничивающим фактором при работе с файловыми кэшами, поэтому практические ограничения будут в значительной степени зависеть от того, с каким оборудованием вы работаете.

Тем не менее, кэш-память, при наличии достаточных ресурсов (оперативная память значительно дороже дискового объема), намного лучше масштабируется с точки зрения производительности. Так сказать, "отраслевым стандартом" является Redis, и Django обладает отличными возможностями для его использования. Хотя MemCached также вполне способен на это.

Если вы даже не запускаете несколько экземпляров, использование кэша LocMem (локальной памяти) по умолчанию также отлично работает, если на хост-компьютере достаточно оперативной памяти для запуска вашего приложения и кэша любого размера, который вам нужен.

Вернуться на верх