Я ищу решение для кеша сценариев памяти, используя Zend_Cache
и zend framework.
В нашем приложении есть несколько случаев, что для отображения таблицы с, скажем, 100 элементами, логика выглядит следующим образом:
В большинстве случаев пользователь, который одобрил контент, является 2 или 3 пользователями-администраторами, однако сценарий вызывает базу данных / memecache несколько раз. Это ухудшается, так как пользовательская модель должна запрашивать 3 разных таблицы, чтобы узнать, к какой роли принадлежит пользователь, и к какому сообществу он принадлежит.
Итак, в целом, чтобы отобразить таблицу из 100 элементов, мы запрашиваем базу данных (или сервер memcache) 600 раз 🙂
Я думал о двух решениях здесь:
Не запрашивать таблицу пользователей внутри цикла. Прокрутите по 100 элементам, получите все идентификаторы пользователей и получите всех пользователей в одном запросе. Я не уверен, что это было бы хорошим решением, так как это означает, что мне придется писать sql-соединения, в результате чего функции модели возвращают не Zend_Db_Table_Row
, которые мы используем в значительной степени.
другим решением является сохранение объекта пользователя в массив кэша памяти при первой загрузке, а в следующий раз, когда цикл попытается прочитать идентификатор пользователя, он сначала будет искать этот «специальный» в кэше памяти. Я думал об использовании Zend_Registry
в качестве бэкэнда для кеша, похожего на решение здесь: http://sameerparwani.com/posts/using-zend_registry-as-a-zend_cache-backend
Мы используем сервер memcache, но скрипт просто запрашивает сервер memcache несколько сотен раз вместо запроса базы данных mysql. Однако быстрее запрашивать сервер memcache, поскольку скрипт уже загружает эти данные, я хочу использовать сценарий «память» и не запрашивать внешний сервер.