1 - Индексация:
Проверьте шаблоны запросов вашего приложения и создайте подходящие индексы.
2 - Материализованные представления:
Предварительно вычислите результаты сложных запросов и сохраните их для быстрого доступа.
3 - Денормализация:
Уменьшите количество сложных соединений (join), чтобы улучшить производительность запросов.
4 - Вертикальное масштабирование:
Увеличьте мощность вашего сервера базы данных, добавив больше ЦП, оперативной памяти или хранилища.
5 - Кэширование:
Сохраните часто запрашиваемые данные в более быстром слое хранения, чтобы снизить нагрузку на базу данных.
6 - Репликация:
Создайте реплики вашей основной базы данных на разных серверах для масштабирования чтений.
7 - Шардинг:
Разделите таблицы базы данных на более мелкие части и распределите их по серверам. Используется для масштабирования как записей, так и чтений.
#database
👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2
Подборка Telegram каналов для программистов
https://www.tg-me.com/lifeproger Жизнь программиста. Авторский канал.
https://www.tg-me.com/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://www.tg-me.com/rabota1C_rus 1С Работа
Системное администрирование 📌
https://www.tg-me.com/sysadmin_girl Девочка Сисадмин
https://www.tg-me.com/srv_admin_linux Админские угодья
https://www.tg-me.com/linux_srv Типичный Сисадмин
https://www.tg-me.com/linux_odmin Linux: Системный администратор
https://www.tg-me.com/devops_star DevOps Star (Звезда Девопса)
https://www.tg-me.com/i_linux Системный администратор
https://www.tg-me.com/linuxchmod Linux
https://www.tg-me.com/sys_adminos Системный Администратор
https://www.tg-me.com/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://www.tg-me.com/sysadminof Книги для админов, полезные материалы
https://www.tg-me.com/i_odmin Все для системного администратора
https://www.tg-me.com/i_odmin_book Библиотека Системного Администратора
https://www.tg-me.com/i_odmin_chat Чат системных администраторов
https://www.tg-me.com/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://www.tg-me.com/sysadminoff Новости Линукс Linux
1C разработка 📌
https://www.tg-me.com/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://www.tg-me.com/cpp_lib Библиотека C/C++ разработчика
https://www.tg-me.com/cpp_knigi Книги для программистов C/C++
https://www.tg-me.com/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://www.tg-me.com/pythonofff Python академия. Учи Python быстро и легко🐍
https://www.tg-me.com/BookPython Библиотека Python разработчика
https://www.tg-me.com/python_real Python подборки на русском и английском
https://www.tg-me.com/python_360 Книги по Python Rus
Java разработка 📌
https://www.tg-me.com/BookJava Библиотека Java разработчика
https://www.tg-me.com/java_360 Книги по Java Rus
https://www.tg-me.com/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://www.tg-me.com/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://www.tg-me.com/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://www.tg-me.com/developer_mobila Мобильная разработка
https://www.tg-me.com/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://www.tg-me.com/frontend_1 Подборки для frontend разработчиков
https://www.tg-me.com/frontend_sovet Frontend советы, примеры и практика!
https://www.tg-me.com/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://www.tg-me.com/game_devv Все о разработке игр
Библиотеки 📌
https://www.tg-me.com/book_for_dev Книги для программистов Rus
https://www.tg-me.com/programmist_of Книги по программированию
https://www.tg-me.com/proglb Библиотека программиста
https://www.tg-me.com/bfbook Книги для программистов
https://www.tg-me.com/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://www.tg-me.com/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://www.tg-me.com/bookflow Лекции, видеоуроки, доклады с IT конференций
https://www.tg-me.com/coddy_academy Полезные советы по программированию
https://www.tg-me.com/rust_lib Полезный контент по программированию на Rust
https://www.tg-me.com/golang_lib Библиотека Go (Golang) разработчика
https://www.tg-me.com/itmozg Программисты, дизайнеры, новости из мира IT
https://www.tg-me.com/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://www.tg-me.com/nodejs_lib Подборки по Node js и все что с ним связано
https://www.tg-me.com/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://www.tg-me.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://www.tg-me.com/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://www.tg-me.com/thehaking Канал о кибербезопасности
https://www.tg-me.com/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://www.tg-me.com/ux_web Статьи, книги для дизайнеров
Английский 📌
https://www.tg-me.com/UchuEnglish Английский с нуля
Математика 📌
https://www.tg-me.com/Pomatematike Канал по математике
https://www.tg-me.com/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://www.tg-me.com/Excel_lifehack
https://www.tg-me.com/tikon_1 Новости высоких технологий, науки и техники💡
https://www.tg-me.com/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://www.tg-me.com/sysadmin_rabota Системный Администратор
https://www.tg-me.com/progjob Вакансии в IT
https://www.tg-me.com/lifeproger Жизнь программиста. Авторский канал.
https://www.tg-me.com/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://www.tg-me.com/rabota1C_rus 1С Работа
Системное администрирование 📌
https://www.tg-me.com/sysadmin_girl Девочка Сисадмин
https://www.tg-me.com/srv_admin_linux Админские угодья
https://www.tg-me.com/linux_srv Типичный Сисадмин
https://www.tg-me.com/linux_odmin Linux: Системный администратор
https://www.tg-me.com/devops_star DevOps Star (Звезда Девопса)
https://www.tg-me.com/i_linux Системный администратор
https://www.tg-me.com/linuxchmod Linux
https://www.tg-me.com/sys_adminos Системный Администратор
https://www.tg-me.com/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://www.tg-me.com/sysadminof Книги для админов, полезные материалы
https://www.tg-me.com/i_odmin Все для системного администратора
https://www.tg-me.com/i_odmin_book Библиотека Системного Администратора
https://www.tg-me.com/i_odmin_chat Чат системных администраторов
https://www.tg-me.com/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://www.tg-me.com/sysadminoff Новости Линукс Linux
1C разработка 📌
https://www.tg-me.com/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://www.tg-me.com/cpp_lib Библиотека C/C++ разработчика
https://www.tg-me.com/cpp_knigi Книги для программистов C/C++
https://www.tg-me.com/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://www.tg-me.com/pythonofff Python академия. Учи Python быстро и легко🐍
https://www.tg-me.com/BookPython Библиотека Python разработчика
https://www.tg-me.com/python_real Python подборки на русском и английском
https://www.tg-me.com/python_360 Книги по Python Rus
Java разработка 📌
https://www.tg-me.com/BookJava Библиотека Java разработчика
https://www.tg-me.com/java_360 Книги по Java Rus
https://www.tg-me.com/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://www.tg-me.com/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://www.tg-me.com/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://www.tg-me.com/developer_mobila Мобильная разработка
https://www.tg-me.com/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://www.tg-me.com/frontend_1 Подборки для frontend разработчиков
https://www.tg-me.com/frontend_sovet Frontend советы, примеры и практика!
https://www.tg-me.com/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://www.tg-me.com/game_devv Все о разработке игр
Библиотеки 📌
https://www.tg-me.com/book_for_dev Книги для программистов Rus
https://www.tg-me.com/programmist_of Книги по программированию
https://www.tg-me.com/proglb Библиотека программиста
https://www.tg-me.com/bfbook Книги для программистов
https://www.tg-me.com/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://www.tg-me.com/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://www.tg-me.com/bookflow Лекции, видеоуроки, доклады с IT конференций
https://www.tg-me.com/coddy_academy Полезные советы по программированию
https://www.tg-me.com/rust_lib Полезный контент по программированию на Rust
https://www.tg-me.com/golang_lib Библиотека Go (Golang) разработчика
https://www.tg-me.com/itmozg Программисты, дизайнеры, новости из мира IT
https://www.tg-me.com/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://www.tg-me.com/nodejs_lib Подборки по Node js и все что с ним связано
https://www.tg-me.com/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://www.tg-me.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://www.tg-me.com/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://www.tg-me.com/thehaking Канал о кибербезопасности
https://www.tg-me.com/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://www.tg-me.com/ux_web Статьи, книги для дизайнеров
Английский 📌
https://www.tg-me.com/UchuEnglish Английский с нуля
Математика 📌
https://www.tg-me.com/Pomatematike Канал по математике
https://www.tg-me.com/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://www.tg-me.com/Excel_lifehack
https://www.tg-me.com/tikon_1 Новости высоких технологий, науки и техники💡
https://www.tg-me.com/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://www.tg-me.com/sysadmin_rabota Системный Администратор
https://www.tg-me.com/progjob Вакансии в IT
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
FTXUI
Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала!
• Функциональный стиль
• Простой и элегантный синтаксис
• Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши
• Поддержка UTF8
• Поддержка анимации
• Поддержка рисования
• Нет зависимостей
• Кроссплатформенность: Linux/MacOS, WebAssembly, Windows
https://github.com/ArthurSonzogni/FTXUI
#cpp
👉 @Bookflow
Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала!
• Функциональный стиль
• Простой и элегантный синтаксис
• Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши
• Поддержка UTF8
• Поддержка анимации
• Поддержка рисования
• Нет зависимостей
• Кроссплатформенность: Linux/MacOS, WebAssembly, Windows
https://github.com/ArthurSonzogni/FTXUI
#cpp
👉 @Bookflow
👍4
CGAL
Библиотека алгоритмов вычислительной геометрии (CGAL) - это библиотека C++, цель которой - обеспечить легкий доступ к эффективным и надежным алгоритмам вычислительной геометрии.
https://github.com/CGAL/cgal
#cpp
👉 @Bookflow
Библиотека алгоритмов вычислительной геометрии (CGAL) - это библиотека C++, цель которой - обеспечить легкий доступ к эффективным и надежным алгоритмам вычислительной геометрии.
https://github.com/CGAL/cgal
#cpp
👉 @Bookflow
👍2
🐍Пишете на Python, но с веб-разработкой пока не срослось. Попробовали Django — слишком громоздко. Flask — вроде проще, но чего-то не хватает. В итоге на бэкенде сплошной хаос, а продакшену страшно доверить даже тестовый сервер.
FastAPI решает эти проблемы. Он быстрый, удобный и дружит с асинхронностью. Хотите понять, как писать API и рендерить страницы без боли? Приходите на открытый урок «Знакомство с веб-разработкой на FastAPI» 27 февраля в 20:00 (мск).
Мы разберём:
- Как работает FastAPI и почему он быстрее Flask
- Как писать JSON API и рендерить HTML в одном приложении
- Как подружить FastAPI с Jinja2 и обрабатывать формы
Спикер Сурен Хоренян — бэкенд-разработчик на Python, open-source contributor, руководитель команды в ВК Рекламе.
Участники получат скидку на большое обучение «Python Developer. Basic».
👉Регистрируйтесь на вебинар: https://vk.cc/cIVW1N
FastAPI решает эти проблемы. Он быстрый, удобный и дружит с асинхронностью. Хотите понять, как писать API и рендерить страницы без боли? Приходите на открытый урок «Знакомство с веб-разработкой на FastAPI» 27 февраля в 20:00 (мск).
Мы разберём:
- Как работает FastAPI и почему он быстрее Flask
- Как писать JSON API и рендерить HTML в одном приложении
- Как подружить FastAPI с Jinja2 и обрабатывать формы
Спикер Сурен Хоренян — бэкенд-разработчик на Python, open-source contributor, руководитель команды в ВК Рекламе.
Участники получат скидку на большое обучение «Python Developer. Basic».
👉Регистрируйтесь на вебинар: https://vk.cc/cIVW1N
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍1
Оптимизация C++ кода: Inline-функции и их влияние на производительность 🚀
Сегодня разберём интересную тему — inline-функции в C++ и их влияние на производительность. Когда стоит их использовать, а когда лучше избегать?
📌 Что такое inline-функция?
Ключевое слово
Пример:
✅ Когда стоит использовать
🔹 Маленькие, часто вызываемые функции (например, геттеры в классах).
🔹 Критичные по скорости участки кода, где важна минимизация затрат на вызов.
🔹 Шаблонные функции (они и так
❌ Когда
⚠️ Большие функции – встраивание приводит к раздуванию кода.
⚠️ Частые изменения кода в заголовочных файлах (
⚠️ Злоупотребление – если всё сделать
🔥 Итог
Не стоит
#cpp
👉 @Bookflow
Сегодня разберём интересную тему — inline-функции в C++ и их влияние на производительность. Когда стоит их использовать, а когда лучше избегать?
📌 Что такое inline-функция?
Ключевое слово
inline
говорит компилятору, что вызовы функции следует встраивать в код вместо выполнения обычного вызова. Это избавляет от накладных расходов на вызов, но увеличивает размер бинарного кода.Пример:
inline int square(int x) {
return x * x;
}
int main() {
int a = square(5); // Компилятор заменит на `int a = 5 * 5;`
}
✅ Когда стоит использовать
inline
?🔹 Маленькие, часто вызываемые функции (например, геттеры в классах).
🔹 Критичные по скорости участки кода, где важна минимизация затрат на вызов.
🔹 Шаблонные функции (они и так
inline
, если определены в заголовочном файле). ❌ Когда
inline
вреден?⚠️ Большие функции – встраивание приводит к раздуванию кода.
⚠️ Частые изменения кода в заголовочных файлах (
inline
-функции обычно в .h
) вызывают перекомпиляцию. ⚠️ Злоупотребление – если всё сделать
inline
, можно потерять кэш-память CPU из-за увеличенного размера бинарного файла. 🔥 Итог
Не стоит
inline
-ить всё подряд. Если сомневаетесь – доверяйте компилятору. Современные компиляторы сами умеют решать, какие функции выгодно встраивать.#cpp
👉 @Bookflow
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Теперь в CSS появилась функция Math.pow() от JavaScript, и вы можете генерировать плавные изменения масштаба шрифтов в CSS для размеров области просмотра/контейнера 👀
#frontend
👉 @Bookflow
:where(dd) {
--min: calc(17 * pow(1.2, var(--lvl, 0)));
font-size: clamp(var(--min), var(--fluid), var(--max)); ✨
}
dd:nth-of-type(2) { --lvl: 2; }
#frontend
👉 @Bookflow
👍7
📌 Декоратор в Java: Как добавить логику без изменения кода?
🔹 Когда использовать?
- Когда нужно добавить поведение к объекту динамически.
- Когда нельзя или не хочется менять исходный код класса.
- Когда необходимо сохранить принцип открытости/закрытости (OCP из SOLID).
🔹 Как это работает?
Декоратор — это обёртка вокруг базового объекта. Он реализует тот же интерфейс, но внутри может добавлять новую логику.
✅ Пример использования
Допустим, у нас есть базовый интерфейс
И его простая реализация:
Теперь добавим декораторы, которые расширяют функциональность:
1️⃣ Декоратор для отправки в Slack:
2️⃣ Декоратор для отправки в Email:
🚀 Использование:
🔥 Что произойдет?
🎯 Итог:
✅ Мы не изменяли код
✅ Гибкость: можем легко комбинировать декораторы в любом порядке.
✅ Код остаётся чистым и расширяемым.
#java
👉 @Bookflow
🔹 Когда использовать?
- Когда нужно добавить поведение к объекту динамически.
- Когда нельзя или не хочется менять исходный код класса.
- Когда необходимо сохранить принцип открытости/закрытости (OCP из SOLID).
🔹 Как это работает?
Декоратор — это обёртка вокруг базового объекта. Он реализует тот же интерфейс, но внутри может добавлять новую логику.
✅ Пример использования
Допустим, у нас есть базовый интерфейс
Notifier
, который отправляет уведомления:
public interface Notifier {
void send(String message);
}
И его простая реализация:
public class BasicNotifier implements Notifier {
@Override
public void send(String message) {
System.out.println("Отправка сообщения: " + message);
}
}
Теперь добавим декораторы, которые расширяют функциональность:
1️⃣ Декоратор для отправки в Slack:
public class SlackNotifierDecorator implements Notifier {
private final Notifier wrapped;
public SlackNotifierDecorator(Notifier wrapped) {
this.wrapped = wrapped;
}
@Override
public void send(String message) {
wrapped.send(message); // вызываем базовый метод
System.out.println("Дополнительно отправляем в Slack: " + message);
}
}
2️⃣ Декоратор для отправки в Email:
public class EmailNotifierDecorator implements Notifier {
private final Notifier wrapped;
public EmailNotifierDecorator(Notifier wrapped) {
this.wrapped = wrapped;
}
@Override
public void send(String message) {
wrapped.send(message);
System.out.println("Дополнительно отправляем Email: " + message);
}
}
🚀 Использование:
public class Main {
public static void main(String[] args) {
Notifier notifier = new BasicNotifier();
notifier = new SlackNotifierDecorator(notifier);
notifier = new EmailNotifierDecorator(notifier);
notifier.send("Привет, мир!");
}
}
🔥 Что произойдет?
Отправка сообщения: Привет, мир!
Дополнительно отправляем в Slack: Привет, мир!
Дополнительно отправляем Email: Привет, мир!
🎯 Итог:
✅ Мы не изменяли код
BasicNotifier
, но добавили новую функциональность. ✅ Гибкость: можем легко комбинировать декораторы в любом порядке.
✅ Код остаётся чистым и расширяемым.
#java
👉 @Bookflow
👍5
Библеотека CPR
C++ Requests - это простая обертка вокруг libcurl, вдохновленная отличным проектом Python Requests.
Несмотря на свое название, простой интерфейс libcurl - это еще не все, и ошибки, неправильное использование этого языка - частый источник ошибок и разочарований. Используя более выразительные языковые средства C++17 (или C++11, если вы используете cpr < 1.10.0), эта библиотека укладывает суть выполнения сетевых вызовов в несколько лаконичных идиом.
Вот быстрый GET-запрос:
https://github.com/libcpr/cpr
#cpp
👉 @Bookflow
C++ Requests - это простая обертка вокруг libcurl, вдохновленная отличным проектом Python Requests.
Несмотря на свое название, простой интерфейс libcurl - это еще не все, и ошибки, неправильное использование этого языка - частый источник ошибок и разочарований. Используя более выразительные языковые средства C++17 (или C++11, если вы используете cpr < 1.10.0), эта библиотека укладывает суть выполнения сетевых вызовов в несколько лаконичных идиом.
Вот быстрый GET-запрос:
#include <cpr/cpr.h>
int main(int argc, char** argv) {
cpr::Response r = cpr::Get(cpr::Url{"https://api.github.com/repos/whoshuu/cpr/contributors"},
cpr::Authentication{"user", "pass", cpr::AuthMode::BASIC},
cpr::Parameters{{"anon", "true"}, {"key", "value"}});
r.status_code; // 200
r.header["content-type"]; // application/json; charset=utf-8
r.text; // JSON text string
return 0;
}
https://github.com/libcpr/cpr
#cpp
👉 @Bookflow
👍2
Как malloc сломала JPGLoader в Serenity, или Как выиграть в лотерее
Пару лет назад мне выпала возможность расследовать в SerenityOS интересный баг, связанный с декодированием изображений JPG, которые по какой-то причине при просмотре выглядели так, как вы видите выше.
Странно, не так ли? Похоже, будто просто перепутали RGB и BGR. При этом внесение в JPGLoader.cpp следующего изменения:
https://habr.com/ru/companies/ruvds/articles/828224/
original https://sin-ack.github.io/posts/jpg-loader-bork/
#cpp
👉 @Bookflow
Пару лет назад мне выпала возможность расследовать в SerenityOS интересный баг, связанный с декодированием изображений JPG, которые по какой-то причине при просмотре выглядели так, как вы видите выше.
Странно, не так ли? Похоже, будто просто перепутали RGB и BGR. При этом внесение в JPGLoader.cpp следующего изменения:
- const Color color { (u8)block.y[pixel_index], (u8)block.cb[pixel_index], (u8)block.cr[pixel_index] };
+ const Color color { (u8)block.cr[pixel_index], (u8)block.cb[pixel_index], (u8)block.y[pixel_index] };
context.bitmap->set_pixel(x, y, color);
https://habr.com/ru/companies/ruvds/articles/828224/
original https://sin-ack.github.io/posts/jpg-loader-bork/
#cpp
👉 @Bookflow
👍3💩1
C++ — мощный инструмент, но с ним нужно правильно работать
Хотите писать на C++, но настройка окружения кажется головной болью?
◽️ Компилятор не видит файлы?
◽️Дебаг работает через раз?
◽️VSCode — просто красивый редактор?
💡 Приходите на открытый вебинар «Готовим рабочее место: C++ + VSCode»!
📅 5 марта в 20:00 (мск)
Мы разберём:
◽️Как настроить VSCode для C++: компиляторы, расширения, дебаг
◽️Как запускать программы без ошибок и ручной магии
◽️Как сделать среду разработки удобной и эффективной
🎯 А ещё всем участникам подарим скидку на топовый курс «C++ Developer»!
🔗 Регистрация: https://vk.cc/cJgkOF
Хотите писать на C++, но настройка окружения кажется головной болью?
◽️ Компилятор не видит файлы?
◽️Дебаг работает через раз?
◽️VSCode — просто красивый редактор?
💡 Приходите на открытый вебинар «Готовим рабочее место: C++ + VSCode»!
📅 5 марта в 20:00 (мск)
Мы разберём:
◽️Как настроить VSCode для C++: компиляторы, расширения, дебаг
◽️Как запускать программы без ошибок и ручной магии
◽️Как сделать среду разработки удобной и эффективной
🎯 А ещё всем участникам подарим скидку на топовый курс «C++ Developer»!
🔗 Регистрация: https://vk.cc/cJgkOF
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Как выполнять периодические обновления данных в PostgreSQL?
Для выполнения периодических обновлений данных в PostgreSQL можно использовать несколько подходов, в зависимости от требований к частоте обновлений и архитектуры системы. Вот основные методы:
1. CRON и SQL скрипты
- CRON (или аналогичный планировщик задач) — это системный планировщик задач, который может запускать SQL-скрипты в определенное время или с определенной периодичностью.
- Вы создаете SQL-скрипт, который выполняет необходимые обновления данных, и настраиваете CRON для его запуска.
- Пример команды в CRON:
Этот пример выполняет задачу каждую минуту.
2. pg_cron
-
- Пример:
Это задание выполняет функцию каждый час.
3. pgAgent
-
- Пример задания:
4. Встроенные средства PostgreSQL
- Если задача достаточно простая, и вы хотите обойтись без внешних инструментов, можно использовать механизм LISTEN/NOTIFY или bgworker (бэкграундные воркеры).
- LISTEN/NOTIFY: используется для уведомления процессов о событиях в базе данных. Рабочие процессы могут запускаться при получении уведомления.
- bgworker: позволяет создавать фоновый процесс, который будет периодически выполнять необходимые задачи.
5. Сервисные задачи на стороне приложения
- Если ваше приложение подключается к базе данных PostgreSQL, оно может содержать задачи, которые будут запускать обновления данных через определенные промежутки времени.
- Это подход особенно удобен, если вы хотите, чтобы приложение контролировало выполнение обновлений, а также легко интегрировало бизнес-логику.
6. Использование логических репликаций и триггеров
- В некоторых случаях, вместо периодических обновлений, может быть лучше настроить триггеры или использовать логическую репликацию для обработки изменений в данных.
7. Materialized Views
- Если вам нужно обновлять агрегированные или сложные запросы, можно использовать материализованные представления с автоматическим обновлением.
- Вы можете создать материализованное представление и настроить его автоматическое обновление через CRON или pg_cron:
Заключение
Выбор метода зависит от конкретных требований и доступных инструментов. Если вам нужно периодически выполнять задачи непосредственно в базе данных и с минимальными усилиями,
#db
👉 @Bookflow
Для выполнения периодических обновлений данных в PostgreSQL можно использовать несколько подходов, в зависимости от требований к частоте обновлений и архитектуры системы. Вот основные методы:
1. CRON и SQL скрипты
- CRON (или аналогичный планировщик задач) — это системный планировщик задач, который может запускать SQL-скрипты в определенное время или с определенной периодичностью.
- Вы создаете SQL-скрипт, который выполняет необходимые обновления данных, и настраиваете CRON для его запуска.
- Пример команды в CRON:
* * * * * psql -U user -d database -c "CALL your_update_function();"
Этот пример выполняет задачу каждую минуту.
2. pg_cron
-
pg_cron
— это расширение для PostgreSQL, которое позволяет планировать задания непосредственно из базы данных, используя SQL-синтаксис для задания расписания.- Пример:
SELECT cron.schedule('0 * * * *', $$CALL your_update_function();$$);
Это задание выполняет функцию каждый час.
3. pgAgent
-
pgAgent
— это более сложный планировщик задач, который интегрируется с PostgreSQL. Он позволяет создавать и управлять заданиями через интерфейс PgAdmin или SQL-команды.- Пример задания:
CREATE JOB update_job
STEP 1
WHEN '0 * * * *'
EXECUTE PROCEDURE your_update_function();
4. Встроенные средства PostgreSQL
- Если задача достаточно простая, и вы хотите обойтись без внешних инструментов, можно использовать механизм LISTEN/NOTIFY или bgworker (бэкграундные воркеры).
- LISTEN/NOTIFY: используется для уведомления процессов о событиях в базе данных. Рабочие процессы могут запускаться при получении уведомления.
- bgworker: позволяет создавать фоновый процесс, который будет периодически выполнять необходимые задачи.
5. Сервисные задачи на стороне приложения
- Если ваше приложение подключается к базе данных PostgreSQL, оно может содержать задачи, которые будут запускать обновления данных через определенные промежутки времени.
- Это подход особенно удобен, если вы хотите, чтобы приложение контролировало выполнение обновлений, а также легко интегрировало бизнес-логику.
6. Использование логических репликаций и триггеров
- В некоторых случаях, вместо периодических обновлений, может быть лучше настроить триггеры или использовать логическую репликацию для обработки изменений в данных.
7. Materialized Views
- Если вам нужно обновлять агрегированные или сложные запросы, можно использовать материализованные представления с автоматическим обновлением.
- Вы можете создать материализованное представление и настроить его автоматическое обновление через CRON или pg_cron:
REFRESH MATERIALIZED VIEW CONCURRENTLY your_view;
Заключение
Выбор метода зависит от конкретных требований и доступных инструментов. Если вам нужно периодически выполнять задачи непосредственно в базе данных и с минимальными усилиями,
pg_cron
и pgAgent
— отличные варианты. Если хотите контролировать задачи с уровня операционной системы, то CRON или системные задачи на стороне приложения будут лучшим решением.#db
👉 @Bookflow
👍6
Media is too big
VIEW IN TELEGRAM
Плывущий экран. Вирус на C++. Melting Screen
Программа предоставлена в образовательных целях! Автор не несёт ответственности за её использование!
В этом видео вы узнаете как написать вирус на с++ который заставляет экран сыпаться и плыть.
источник
#cpp
👉 @Bookflow
Программа предоставлена в образовательных целях! Автор не несёт ответственности за её использование!
В этом видео вы узнаете как написать вирус на с++ который заставляет экран сыпаться и плыть.
источник
#cpp
👉 @Bookflow
👍8👎1
🦾Хотите глубже понять управление процессами в микросервисах и повысить надёжность систем? На ум сразу приходят распределённые транзакции – классический, но, увы, проблематичный метод. Но мы предлагаем кое-что получше: шаблон «Сага»!
На открытом вебинаре "«Саги» vs распределённые транзакции: как моделировать рабочие потоки в распределённой архитектуре"
Вы узнаете:
- Почему распределённые транзакции могут быть непрактичны в контексте микросервисов
- Как работает Сага и в чём преимущества этого шаблона
- Какие типы «саг» существуют и как их применять
- Как использовать Сагу для моделирования сложных рабочих потоков
И, конечно же, получите важные рекомендации по внедрению саг в реальных проектах.
Будет интересно архитекторам ПО, системным аналитикам, бэкенд и фулстек-разработчикам.
💬Спикер: Сергей Прощаев Java-разработчик в ПАО «Сургутнефтегаз».
Бонус! Скидка 5% на любой курс OTUS и чек-лист «Подойдёт ли вам шаблон SAGA? Семь вопросов создателю проекта»
⏰6 марта, 19:00 МСК, Бесплатно
Записаться на событие: https://vk.cc/cJjNRl
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
На открытом вебинаре "«Саги» vs распределённые транзакции: как моделировать рабочие потоки в распределённой архитектуре"
Вы узнаете:
- Почему распределённые транзакции могут быть непрактичны в контексте микросервисов
- Как работает Сага и в чём преимущества этого шаблона
- Какие типы «саг» существуют и как их применять
- Как использовать Сагу для моделирования сложных рабочих потоков
И, конечно же, получите
Будет интересно архитекторам ПО, системным аналитикам, бэкенд и фулстек-разработчикам.
💬Спикер: Сергей Прощаев Java-разработчик в ПАО «Сургутнефтегаз».
Бонус! Скидка 5% на любой курс OTUS и чек-лист «Подойдёт ли вам шаблон SAGA? Семь вопросов создателю проекта»
⏰6 марта, 19:00 МСК, Бесплатно
Записаться на событие: https://vk.cc/cJjNRl
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
This media is not supported in your browser
VIEW IN TELEGRAM
Как написать 2D игру на C++ и чистом STL для терминала в Linux
После долгого и упорного труда мне стало скучно пилить микросервисы и бэкенды в хайлоде, я решил постичь магию разработки игр. Выбрал курс по Unreal Engine 5 и C++, так как там все структурировано, понятно, и в случае необходимости есть кому задать вопрос. На первой лекции по основам С++ преподаватель сразу предложил челлендж - написать 2D игру без использования игрового движка. Идея мне понравилась и я сразу приступил к реализации.
https://habr.com/ru/post/708486/
#cpp
👉 @Bookflow
После долгого и упорного труда мне стало скучно пилить микросервисы и бэкенды в хайлоде, я решил постичь магию разработки игр. Выбрал курс по Unreal Engine 5 и C++, так как там все структурировано, понятно, и в случае необходимости есть кому задать вопрос. На первой лекции по основам С++ преподаватель сразу предложил челлендж - написать 2D игру без использования игрового движка. Идея мне понравилась и я сразу приступил к реализации.
https://habr.com/ru/post/708486/
#cpp
👉 @Bookflow
👍3❤2🔥1
Прошиваем программу не только в начало FLASH памяти STM32
Знаете ли вы куда попадает ваша программа после того, как вы нажали кнопку RUN или DEBUG в IDE? Если да, то как изменить этот адрес или даже выйти за пределы постоянной памяти и прожигаться сразу в оперативную память.
Я работаю в CubeIDE и весь мой интерфейс будет именно из этой среды разработки.
Начнем с ответа на первый вопрос, если использовать стандартные настройки IDE и взять стандартный ST-LINK (не важно оригинал или свисток), то при прожигании микроконтроллера будет очищено нужное количество секторов во FLASH памяти и на их место будет записана программа, причем в самое начало FLASH памяти по адресу 0x08000000.
Тут немного остановимся. Для большинства проектов этого достаточно, программа находится во FLASH памяти, при перезагрузке микроконтроллера ни куда не исчезает и исправно запускается. Проблемы начинаются, когда приходит задача, встроить загрузчик, который будет самостоятельно принимать прошивку по одному из интерфейсов, будь то UART/USART, I2C или CAN и сохранять ее в требуемом месте FLASH памяти, а после перезагрузки должен самостоятельно подготовить и передать управление требуемой программе.
https://habr.com/ru/articles/831016/
#cpp
👉 @Bookflow
Знаете ли вы куда попадает ваша программа после того, как вы нажали кнопку RUN или DEBUG в IDE? Если да, то как изменить этот адрес или даже выйти за пределы постоянной памяти и прожигаться сразу в оперативную память.
Я работаю в CubeIDE и весь мой интерфейс будет именно из этой среды разработки.
Начнем с ответа на первый вопрос, если использовать стандартные настройки IDE и взять стандартный ST-LINK (не важно оригинал или свисток), то при прожигании микроконтроллера будет очищено нужное количество секторов во FLASH памяти и на их место будет записана программа, причем в самое начало FLASH памяти по адресу 0x08000000.
Тут немного остановимся. Для большинства проектов этого достаточно, программа находится во FLASH памяти, при перезагрузке микроконтроллера ни куда не исчезает и исправно запускается. Проблемы начинаются, когда приходит задача, встроить загрузчик, который будет самостоятельно принимать прошивку по одному из интерфейсов, будь то UART/USART, I2C или CAN и сохранять ее в требуемом месте FLASH памяти, а после перезагрузки должен самостоятельно подготовить и передать управление требуемой программе.
https://habr.com/ru/articles/831016/
#cpp
👉 @Bookflow
👍6❤2🥰2
Forwarded from Linux: Системный администратор
🔥 Разбираем `htop`: Альтернатива
Привет, коллеги! Сегодня разберем инструмент, который должен быть в арсенале каждого линукс-админа — htop. Это мощная альтернатива
📌 Почему
✅ Цветовая схема — информация подается визуально, что помогает быстрее анализировать нагрузку.
✅ Гибкость — можно настроить отображение колонок, фильтровать процессы, сортировать их по различным параметрам.
✅ Управление процессами —
✅ Горячие клавиши — удобный интерфейс для быстрого взаимодействия.
🛠 Установка
На большинстве дистрибутивов
🔹 Debian/Ubuntu:
🔹 CentOS/RHEL:
🔹 Arch Linux:
🚀 Основные фишки
🔸 Сортировка процессов — нажмите
🔸 Завершение процессов — выделяем процесс, жмем
🔸 Дерево процессов —
🔸 Поиск процесса —
🔸 Изменение приоритета (nice) —
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
top
для мониторинга системы Привет, коллеги! Сегодня разберем инструмент, который должен быть в арсенале каждого линукс-админа — htop. Это мощная альтернатива
top
, которая делает мониторинг ресурсов системы удобным и наглядным. 📌 Почему
htop
круче top
?✅ Цветовая схема — информация подается визуально, что помогает быстрее анализировать нагрузку.
✅ Гибкость — можно настроить отображение колонок, фильтровать процессы, сортировать их по различным параметрам.
✅ Управление процессами —
htop
позволяет не только наблюдать, но и управлять процессами (убивать, приостанавливать, менять приоритет и т.д.). ✅ Горячие клавиши — удобный интерфейс для быстрого взаимодействия.
🛠 Установка
На большинстве дистрибутивов
htop
уже есть в репозиториях: 🔹 Debian/Ubuntu:
sudo apt install htop
🔹 CentOS/RHEL:
sudo yum install htop
🔹 Arch Linux:
sudo pacman -S htop
🚀 Основные фишки
🔸 Сортировка процессов — нажмите
F6
, чтобы выбрать критерий сортировки. 🔸 Завершение процессов — выделяем процесс, жмем
F9
, выбираем сигнал. 🔸 Дерево процессов —
F5
(отображает родственные связи между процессами). 🔸 Поиск процесса —
F3
, вводим имя процесса. 🔸 Изменение приоритета (nice) —
F7`/`F8
для повышения/понижения приоритета. htop
— это удобный инструмент для мониторинга и управления процессами в Linux. Пользуетесь ли вы htop
или предпочитаете что-то другое? Пишите в комментариях! 👇 #Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin
👍3
CppCoreGuidelines
Основные принципы C++ - это набор проверенных рекомендаций, правил и лучших практик по программированию на C++.
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
#cpp
👉 @Bookflow
Основные принципы C++ - это набор проверенных рекомендаций, правил и лучших практик по программированию на C++.
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
#cpp
👉 @Bookflow
❤7👍3🥰1
🐼Обработка Excel-таблиц с Pandas: больше никакой рутины!
Excel — отличный инструмент, пока вы не начинаете работать с огромными таблицами, сложными расчётами и бесконечными формулами. Сортировки, фильтры, ручная обработка — это боль.
Как автоматизировать работу с таблицами и делать больше за меньшее время? На открытом вебинаре «Искусство обработки Excel-таблиц с Pandas» 11 марта в 20:00 (мск):
- Узнаем, как загружать, фильтровать и группировать данные в Pandas
- Освоим автоматизацию рутинных задач, чтобы не тратить часы на одно и то же
- Разберём, как строить графики и визуализировать данные прямо из таблиц
Всем участникам — скидка на большое обучение «Python Developer. Basic».
⚡️Регистрация открыта: https://vk.cc/cJwtOe
Excel — отличный инструмент, пока вы не начинаете работать с огромными таблицами, сложными расчётами и бесконечными формулами. Сортировки, фильтры, ручная обработка — это боль.
Как автоматизировать работу с таблицами и делать больше за меньшее время? На открытом вебинаре «Искусство обработки Excel-таблиц с Pandas» 11 марта в 20:00 (мск):
- Узнаем, как загружать, фильтровать и группировать данные в Pandas
- Освоим автоматизацию рутинных задач, чтобы не тратить часы на одно и то же
- Разберём, как строить графики и визуализировать данные прямо из таблиц
Всем участникам — скидка на большое обучение «Python Developer. Basic».
⚡️Регистрация открыта: https://vk.cc/cJwtOe
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🍌1
Что такое утечка памяти?
Утечки памяти - распространенная и досадная проблема при разработке программного обеспечения. Эти проблемы возникают, когда программа не может освободить память, которая больше не используется, что приводит к постепенной потере доступной памяти с течением времени.
Хотя поначалу утечки памяти незаметны, они могут серьезно ухудшить производительность и стабильность системы, приводя к вялому поведению, сбоям или зависанию. Они возникают из-за ошибок в программировании, например, из-за забывания деаллокации памяти или сохранения ссылок на удаленные объекты.
https://www.codereliant.io/what-is-a-memory-leak/
👉 @Bookflow
Утечки памяти - распространенная и досадная проблема при разработке программного обеспечения. Эти проблемы возникают, когда программа не может освободить память, которая больше не используется, что приводит к постепенной потере доступной памяти с течением времени.
Хотя поначалу утечки памяти незаметны, они могут серьезно ухудшить производительность и стабильность системы, приводя к вялому поведению, сбоям или зависанию. Они возникают из-за ошибок в программировании, например, из-за забывания деаллокации памяти или сохранения ссылок на удаленные объекты.
https://www.codereliant.io/what-is-a-memory-leak/
👉 @Bookflow
👍5