По моему опыту, «дизайн кеша» - это смесь чёрного искусства и точной науки. В то время как наука о науке имеет тенденцию быть чрезвычайно предсказуемой, это заставит вас думать, что есть формула или, по крайней мере, хорошее практическое правило, которое вы можете применить, чтобы получить полезные результаты. Черная часть искусства означает, что это правда, но она полностью фальсифицирована, но все же удается оставаться верной.
Одна вещь, которая остается неизменной, - это необходимость в комплексных метриках. Безусловно, вы должны иметь обширные цифры, основанные на профилировании вашего приложения с использованием Real World & trade; данные. Без этого вы просто угадываете. Десятилетия практического опыта снова и снова показывают, что если вы, как программист, гадаете о природе «где проблема производительности», то вы на 100% гарантированно поймете ее неправильно. Отсюда необходимость в достоверных эмпирических данных.
Если вы решите заняться этим, первое, что вам нужно сделать, прежде чем вы даже начнете «работать над проблемой», - это найти способ сбора эмпирических показателей. Поскольку вы не упоминаете, какой язык или инструменты вы используете, я не могу давать конкретные рекомендации, но практически в каждой цепочке инструментов есть инструменты для профилирования, специально разработанные для того, чтобы помочь вам понять, на что ваша программа тратит время.
Далее ваша интуиция в этом случае, вероятно, верна. Вы уже определили, что ваши шаблоны доступа, скорее всего, будут «смещены при записи». Очень распространенным свойством записей является то, что «они должны произойти, прежде чем вы сможете сделать что-то еще». Если это связано с записью данных на диск, вы, как правило, сталкиваетесь с затруднениями при ожидании завершения операции дискового ввода-вывода, что обычно приводит к снижению производительности. В этом случае кэширование вряд ли поможет вообще, поскольку вы не можете «кэшировать запись», потому что это должно произойти.
В некоторых случаях «кэширование записи» может помочь. Если ваш дизайн и требования допускают временную несовместимость версии данных в памяти с версией данных на диске, часто можно «объединить записи». По сути, это включает в себя задержку фиксации данных на диск из-за того факта, что для некоторых шаблонов доступа некоторые непоследовательные записи будут «обновлять» один и тот же «блок» в окне «сброс на диск».
Еще одна вещь, которую вы должны сделать при проектировании системы кэширования, - это взять все ваши метрики и ваше понимание того, как работает ваш кеш, а затем написать тесты производительности, которые максимально ортогональны вашим проектным решениям. В идеале ваша кеш-система не должна заметно снижать производительность даже в худшем случае, и всегда есть худший сценарий.
EDIT
После перечитывания вашего вопроса не ясно, является ли это проблемой с производительностью, с которой вы столкнулись прямо сейчас, или которая, по вашему мнению, вы могли бы испытать. Если это позже, перечитайте, по крайней мере, три раза, второй абзац в моем ответе. только время, которое вы должны рассматривать при построении системы кэширования, - это когда вы определили с помощью твердых эмпирических данных, что у вас есть проблема с производительностью.