Методы кэширования данных SQL-запросов - PullRequest
2 голосов
/ 24 ноября 2008

Прочитав немного на эту тему:

Кэширование MySQL запросов

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 вместе с указателем на файл, содержащий результаты.

Есть ли лучший способ?

Ответы [ 3 ]

1 голос
/ 24 ноября 2008

.NET, конечно, удобен для быстрой разработки, но он имеет некоторые нежелательные последствия, так как MS делает глухонемого!

Я также предпочитаю разрабатывать собственные решения, поскольку я могу адаптировать их к своим потребностям. Мне не нужно много сложностей, просто какой-то механизм для привязки входящих запросов к наборам результатов на стороне сервера. Презентация проводится на стороне клиента, где существует отдельная база данных. Запросы на самом деле предназначены только для обновления базы данных на стороне клиента, поэтому в ответ на ваш вопрос кэширование на стороне клиента уже реализовано.

1 голос
/ 24 ноября 2008

О, чувак, это хороший вопрос. Будучи разработчиком .NET, мне посчастливилось не беспокоиться об этом вообще за последние 7 лет. Мне не нужно беспокоиться, потому что .NET реализует довольно мощный механизм кэширования, чтобы делать то, что вы хотите.

Нет способа сделать это на уровне среднего уровня или уровня представления?

0 голосов
/ 25 ноября 2008

Размышляя об этом, я понимаю, что, несмотря на то, что кэширование результатов на диск происходит быстрее, нагрузка на диск значительно возрастет. В моем случае БД не так медленна для запросов, это самая большая проблема, требующаяся для набора результатов, до 3 МБ на набор результатов. Это мгновенно израсходует память сервера. Если я буду хранить все это в mempry, пока xfer продолжается

...