Вы находитесь на странице: 1из 165

Раздел 8:

MySQL. Продвинутые
возможности
Содержание вебинара
Содержание вебинара

– полнотекстовый поиск
Содержание вебинара

– полнотекстовый поиск
– пагинация результатов
Содержание вебинара

– полнотекстовый поиск
– пагинация результатов
– транзакции
Содержание вебинара

– полнотекстовый поиск
– пагинация результатов
– транзакции
– кэширование данных
Содержание вебинара

– полнотекстовый поиск
– пагинация результатов
– транзакции
– кэширование данных
– функции даты/времени в MySQL
Полнотекстовый поиск
нестрогий поиск по тексту из базы данных
Проблема поиска текста
Проблема поиска текста

?
Как сделать гибкий поиск по сайту? Чтобы
можно было искать записи по ключевым
словами.
Проблема поиска текста

?
Как сделать гибкий поиск по сайту? Чтобы
можно было искать записи по ключевым
словами.

! Использовать возможности полнотекстового


поиска в MySQL с помощью индексов FULLTEXT
Массив данных для поиска
Название Описание
Конец рабочего дня Когда хорошо поработал
Учим новичка решать задачи Тяжело в учении, легко в бою
Когда любишь порядок Все вещи должны быть на своем месте
Премии на моей бывшей работе Горькая правда
Отличные витаминки Бодрят не по детски
Рыбак Новая техника рыбалки
Восторг Когда видишь своего кумира
Типичный юзер В интернете никто не знает что ты - кот
Енотик Енотик бежит записываться на курсы
Когда нажал тревожную кнопку под столом, а
Колесо опаздывает на встречу магазин под охраной автоботов
Твоя девушка, когда слышит
Чихуа
комплимент
Кот-ненависть котяра
Треуголик Красиво вертится
Недостатки оператора LIKE
Недостатки оператора LIKE

– Производительность:

MySQL сканирует всю таблице при поиске
Недостатки оператора LIKE

– Производительность:

MySQL сканирует всю таблице при поиске

– Гибкость:

не ищет по нескольким словами, нет операторов поиска
Недостатки оператора LIKE

– Производительность:

MySQL сканирует всю таблице при поиске

– Гибкость:

не ищет по нескольким словами, нет операторов поиска

– Релевантность:

нет способов определить релевантность результатов
Недостатки оператора LIKE
SELECT * FROM gifs 

WHERE title LIKE '%слово%' OR description LIKE '%слово%'
Недостатки оператора LIKE
SELECT * FROM gifs 

WHERE title LIKE '%слово%' OR description LIKE '%слово%'

Ищет по подстроке, вместо слова:


рыба |
Недостатки оператора LIKE
SELECT * FROM gifs 

WHERE title LIKE '%слово%' OR description LIKE '%слово%'

Ищет по подстроке, вместо слова:


рыба | Название Описание
Рыбак Новая техника рыбалки
Недостатки оператора LIKE
SELECT * FROM gifs 

WHERE title LIKE '%слово%' OR description LIKE '%слово%'

Ищет по подстроке, вместо слова:


рыба | Название Описание
Рыбак Новая техника рыбалки

Не ищет по нескольким словами:


енотик кот |
Недостатки оператора LIKE
SELECT * FROM gifs 

WHERE title LIKE '%слово%' OR description LIKE '%слово%'

Ищет по подстроке, вместо слова:


рыба | Название Описание
Рыбак Новая техника рыбалки

Не ищет по нескольким словами:


енотик кот | Название Описание
ничего не найдено
Fulltext индексы в MySQL
FULLTEXT – это специальный вид индекса, поддерживаемый в MySQL

Добавьте этот индекс нужным полям, чтобы организовать 



по ним полнотекстовый поиск
Fulltext индексы в MySQL
FULLTEXT – это специальный вид индекса, поддерживаемый в MySQL

Добавьте этот индекс нужным полям, чтобы организовать 



по ним полнотекстовый поиск

Добавление индекса

CREATE FULLTEXT INDEX gif_ft_search


ON gifs(title, description)
Возможности полнотекстового поиска
Возможности полнотекстового поиска

– Скорость:

ищет в десять раз быстрее LIKE
Возможности полнотекстового поиска

– Скорость:

ищет в десять раз быстрее LIKE

– Гибкость:

ищет по ключевым словам, поддерживает операторы поиска
Возможности полнотекстового поиска

– Скорость:

ищет в десять раз быстрее LIKE

– Гибкость:

ищет по ключевым словам, поддерживает операторы поиска

– Релевантность:

автоматически сортирует результаты по релевантности
Релевантность поиска
Релевантность в поиске – это соответствие найденной информации 

ожиданиям пользователя.
Пример обычного поиска
SELECT * FROM gifs
WHERE MATCH(title,description) AGAINST('слово')
Пример обычного поиска
SELECT * FROM gifs
WHERE MATCH(title,description) AGAINST('слово')

Поиск по обособленному слову:


рыба |
Пример обычного поиска
SELECT * FROM gifs
WHERE MATCH(title,description) AGAINST('слово')

Поиск по обособленному слову:


рыба | Название Описание
ничего не найдено
Пример обычного поиска
SELECT * FROM gifs
WHERE MATCH(title,description) AGAINST('слово')

Поиск по обособленному слову:


рыба | Название Описание
ничего не найдено

Поиск по набору слов:


енотик кот |
Пример обычного поиска
SELECT * FROM gifs
WHERE MATCH(title,description) AGAINST('слово')

Поиск по обособленному слову:


рыба | Название Описание
ничего не найдено

Поиск по набору слов:


енотик кот | Название Описание
Енотик бежит записываться на
Енотик курсы
В интернете никто не знает 

Типичный юзер что ты - кот
Кот-ненависть котяра
Логический поиск
Полнотекстовый поиск в MySQL имеет отдельный 

режим – логический поиск
Логический поиск
Полнотекстовый поиск в MySQL имеет отдельный 

режим – логический поиск

Оператор Описание
+ Это слово должно быть представлено в результатах
- Исключение, слова не должно быть в результатах
> Включить и увеличить вес релевантности слова
< Включить и уменьшить вес релевантности слова
() Объединить слова в выражения
~ Убрать значение слова в ранжировании результатов
* Плейсхолдер в конце слова
““ Искать точное соответствие фразе в кавычках
@ Определяет максимальную дистанцию между словами
Пример логического поиска
SELECT * FROM gifs
WHERE MATCH(title, description) 

AGAINST('слово' IN BOOLEAN MODE)
Пример логического поиска
SELECT * FROM gifs
WHERE MATCH(title, description) 

AGAINST('слово' IN BOOLEAN MODE)

Поиск по словоформам:
рыба* |
Пример логического поиска
SELECT * FROM gifs
WHERE MATCH(title, description) 

AGAINST('слово' IN BOOLEAN MODE)

Поиск по словоформам:
рыба* | Название Описание
Рыбак Новая техника рыбалки
Пример логического поиска
SELECT * FROM gifs
WHERE MATCH(title, description) 

AGAINST('слово' IN BOOLEAN MODE)

Поиск по словоформам:
рыба* | Название Описание
Рыбак Новая техника рыбалки

Исключаем слова из результата:


кот -юзер |
Пример логического поиска
SELECT * FROM gifs
WHERE MATCH(title, description) 

AGAINST('слово' IN BOOLEAN MODE)

Поиск по словоформам:
рыба* | Название Описание
Рыбак Новая техника рыбалки

Исключаем слова из результата:


кот -юзер | Название Описание
Кот-ненависть котяра
Ограничения полнотекстового поиска
Ограничения полнотекстового поиска

– требуют создания индекса – накладные расходы


Ограничения полнотекстового поиска

– требуют создания индекса – накладные расходы


– нет поддержки словоформ
Ограничения полнотекстового поиска

– требуют создания индекса – накладные расходы


– нет поддержки словоформ
– нет плейсхолдеров
Ограничения полнотекстового поиска

– требуют создания индекса – накладные расходы


– нет поддержки словоформ
– нет плейсхолдеров
– минимальная длина слова – три символа
Ограничения полнотекстового поиска

– требуют создания индекса – накладные расходы


– нет поддержки словоформ
– нет плейсхолдеров
– минимальная длина слова – три символа
– поиск только сразу по всем полям в индексе
Пагинация
постраничный вывод данных.
Разбивка большого количества информации на
отдельные страницы для более удобного просмотра
Пример пагинации

пагинация в списке гифок


Общий подход к пагинации
Общий подход к пагинации
Решить, сколько будет
элементов на странице
Общий подход к пагинации
Решить, сколько будет
элементов на странице

Получить общее кол-во страниц:


всего записей / записей на страницу
Общий подход к пагинации
Решить, сколько будет
элементов на странице

Получить общее кол-во страниц:


всего записей / записей на страницу

Показать ссылки на все страницы


Общий подход к пагинации
Решить, сколько будет
элементов на странице

Получить общее кол-во страниц:


всего записей / записей на страницу

Показать ссылки на все страницы

Определить текущую страницу


Общий подход к пагинации
Решить, сколько будет
элементов на странице

Получить общее кол-во страниц:


всего записей / записей на страницу

Показать ссылки на все страницы

Определить текущую страницу

Показать записи для текущей страницы


Операторы SQL для пагинации
Запрос на получение записей должен возвращать не все записи, 

а только их часть – те, что требуются для одной страницы
Операторы SQL для пагинации
Запрос на получение записей должен возвращать не все записи, 

а только их часть – те, что требуются для одной страницы

SELECT * FROM gifs LIMIT 9 OFFSET 0


Операторы SQL для пагинации
Запрос на получение записей должен возвращать не все записи, 

а только их часть – те, что требуются для одной страницы

SELECT * FROM gifs LIMIT 9 OFFSET 0

Кол-во записей в результате


Операторы SQL для пагинации
Запрос на получение записей должен возвращать не все записи, 

а только их часть – те, что требуются для одной страницы

Смещение выборки

SELECT * FROM gifs LIMIT 9 OFFSET 0

Кол-во записей в результате


Выборка записей для одной страницы
Выборка записей для одной страницы

LIMIT 3 OFFSET 0
Выборка записей для одной страницы

LIMIT 3 OFFSET 0

LIMIT 3 OFFSET 3
Выборка записей для одной страницы

LIMIT 3 OFFSET 0

LIMIT 3 OFFSET 3

LIMIT 3 OFFSET 6
Параметры для пагинации
Параметры
Параметры для пагинации
Параметры

9 записей на странице
Параметры для пагинации
Параметры

9 записей на странице
25 записей всего
Параметры для пагинации
Параметры

9 записей на странице
25 записей всего
3 страницы всего
Параметры для пагинации
Параметры

9 записей на странице
25 записей всего
3 страницы всего

Формулы
Параметры для пагинации
Параметры

9 записей на странице
25 записей всего
3 страницы всего

Формулы

LIMIT = записей_на_странице
Параметры для пагинации
Параметры

9 записей на странице
25 записей всего
3 страницы всего

Формулы

LIMIT = записей_на_странице

OFFSET = номер_страницы - 1 * записей_на_странице


Транзакции
режим выполнения нескольких запросов в MySQL
по принципу «всё или ничего»
Добавление в избранное
Добавление в избранное
Добавление в избранное
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav

До
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav

До

gifs
id title fav_count
123 Енотик 19
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav

До

gifs
id title fav_count
123 Енотик 19

gifs_fav
id user_id gif_id
1 5 10
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav

До После

gifs
id title fav_count
123 Енотик 19

gifs_fav
id user_id gif_id
1 5 10
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav

До После

gifs gifs
id title fav_count id title fav_count
123 Енотик 19 123 Енотик 20

gifs_fav
id user_id gif_id
1 5 10
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav

До После

gifs gifs
id title fav_count id title fav_count
123 Енотик 19 123 Енотик 20

gifs_fav gifs_fav
id user_id gif_id id user_id gif_id
1 5 10 1 5 10
2 5 123
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась

До
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась

До

gifs
id title fav_count
123 Енотик 19
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась

До

gifs
id title fav_count
123 Енотик 19

gifs_fav
id user_id gif_id
1 5 10
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась

До После

gifs
id title fav_count
123 Енотик 19

gifs_fav
id user_id gif_id
1 5 10
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась

До После

gifs gifs
id title fav_count id title fav_count
123 Енотик 19 123 Енотик 20

gifs_fav
id user_id gif_id
1 5 10
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась

До После

gifs gifs
id title fav_count id title fav_count
123 Енотик 19 123 Енотик 20

gifs_fav gifs_fav
id user_id gif_id id user_id gif_id
1 5 10 1 5 10
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE

START TRANSACTION
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE

START TRANSACTION

UPDATE gifs …

INSERT INTO gifs_fav …


Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE

START TRANSACTION

UPDATE gifs …

INSERT INTO gifs_fav …

COMMIT
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE

START TRANSACTION

UPDATE gifs …

INSERT INTO gifs_fav …

COMMIT

NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE INITIAL STATE

START TRANSACTION

UPDATE gifs …

INSERT INTO gifs_fav …

COMMIT

NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE INITIAL STATE

START TRANSACTION START TRANSACTION

UPDATE gifs …

INSERT INTO gifs_fav …

COMMIT

NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE INITIAL STATE

START TRANSACTION START TRANSACTION

UPDATE gifs … UPDATE gifs …

INSERT INTO gifs_fav …

COMMIT

NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE INITIAL STATE

START TRANSACTION START TRANSACTION

UPDATE gifs … UPDATE gifs …

INSERT INTO gifs_fav … ERROR!

COMMIT

NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE INITIAL STATE

START TRANSACTION START TRANSACTION

UPDATE gifs … UPDATE gifs …

INSERT INTO gifs_fav … ERROR!

COMMIT ROLLBACK

NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в 

один суперзапрос - транзакцию

INITIAL STATE INITIAL STATE

START TRANSACTION START TRANSACTION

UPDATE gifs … UPDATE gifs …

INSERT INTO gifs_fav … ERROR!

COMMIT ROLLBACK

NEW STATE INITIAL STATE


Как работают транзакции
Как работают транзакции

Начать транзакцию START TRANSACTION;


Как работают транзакции

Начать транзакцию START TRANSACTION;

Выполнить все запросы


Как работают транзакции

Начать транзакцию START TRANSACTION;

UPDATE gifs SET fav_count = fav_count


+ 1 WHERE id = 2;
Выполнить все запросы
INSERT INTO gifs_fav (user_id, gif_id)
VALUES (1, 2);
Как работают транзакции

Начать транзакцию START TRANSACTION;

UPDATE gifs SET fav_count = fav_count


+ 1 WHERE id = 2;
Выполнить все запросы
INSERT INTO gifs_fav (user_id, gif_id)
VALUES (1, 2);

Запросы
прошли без
ошибок?
Как работают транзакции

Начать транзакцию START TRANSACTION;

UPDATE gifs SET fav_count = fav_count


+ 1 WHERE id = 2;
Выполнить все запросы
INSERT INTO gifs_fav (user_id, gif_id)
VALUES (1, 2);

нет Запросы
прошли без
ошибок?

Откатить
транзакцию

ROLLBACK;
Как работают транзакции

Начать транзакцию START TRANSACTION;

UPDATE gifs SET fav_count = fav_count


+ 1 WHERE id = 2;
Выполнить все запросы
INSERT INTO gifs_fav (user_id, gif_id)
VALUES (1, 2);

нет Запросы да
прошли без
ошибок?

Откатить Подтвердить
транзакцию транзакцию

ROLLBACK; COMMIT;
Использование транзакций в сценариях
Проверяйте результат выполнения SQL запросов, чтобы 

подтвердить или откатить транзакцию
Использование транзакций в сценариях
Проверяйте результат выполнения SQL запросов, чтобы 

подтвердить или откатить транзакцию

<?php
$con = mysqli_connect("localhost", "root", "", "giftube");

mysqli_query($con, "START TRANSACTION");

$res1 = mysqli_query($con, "UPDATE gifs SET fav_count = fav_count + 1 WHERE id = 2");
$res2 = mysqli_query($con, "INSERT INTO gifs_fav (user_id, gif_id) VALUES (1, 2)");

if ($res1 && $res2) {
  mysqli_query($con, "COMMIT");
}
else {
  mysqli_query($con, "ROLLBACK");
}
Перерыв на 10 минут
Кэширование
способ ускорить работу сайта.

Хранение ответов от БД, чтобы уменьшить
количество запросов
Для чего нужно кэширование?
Для чего нужно кэширование?

?
Что делать, если с большой посещаемостью
сайта сложные SQL запросы стали выполняться
слишком долго
Для чего нужно кэширование?

?
Что делать, если с большой посещаемостью
сайта сложные SQL запросы стали выполняться
слишком долго

!
Можно сохранять результаты запросов в
промежуточное хранилище (файлы) и доставать
данные из него.
Что может замедлить SQL запрос
Что может замедлить SQL запрос

– большое количество записей в таблице


Что может замедлить SQL запрос

– большое количество записей в таблице


– отсутствие индексов
Что может замедлить SQL запрос

– большое количество записей в таблице


– отсутствие индексов
– объединения (JOINS)
Что может замедлить SQL запрос

– большое количество записей в таблице


– отсутствие индексов
– объединения (JOINS)
– подзапросы, группировки
Медленные запросы
SQL-запрос должен выполняться за время в пределах 0.01 - 0.2 секунды

Несколько медленных запросов могут негативно повлиять 



на скорость загрузки сайта
Медленные запросы
SQL-запрос должен выполняться за время в пределах 0.01 - 0.2 секунды

Несколько медленных запросов могут негативно повлиять 



на скорость загрузки сайта

Как найти медленные запросы:


1. Открыть конфиг mysql: /etc/mysql/my.cnf
2. Добавить туда две строчки:

log_slow_queries = /var/log/mysql/slow.log

long_query_time = 1
3. Перезапустить MySQL
Сложные SQL запросы
SELECT t1.*, u.name as authorName
FROM gifs t1
INNER JOIN users u     ON t1.user_id = u.id
INNER JOIN gifs_fav gf ON t1.id = gf.gif_id AND gf.user_id = 3
ORDER BY title
Как работает кэширование
Как работает кэширование
Без кэширования

Сайт
Как работает кэширование
Без кэширования

Сайт

SQL
Как работает кэширование
Без кэширования

Сайт

SQL

Данные
Как работает кэширование
Без кэширования С кэшированием

Сайт Сайт

SQL

Данные
Как работает кэширование
Без кэширования С кэшированием

Сайт Сайт

SQL SQL

Кэш-функция

Данные
Как работает кэширование
Без кэширования С кэшированием

Сайт Сайт

SQL SQL

Кэш

Кэш-функция

Данные
Как работает кэширование
Без кэширования С кэшированием

Сайт Сайт

SQL SQL

Кэш

Кэш-функция

Данные
Как работает кэширование
Без кэширования С кэшированием

Сайт Сайт

SQL SQL

Кэш

Кэш-функция

Данные Данные
Сформировать SQL запрос

Передать запрос вместе с доп.


данными в кэш-функцию

Проверить наличие 

данных в кэше

нет Данные да
есть?

Выполнить SQL нет Срок


запрос хранения
истек?

Сохранить результат
в кэше
Удалить данные

Выполнить SQL запрос

Вернуть данные Сохранить результат в кэше


Когда стоит добавлять кэширование
Когда стоит добавлять кэширование
1. Страницы сайта медленно загружаются
Когда стоит добавлять кэширование
1. Страницы сайта медленно загружаются

2. Вы убедились, что проблема в долгих запросах


Когда стоит добавлять кэширование
1. Страницы сайта медленно загружаются

2. Вы убедились, что проблема в долгих запросах

3. Оптимизация MySQL и добавление индексов 



не помогают
Когда стоит добавлять кэширование
1. Страницы сайта медленно загружаются

2. Вы убедились, что проблема в долгих запросах

3. Оптимизация MySQL и добавление индексов 



не помогают

4. Нет возможности увеличить ресурсы сервера


Когда стоит добавлять кэширование
1. Страницы сайта медленно загружаются

2. Вы убедились, что проблема в долгих запросах

3. Оптимизация MySQL и добавление индексов 



не помогают

4. Нет возможности увеличить ресурсы сервера

5. Значимую часть сайта составляет редко 



обновляемая информация
Плюсы и минусы кэширования
Плюсы и минусы кэширования

+ Плюсы

– существенно ускоряет 

работу сайта
– не требует апгрейда
– относительно легко 

внедрить
Плюсы и минусы кэширования

+ Плюсы - Минусы

– существенно ускоряет 
 – новая точка отказа


работу сайта – нужно следить за актуальностью 

– не требует апгрейда данных в кэше
– относительно легко 
 – трудно уловимые ошибки
внедрить – устраняет следствие, а 

не причину
Список категорий меняется
очень редко. Можно
кэшировать на долгий срок
Список категорий меняется
очень редко. Можно
кэшировать на долгий срок

Самые популярные гифки


обновляются не часто. Можно
кэшировать на сутки.
А вот новые гифки
кэшировать не почти никакого
смысла

Список категорий меняется


очень редко. Можно
кэшировать на долгий срок

Самые популярные гифки


обновляются не часто. Можно
кэшировать на сутки.
Стратегия кэширования
Перед добавлением кэширования решите:
Стратегия кэширования
Перед добавлением кэширования решите:
• где и как хранить данные
Стратегия кэширования
Перед добавлением кэширования решите:
• где и как хранить данные
• какие запросы нуждаются в кэшировании
Стратегия кэширования
Перед добавлением кэширования решите:
• где и как хранить данные
• какие запросы нуждаются в кэшировании
• время жизни кэша
Стратегия кэширования
Перед добавлением кэширования решите:
• где и как хранить данные
• какие запросы нуждаются в кэшировании
• время жизни кэша
• как и когда инвалидировать кэш
Стратегия кэширования
Перед добавлением кэширования решите:
• где и как хранить данные
• какие запросы нуждаются в кэшировании
• время жизни кэша
• как и когда инвалидировать кэш

Инвалидация кэша – удаление из кэша устаревших данных


Наши функции для кэширования
Наши функции для кэширования

cache_save_data

Сохранить данные
Сохраняет данные в
файл и возвращает
путь к нему
Наши функции для кэширования

cache_save_data cache_del_data

Сохранить данные Удалить данные


Сохраняет данные в Удаляет файл кэша для
файл и возвращает переданных данных
путь к нему
Наши функции для кэширования

cache_save_data cache_del_data

Сохранить данные Удалить данные


Сохраняет данные в Удаляет файл кэша для
файл и возвращает переданных данных
путь к нему

cache_get_data

Получить данные
Возвращает
сохранённые данные
для переданного SQL
запроса
Наши функции для кэширования

cache_save_data cache_del_data

Сохранить данные Удалить данные


Сохраняет данные в Удаляет файл кэша для
файл и возвращает переданных данных
путь к нему

cache_get_data is_cache_expired

Получить данные Проверить срок


Возвращает Проверяет, что файл
сохранённые данные кэша еще не
для переданного SQL просрочен
запроса
Функции даты и времени
набор функций в языке SQL для выполнения
различных операций над датой и временем:
форматирование, складывание/вычитание
Форматирование даты в MySQL
SQL предлагает способ для форматирования вывода 

дат, содержащихся в записях
Форматирование даты в MySQL
SQL предлагает способ для форматирования вывода 

дат, содержащихся в записях

Формат по умолчанию

id dt_add title
10 2017-03-29 16:32:34 Жестокий спорт
Форматирование даты в MySQL
SQL предлагает способ для форматирования вывода 

дат, содержащихся в записях

Формат по умолчанию

id dt_add title
10 2017-03-29 16:32:34 Жестокий спорт

«Человеческий» формат

id dt_add title
10 29.03.17 16:32 Жестокий спорт
Форматирование даты в MySQL
SQL предлагает способ для форматирования вывода 

дат, содержащихся в записях

Формат по умолчанию

id dt_add title
10 2017-03-29 16:32:34 Жестокий спорт

«Человеческий» формат

id dt_add title
10 29.03.17 16:32 Жестокий спорт

SELECT id, title, DATE_FORMAT(dt_add, '%d.%m.%y %H:%i') FROM gifs


Манипуляции с датой
Манипуляции с датой

? Как получить все гифки, созданные за


последнюю неделю?
Манипуляции с датой

? Как получить все гифки, созданные за


последнюю неделю?

! Можно использовать SQL-функцию 



DATE_SUB()
Манипуляции с датой

? Как получить все гифки, созданные за


последнюю неделю?

! Можно использовать SQL-функцию 



DATE_SUB()

Пример запроса

SELECT id, title FROM gifs


WHERE dt_add > DATE_SUB(NOW(), INTERVAL 7 DAY)
Разобранные критерии
Д6 

Выполнены необязательные пункты технического задания

https://up.htmlacademy.ru/php/4/criteries

Вам также может понравиться