Тем не менее, кеши могут иногда становиться бременем и фактически замедлять работу сервера. Когда у вас высокая нагрузка, алгоритм для того, что кешируется, а что нет, может не подходить для входящих запросов ... то, что вы получаете, это кеш, который начинает работать как FIFO в сверхурочное время ... это начинает давать о себе знать когда таблица, которая находится за кэшем, имеет значительно больше записей, чем когда-либо будет кэшироваться в памяти ...
Хорошим компромиссом будет кластеризация данных для того, что вы хотите кэшировать. Имейте главный сервер, который качает обновления в кластеры, время для отправки / прокачки обновлений должно быть адаптировано для каждой таблицы в зависимости от настроек TTL (время жизни).
Ваша логика и данные на пользовательском узле могут затем находиться на том же сервере, который открывается в базах данных памяти, или, если ему действительно нужно получать данные, вы можете настроить его на использование канала вместо сетевого вызова ...
Это то, что задумывается о том, как вы хотите использовать данные и когда / если вы кластеризуете, тогда вы должны знать о распределенных транзакциях (транзакциях более чем в одной базе данных) ... но если данные кэшируются будет обновлен сам по себе без ссылок на другие пространства БД, тогда вы можете обойтись без этого ....
Проблема с кэшированием ORM заключается в том, что если база данных обновляется независимо через другое приложение, то кэш ORM может устареть ... Также может возникнуть сложность, если вы обновите набор ... обновление может обновить что-то, что находится в вашем кеше, и для этого нужно иметь какой-то алгоритм, чтобы определить, какие записи необходимо удалить / обновить в памяти (замедляя обновление !?) - и тогда этот алгоритм становится невероятно хитрым и подверженным ошибкам!
Если используется кэширование ORM, придерживайтесь простого правила ... кэшируйте простые объекты, которые почти никогда не изменяются (например, сведения о пользователе / роли) и которые имеют небольшой размер и многократно попадают в запрос ... если его кроме этого, я предлагаю кластеризовать данные для производительности.