Прочитав кое-что на эту тему:
http://www.danga.com/memcached/
Моя проблема с кешированием SQL: http://www.petefreitag.com/item/390.cfm
http://framework.zend.com/manual/en/zend.cache.html#zend.cache.introduction
У меня очень уникальный (узкий) набор запросов, и я думаю, что могу довольно легко реализовать кеширование в моих текущих исполняемых файлах FastCGI C API (НЕ PHP).
Zend описывает свою структуру как: записи кеша хранятся через бэкэнд-адаптеры (File, Sqlite, Memcache ...) через гибкую систему идентификаторов и тегов.
КАК это реализовано?
Поскольку один и тот же запрос может возвращать разные результаты, если таблица была изменена, мне нужно отслеживать не только запросы, но также UPDATE, INSERT и DELETE (на данный момент MySQL). Поскольку это происходит только из одного из моих процессов, я мог бы легко добавить оператор, который удаляет кеш при изменении таблицы.
Клиенты разрешают только SELECT, и в этом случае я мог бы хэшировать запросы и сохранять их в хэш-таблице или индексе btree вместе с указателем на файл, содержащий результаты.
Есть ли способ лучше?






О боже, это хороший вопрос. Как .NET-разработчик, мне посчастливилось совсем не беспокоиться об этом в течение последних 7 лет. Мне не о чем беспокоиться, потому что .NET реализует довольно мощный механизм кэширования, чтобы делать то, что вы хотите делать.
Нет возможности сделать это на среднем уровне или уровне представления?
.NET, безусловно, удобен для быстрой разработки, но имеет некоторые нежелательные последствия, так как MS становится глухой соратницей!
Я также предпочитаю разрабатывать собственные решения, так как я могу адаптировать их к своим потребностям. Мне не нужно много изощрений, просто какой-то механизм для привязки входящих запросов к наборам результатов на стороне сервера. Презентация выполняется на стороне клиента, где существует отдельная база данных. Запросы на самом деле предназначены только для обновления базы данных на стороне клиента, поэтому, в ответ на ваш вопрос, кеширование на стороне клиента уже реализовано.
Размышляя об этом, я понимаю, что, хотя результаты кэширования на диск быстрее, нагрузка на диск значительно возрастет. В моем случае БД не такая медленная для запросов, самая большая проблема - это память, необходимая для набора результатов, до 3 МБ на набор результатов. Это займет память сервера в кратчайшие сроки, если я сохраню все это в mempry, пока идет xfer