Я всегда работал над проектами, в которых кеширование выполнялось на DAL, в основном именно тогда, когда вы собираетесь выполнить вызов в базу данных, он проверяет, есть ли данные в кэше, и если он есть, он просто не выполняет вызов и вместо этого возвращает эти данные.
Я только недавно прочитал о кэшировании на бизнес-уровне, так что в основном кэшируем все бизнес-объекты. Одно преимущество, которое я вижу сразу, - намного лучшее время отклика.
Когда бы вы предпочли одно другому? и Является ли кэширование на бизнес-уровне обычной практикой?
Ответы:
Это, вероятно, слишком широк для однозначного ответа. Лично я считаю, что слой доступа к данным - лучшее место для кэширования, просто потому, что он должен быть очень простым - записи входят и выходят и все.
Бизнес-уровень реализует много дополнительных правил более высокой сложности, поэтому лучше, если он этого не делает также должно управлять за объект доступности проблемами в дополнении к множественному объекту проблемам согласованности в том же классе (или даже тот же метод) - что бы быть вопиющим нарушением ПСП.
(Конечно, я достиг этого понимания только после того, как мои классы обслуживания выросли до неуправляемой сложности, когда они пытались одновременно выполнять и кэширование, и настройку. Нет лучшего учителя, чем опыт, но цена, конечно, высока.)
источник
Доступ к данным и уровни сохранения / хранения являются неотразимо естественными местами для кэширования. Они делают ввод / вывод, делая их удобными, легкими для вставки кэширования. Я осмелюсь сказать, что почти каждому DAL или персистентному слою по мере его развития будет предоставлена функция кэширования - если он не был спроектирован таким образом с самого начала.
Проблема в намерениях . Уровни DAL и персистентности имеют дело с относительно низкоуровневыми конструкциями - например, с записями, таблицами, строками и блоками. Они не видят «бизнес» или объекты уровня приложения, или не имеют большого понимания того, как они используются на более высоких уровнях. Когда они видят несколько строк или дюжину читаемых или записываемых блоков, не ясно, что они представляют. «Учетная запись Jones, которую мы сейчас анализируем», не сильно отличается от «некоторых базовых справочных данных по ставке налогообложения, которые нужны приложению только один раз и к которым оно больше не будет ссылаться». На этом уровне данные есть данные есть данные.
Кэширование на уровне DAL / персистентности может привести к тому, что «холодные» справочные данные о налогах окажутся там, бесполезно занимая 12,2 МБ кеша и вытесняя некоторую информацию об учетной записи, которая, фактически, будет интенсивно использоваться в течение минуты. Даже самые лучшие менеджеры кэша имеют дело со скудными знаниями о структурах данных и соединениях более высокого уровня, и мало понимают, какие операции будут происходить в ближайшее время, поэтому они прибегают к алгоритмам угадывания .
В отличие от этого, кэширование на уровне приложений или на уровне бизнеса не так уж и аккуратно. Это требует вставки операций управления кешем или подсказок в середине другой бизнес-логики, что делает бизнес-код более сложным. Но компромисс заключается в следующем: имея больше знаний о том, как структурированы данные на макроуровне и какие операции выполняются, у него гораздо лучшая возможность приблизить оптимальную («ясновидящая» или «беладийская») эффективность кэширования.
То, имеет ли смысл вставлять ответственность за управление кэшем в код бизнеса / приложения, зависит от решения и будет зависеть от приложений. Во многих случаях, хотя известно, что слои DAL / постоянство не получат его «совершенно правильно», компромисс заключается в том, что они могут сделать довольно хорошую работу, что они делают это «архитектурно» чистым и гораздо более интенсивно тестируемым способом и этот низкоуровневый перехват позволяет избежать усложнения кода бизнес / приложения.
Меньшая сложность способствует более высокой точности и надежности, а также сокращает время выхода на рынок. Это часто считается хорошим компромиссом - менее совершенное кэширование, но более качественный и более своевременный бизнес-код.
источник
Кэширование на DAL просто и просто
Ваш DAL является центральным уровнем доступа к данным, что означает, что любой доступ к данным может контролироваться с помощью имеющихся там классов. Поскольку и чтение, и сохранение происходят на этих слоях, одинаково легко очищать или обновлять записи в кэше, когда происходят изменения.
Кеширование в бизнесе гибкое
Кэширование в бизнесе дает разработчикам возможность гибко определить, принесет ли конкретное использование объекта выгоду от кеширования. В зависимости от структуры внутренних приложений или автоматизированных процессов приложения могут изменить данные, которые кэшируются в других частях. С помощью кэширования в бизнесе разработчик может определить, будут ли определенные бизнес-объекты иметь возможные устаревшие данные и получить производительность, или будут иметь самое современное состояние бизнес-объекта за счет производительности.
источник