Методы кэширования данных SQL-запросов

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

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

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
0
2 224
3

Ответы 3

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

Нет возможности сделать это на среднем уровне или уровне представления?

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

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

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

Другие вопросы по теме