Оптимизация запросов
В этом посте хочу рассказать основы оптимизации запросов в БД. Буду говорить на примере Postgre, но в других БД процесс похож.
Шаг 0. Вспоминаем основы
При выполнении запроса участвуют два процесса:
▪️ Планировщик — составляет план выполнения запроса. Какие таблицы обойти, что проверить и в какой последовательности
▪️ Исполнитель — извлекает данные по заданному плану
Разработчик может создать дополнительные структуры данных — индексы. Индексы помогают быстрее выполнять запросы, но занимают много места. Если данные в таблице занимают 1 ГБ, то индекс с id займёт 250 МБ.
Шаг 1. Ищем, что оптимизировать
Смотрим таблицу
Ищем запросы, которые выполняются часто или долго.
Шаг 2. Работаем с конкретным запросом
Для экспериментов берём тестовую базу с большим количеством данных. Минимум миллион записей, иначе эффект оптимизаций не будет заметен.
Прогоняем запрос через EXPLAIN ANALYZE:
▪️ planning time — время планирования запроса
▪️ execution time — время выполнения запроса. Работаем с этим значением
Можно поиграть с условиями, порядком соединения таблиц и разными функциями. Обратите внимание на способ обхода таблицы:
🔸 поиск по условию (where name = …)
🔸 проверка уникальности поля
🔸 проверка внешнего ключа (foreign key)
Решение здесь простое — добавить индекс по проблемному полю. Базовый вариант выглядит так:
▫️ Запустить
▫️ Порадоваться снижению execution time
Для оптимизаций популярных и тяжёлых запросов добавление индекса оправдано. Разумеется, не нужно добавлять индексы для всех запросов и всех условий. Индексы занимают много места и замедляют запись в базу.
В оптимизации запросов огромное количество нюансов, но большинство проблем решается кэшем и добавлением индекса. Более сложные случаи лучше обсуждать с коллегами DBA😌
В этом посте хочу рассказать основы оптимизации запросов в БД. Буду говорить на примере Postgre, но в других БД процесс похож.
Шаг 0. Вспоминаем основы
При выполнении запроса участвуют два процесса:
▪️ Планировщик — составляет план выполнения запроса. Какие таблицы обойти, что проверить и в какой последовательности
▪️ Исполнитель — извлекает данные по заданному плану
Разработчик может создать дополнительные структуры данных — индексы. Индексы помогают быстрее выполнять запросы, но занимают много места. Если данные в таблице занимают 1 ГБ, то индекс с id займёт 250 МБ.
Шаг 1. Ищем, что оптимизировать
Смотрим таблицу
pg_stat_statements
— там собирается статистика по запросам. Чтобы получить достоверные данные, берём статистику с продакшн базы.Ищем запросы, которые выполняются часто или долго.
Шаг 2. Работаем с конкретным запросом
Для экспериментов берём тестовую базу с большим количеством данных. Минимум миллион записей, иначе эффект оптимизаций не будет заметен.
Прогоняем запрос через EXPLAIN ANALYZE:
EXPLAIN ANALYZE SELECT * FROM users where name = ’K’;EXPLAIN пишет только план выполнения запроса. EXPLAIN ANALYZE выполняет запрос и показывает
▪️ planning time — время планирования запроса
▪️ execution time — время выполнения запроса. Работаем с этим значением
Можно поиграть с условиями, порядком соединения таблиц и разными функциями. Обратите внимание на способ обхода таблицы:
Index Scan using name_index on
— при выполнении запроса используется индекс, и это отличноSeq Scan on
означает, что происходит долгий последовательный обход таблицы. Причиной может быть🔸 поиск по условию (where name = …)
🔸 проверка уникальности поля
🔸 проверка внешнего ключа (foreign key)
Решение здесь простое — добавить индекс по проблемному полю. Базовый вариант выглядит так:
CREATE INDEX index_name ON users(name);Дальше всё просто:
▫️ Запустить
EXPLAIN ANALYZE
▫️ Увидеть в плане выполнения новый индекс▫️ Порадоваться снижению execution time
Для оптимизаций популярных и тяжёлых запросов добавление индекса оправдано. Разумеется, не нужно добавлять индексы для всех запросов и всех условий. Индексы занимают много места и замедляют запись в базу.
В оптимизации запросов огромное количество нюансов, но большинство проблем решается кэшем и добавлением индекса. Более сложные случаи лучше обсуждать с коллегами DBA😌
Media is too big
VIEW IN TELEGRAM
JAVA SPRING TRANSACTIONAL: ОСНОВЫ ТРАНЗАКЦИЙ ЗА 7 МИНУТ
00:00 - Определение транзакции, схематичный пример
00:46 - Свойство транзакции
00:59 - Знакомство с кодовой базой
02:05 - Пример, где нужна аннотация Transactional
03:10 - Вызов в пределах одного класса
04:04 - Обработка не всех исключений
04:47 - Область видимости метода
05:10 - Транзакция занимает соединение с БД
06:25 - Повторяем
Код примера: https://github.com/dispikerton/transactional
источник
👉👆
00:00 - Определение транзакции, схематичный пример
00:46 - Свойство транзакции
00:59 - Знакомство с кодовой базой
02:05 - Пример, где нужна аннотация Transactional
03:10 - Вызов в пределах одного класса
04:04 - Обработка не всех исключений
04:47 - Область видимости метода
05:10 - Транзакция занимает соединение с БД
06:25 - Повторяем
Код примера: https://github.com/dispikerton/transactional
источник
👉👆
This media is not supported in your browser
VIEW IN TELEGRAM
😎Хотите расширить свой стек языком Clojure? Приходите на бесплатный вебинар «Разработка скриптов на Clojure», приуроченный к старту онлайн-курса «Clojure Developer» в OTUS.
— Clojure — это язык программирования общего назначения, на нём можно разрабатывать абсолютно все. До недавнего времени разработка скриптов на Clojure была трудной задачей в основном из-за медленного старта JVM, но появление GraalVM позволило обойти это ограничение. Скрипты, написанные на Clojure, теперь стартуют практически мгновенно, при этом, в процессе разработки доступен REPL и весь арсенал языка Clojure.
— На занятии мы познакомимся с проектом Babashka и узнаем, как именно эта библиотека помогает разрабатывать скрипты.
✅ Не упустите возможность протестировать курс! После открытого урока вы сможете приобрести курс, доступный в рассрочку.
👉Пройдите полный тест на сайте, узнайте, осилите ли вы обучение: https://otus.pw/TutR/
— Clojure — это язык программирования общего назначения, на нём можно разрабатывать абсолютно все. До недавнего времени разработка скриптов на Clojure была трудной задачей в основном из-за медленного старта JVM, но появление GraalVM позволило обойти это ограничение. Скрипты, написанные на Clojure, теперь стартуют практически мгновенно, при этом, в процессе разработки доступен REPL и весь арсенал языка Clojure.
— На занятии мы познакомимся с проектом Babashka и узнаем, как именно эта библиотека помогает разрабатывать скрипты.
✅ Не упустите возможность протестировать курс! После открытого урока вы сможете приобрести курс, доступный в рассрочку.
👉Пройдите полный тест на сайте, узнайте, осилите ли вы обучение: https://otus.pw/TutR/
51 Java -Spring Boot- Лучшие практики для разработчиков приложений
1.Использовать внешний сервер конфигурации
2. Используйте правильные зависимости
3. Сохраняйте модульность приложения
4. Используйте кэширование с умом
5. Контролируйте и протоколируйте свое приложение
6. Используйте последовательный стиль кода
7. Пишите модульные и интеграционные тесты
8. Используйте балансировщик нагрузки
9. Используйте последовательный формат протоколирования
10. Используйте инструмент мониторинга
11. Используйте инструмент сборки
12. Используйте инструмент версионирования кода
13. Использовать IDE
14. Использовать форматтер кода
15. Используйте линкер кода
16. Используйте клиентскую библиотеку HTTP
17. Использовать библиотеку JSON
18. Использовать пул соединений с базой данных
19. Использовать библиотеку безопасности
20. Использовать библиотеку тестирования
21. Использовать фреймворк для инъекции зависимостей
22. Используйте клиентскую библиотеку REST
23. Используйте брокер сообщений
24. Используйте профилировщик
25. Используйте инструмент обзора кода
26. Используйте инструмент статического анализа
27. Используйте инструмент покрытия кода
28. Используйте инструмент непрерывной интеграции
29. Используйте инструмент развертывания
30. Используйте инструмент управления конфигурацией
31. Использовать инструмент контейнеризации
32. Использовать облачную платформу
33. Использовать инструмент миграции баз данных
34. Использовать веб-сервер
35. Использовать инструмент CI/CD
36. Использовать обратный прокси-сервер HTTP
37. Используйте профилировщик JVM
38. Используйте профилировщик базы данных
39. Используйте инструмент нагрузочного тестирования
40. Используйте инструмент непрерывной доставки
41. Используйте API-шлюз
42. Используйте очередь сообщений
43. Используйте сетку сервисов
44. Используйте инструмент управления конфигурацией
45. Используйте конвейер развертывания
46. Использование Swagger для документации Api
47. Использование актуатора
48. Использование AOP
49. Использование рулевых диаграмм
50. Использование распределенной трассировки
51. Использование Lombok
https://connect2grp.medium.com/51-java-spring-boot-best-practices-for-application-developers-cafff2766896
👉👆
1.Использовать внешний сервер конфигурации
2. Используйте правильные зависимости
3. Сохраняйте модульность приложения
4. Используйте кэширование с умом
5. Контролируйте и протоколируйте свое приложение
6. Используйте последовательный стиль кода
7. Пишите модульные и интеграционные тесты
8. Используйте балансировщик нагрузки
9. Используйте последовательный формат протоколирования
10. Используйте инструмент мониторинга
11. Используйте инструмент сборки
12. Используйте инструмент версионирования кода
13. Использовать IDE
14. Использовать форматтер кода
15. Используйте линкер кода
16. Используйте клиентскую библиотеку HTTP
17. Использовать библиотеку JSON
18. Использовать пул соединений с базой данных
19. Использовать библиотеку безопасности
20. Использовать библиотеку тестирования
21. Использовать фреймворк для инъекции зависимостей
22. Используйте клиентскую библиотеку REST
23. Используйте брокер сообщений
24. Используйте профилировщик
25. Используйте инструмент обзора кода
26. Используйте инструмент статического анализа
27. Используйте инструмент покрытия кода
28. Используйте инструмент непрерывной интеграции
29. Используйте инструмент развертывания
30. Используйте инструмент управления конфигурацией
31. Использовать инструмент контейнеризации
32. Использовать облачную платформу
33. Использовать инструмент миграции баз данных
34. Использовать веб-сервер
35. Использовать инструмент CI/CD
36. Использовать обратный прокси-сервер HTTP
37. Используйте профилировщик JVM
38. Используйте профилировщик базы данных
39. Используйте инструмент нагрузочного тестирования
40. Используйте инструмент непрерывной доставки
41. Используйте API-шлюз
42. Используйте очередь сообщений
43. Используйте сетку сервисов
44. Используйте инструмент управления конфигурацией
45. Используйте конвейер развертывания
46. Использование Swagger для документации Api
47. Использование актуатора
48. Использование AOP
49. Использование рулевых диаграмм
50. Использование распределенной трассировки
51. Использование Lombok
https://connect2grp.medium.com/51-java-spring-boot-best-practices-for-application-developers-cafff2766896
👉👆
Medium
51 Java -Spring Boot- Best practices for Application Developers
Hi All ,
Побитовые операции
👉👆
~
: Побитовый унарный оператор NOT;&
: Побитовый AND;&=
: Побитовый AND с присваиванием;| :
Побитовый OR;|=
: Побитовый OR с присваиванием;^
: Побитовый исключающее XOR;^=
: Побитовый исключающее XOR с присваиванием;>>
: Сдвиг вправо (деление на 2 в степени сдвига);>>=
: Сдвиг вправо с присваиванием;>>>
: Сдвиг вправо без учёта знака;>>>=
: Сдвиг вправо без учёта знака с присваиванием;<<
: Сдвиг влево (умножение на 2 в степени сдвига);<<=
: Сдвиг влево с присваиванием.👉👆
Media is too big
VIEW IN TELEGRAM
JavaFX Game: Пишем Battleship (Морской бой)
Source Code: https://github.com/AlmasB/Battleship/tree/master/src/com/almasb/battleship
👉👆
Source Code: https://github.com/AlmasB/Battleship/tree/master/src/com/almasb/battleship
👉👆
⚡️ Один из важных шагов в проверке мобильного приложения — доступность для большого числа людей.
⁉ Как тестироващику автоматизировать проверку доступности (Accessibility)?
📢📢 Узнаем 5 апреля в 20:00 на вебинаре, приуроченном к онлайн-курсу «Kotlin QA Engineer» OTUS.
Какие темы мы затронем на уроке?
- Cтандарты и методы проверки соответствия требованиям Accessibility
- Разметка семантической информации в мобильных приложениях Android XML, Jetpack Compose, KMM и Flutter
- Разработка тестов с использованием Accessibility Test Framework для Android и Google Scanner for A11y (KMM)
- Создание валидаторов для сложных визуальных проверок
В результате мы научимся:
— Проверять готовность мобильного приложения для использования людьми с ограничениями здоровья
— Автоматически проверять соответствие требованиям визуальной контрастности, адаптации верстки под увеличенный шрифт, наличие семантической разметки для вспомогательных инструментов для приложений Android (XML и Compose) и iOS (Flutter и KMM).
— Использо...
⁉ Как тестироващику автоматизировать проверку доступности (Accessibility)?
📢📢 Узнаем 5 апреля в 20:00 на вебинаре, приуроченном к онлайн-курсу «Kotlin QA Engineer» OTUS.
Какие темы мы затронем на уроке?
- Cтандарты и методы проверки соответствия требованиям Accessibility
- Разметка семантической информации в мобильных приложениях Android XML, Jetpack Compose, KMM и Flutter
- Разработка тестов с использованием Accessibility Test Framework для Android и Google Scanner for A11y (KMM)
- Создание валидаторов для сложных визуальных проверок
В результате мы научимся:
— Проверять готовность мобильного приложения для использования людьми с ограничениями здоровья
— Автоматически проверять соответствие требованиям визуальной контрастности, адаптации верстки под увеличенный шрифт, наличие семантической разметки для вспомогательных инструментов для приложений Android (XML и Compose) и iOS (Flutter и KMM).
— Использо...
Мы создали практическую онлайн-программу «Java-разработчик», которая позволит за 10 месяцев плотной практики стать высокооплачиваемым специалистом.
Учиться на Хекслете удобно:
✔️Все лекции доступны 24/7 на платформе — занимайтесь в удобное время
✔️ Практика прямо в браузере
✔️Наставники, которые помогут в процессе обучения, и кураторы, контролирующие прогресс
Вы также сможете принять участие в открытых проектах Хекслета на GitHub. Научитесь работать с реальными приложениями и закреплять навыки, полученные на курсе, прямо в браузере.
А самое главное — вы станете участником Карьерного трека уже во время обучения.
Пройдете вебинары, которые охватывают все темы по трудоустройству: от составления резюме и рабочих профилей до психологических аспектов собеседования и адаптации на рабочем месте. Получите рекомендации по своему первому резюме от HR-специалистов и более опытных разработчиков.
Мы заинтересованы, чтобы вы нашли первую работу. Получите полную консультацию по профессии и карьере в IT!
Учиться на Хекслете удобно:
✔️Все лекции доступны 24/7 на платформе — занимайтесь в удобное время
✔️ Практика прямо в браузере
✔️Наставники, которые помогут в процессе обучения, и кураторы, контролирующие прогресс
Вы также сможете принять участие в открытых проектах Хекслета на GitHub. Научитесь работать с реальными приложениями и закреплять навыки, полученные на курсе, прямо в браузере.
А самое главное — вы станете участником Карьерного трека уже во время обучения.
Пройдете вебинары, которые охватывают все темы по трудоустройству: от составления резюме и рабочих профилей до психологических аспектов собеседования и адаптации на рабочем месте. Получите рекомендации по своему первому резюме от HR-специалистов и более опытных разработчиков.
Мы заинтересованы, чтобы вы нашли первую работу. Получите полную консультацию по профессии и карьере в IT!