METANIT.COM – Telegram
METANIT.COM
5.79K subscribers
1.64K photos
79 videos
9 files
985 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Event Sourcing и CQRS
(продолжение в следующем посте)
👍11🔥1👏1
Event Sourcing и CQRS
(продолжение предыдущего поста)

* Event Sourcing и CQRS — архитектурные шаблоны, которые часто применяют совместно в системах, управляемых событиями.
* Event Sourcing фиксирует каждое изменение в системе в виде последовательности событий, а не просто сохраняет текущее состояние.
* CQRS разделяет операции записи (команды) и чтения (запросы) в системе для лучшей масштабируемости и наглядности.

Как работает Event Sourcing

* Вместо сохранения только конечного состояния (например, «баланс = 200 $») система записывает каждое событие («Добавлено 100 $», «Снято 50 $» и т. д.).
* Текущее состояние вычисляется путём воспроизведения прошлых событий.
* Система работает как хронологическая книга учёта — прозрачная, поддающаяся аудиту и воспроизводимая.

Компоненты

* Хранилище событий — сохраняет все события в хронологическом порядке (только добавление).
* Обработчики команд — обрабатывают поступающие действия и создают новые события.
* Процессоры событий — реагируют на сохранённые события, обновляют проекции или запускают побочные эффекты.
* Проекции — представляют оптимизированные для чтения представления, построенные на основе воспроизведённых событий.

Поток данных

Команда → Создание события → Сохранение события → Обновление проекций → Перестроение состояния по требованию

Преимущества

* Полный аудит и возможность «путешествовать во времени» среди данных.
* Простота отладки и воспроизведения истории системы.
* Естественная совместимость с распределёнными и управляемыми событиями системами.
* Поддержка реактивных и асинхронных рабочих процессов.

Недостатки

* Объём хранилища может быстро расти.
* Сложная логика версионирования событий и их воспроизведения.
* Требуется тщательное управление проекциями и согласованностью.

Как работает CQRS

* Расшифровывается как *разделение ответственности команд и запросов* (Command Query Responsibility Segregation).
* Разделяет систему на две части:
* Сторона команд — обрабатывает операции записи (создание, обновление, удаление).
* Сторона запросов — обрабатывает операции чтения (эффективное получение данных).
* Каждая часть может масштабироваться, моделироваться и оптимизироваться независимо.

Преимущества

* Оптимизированная производительность для операций чтения и записи.
* Лучшее разделение ответственности и более чистый дизайн.
* Проще развивать модели чтения, не затрагивая операции записи.
* Хорошо сочетается с Event Sourcing для создания проекций.

Недостатки

* Больше компонентов — повышается сложность архитектуры.
* Согласованность между сторонами чтения и записи достигается не сразу (eventual consistency).
* Требуются надёжные механизмы обмена сообщениями и синхронизации.

Совместный поток (Event Sourcing + CQRS)

Команда → Генерация события → Сохранение события → Обновление проекции → Чтение запроса из проекции

Когда применять

* Системы, требующие аудита, возможности воспроизведения или управляемые событиями рабочие процессы.
* Приложения, где операций чтения значительно больше, чем операций записи (например, аналитические панели).
* Финансовые системы, бухгалтерские книги, CRM, системы отслеживания логистики и платформы IoT.
👍63👏1
Кто-нибудь пробовал так программировать? (из фильма про создание/развитие языка Python)
😁45🥴15🤯8👍5🤮4👎2💯1
Красота математики
35👍16🤓10🖕5🤨4❤‍🔥3🔥3😍3🌚1🍓1
Мало известные, но тем не менее полезные возможности SQL: WHERE vs HAVING, WINDOW FUNCTIONS vs AGGREGATION и PARTITIONED-Таблицы
(описание в следующем посте)
Мало известные, но тем не менее полезные возможности SQL: WHERE vs HAVING, WINDOW FUNCTIONS vs AGGREGATION и PARTITIONED-Таблицы
(описание к изображению из предыдущего поста)

### WHERE vs HAVING
- WHERE: Используется для фильтрации строк перед группировкой. Например, в таблице с данными о продажах магазинов, WHERE позволяет выбрать только те строки, которые соответствуют определённым условиям (например, WHERE Store IN ('store1', 'store2')).
- HAVING: Применяется для фильтрации после группировки. Например, HAVING SUM(Sales) > 4000 отбирает группы, где сумма продаж превышает 4000.

### WINDOW FUNCTIONS vs AGGREGATION
- WINDOW FUNCTIONS: Позволяют выполнять вычисления по набору строк, связанных с текущей строкой. Они сохраняют все строки и добавляют вычисленные значения. Например, можно рассчитать сумму продаж для каждого магазина, сохраняя все строки.
- AGGREGATION: Использует функции, такие как SUM, COUNT, AVG, для объединения данных в одну строку. Например, SUM(Sales) GROUP BY Store суммирует продажи по каждому магазину.

### PARTITIONED Tables
- PARTITIONING: Это метод разделения таблицы на более мелкие части (разделы) для улучшения производительности и управления данными. На изображении показано создание четырёх разделов:
- Раздел 1: Данные до 2022-12-31.
- Раздел 2: Данные за 2023 год.
- Раздел 3: Данные за 2024 год.
- Раздел 4: Данные после 2025 года.

Пример кода для создания раздела:
CREATE PARTITION FUNCTION PF_OrderDate (DATE) 
AS RANGE RIGHT FOR VALUES ('2022-12-31', '2023-12-31', '2024-12-31');
4
Минцифры опровергло сообщения об утечке данных пользователей Max

Минцифры РФ после проверки опровергло информацию о том, что данные пользователей портала Госуслуг якобы утекли из национального мессенджера Max.

"Данные пользователей Госуслуг надёжно защищены. Специалисты Минцифры проверили информацию о якобы случившейся утечке из мессенджера Max, размещённую в анонимных каналах", - говорится в сообщении.

По данным Минцифры, "автором информации об утечке был выложен сэмпл, содержащий 15 записей, в которых были указаны якобы ID пользователей Госуслуг".

"Проверка показала, что ни по одной из опубликованных записей ID Госуслуг не совпадает с ФИО реальных пользователей. Из чего можно сделать вывод, что публикации о взломе сфабрикованы", - говорится в сообщении.

Также опровергли о взломе мессенджера в пресс-службе самого разработчика Max.


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

https://www.interfax.ru/russia/1053484
https://tass.ru/ekonomika/25390039
🤡22😁13👍31🤔1
Средняя зарплата профильных технических сотрудников софтверных компаний в 2024 году увеличилась на 13,5% по сравнению с 2023 г. и достигла примерно ₽200 тыс., что более чем в 2 раза больше, чем по всей экономике (около ₽88 тыс.). В то же время, разрыв в уровне зарплат по отношению с другими отраслями медленно, но всё же сокращается: прирост по всем отраслям, включая госсектор, составил 18,3%, что почти на 5 процентных пунктов больше, чем в софтверной индустрии.

В отдаленные времена средняя зарплата в софтверной индустрии росла намного быстрее аналогичного показателя для всей экономики России. В 2017 г. впервые очевидного преимущества разработчиков программного обеспечения по темпам роста зарплат выявлено не было. В 2018-2019 гг. рост средней зарплаты разработчиков ПО и увеличение номинальной начисленной заработной платы работников в целом по экономике РФ и вовсе сравнялись. В последующие годы, вплоть до 2024 года, у софтверной индустрии не было преимущества по темпам роста относительно всех отраслей (за исключением пандемийного 2020 года, за который разработчики ПО прибавили в своих доходах в среднем 11%, а по всем видам занятости прирост составил только 6%).

https://russoft.org/news/razrabotchiki-po-poteryali-lidiruyushhie-pozitsii-po-tempam-rosta-srednej-zarplaty-no-po-prezhnemu-uverenno-sohranyayut-ih-po-absolyutnoj-velichine/
🤔2
Динамика зарплат программистов по годам
😭18👌4🤨3🤬21
😐47🗿14🤡8👍6🤔4🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядно как работает Null Pointer (нулевой указатель)
👍18
Microsoft предупредила пользователей USB-мыши и клавиатуры о проблемах с обновлением KB5066835 для Windows 11
На прошлой неделе Microsoft выпустила первое обновление KB5066835 для Windows 11 25H2. Теперь компания подтвердила, что после его установки USB-клавиатура и мышь могут не регистрироваться в среде восстановления Windows (WinRE): «После установки обновления безопасности Windows, выпущенного 14 октября 2025 года (KB5066835), USB-устройства, такие как клавиатура и мышь, не работают в среде восстановления Windows (WinRE). Эта проблема препятствует навигации по любым параметрам восстановления в WinRE. Обратите внимание, что USB-клавиатура и мышь продолжают нормально работать в операционной системе Windows».

https://learn.microsoft.com/en-us/windows/release-health/status-windows-11-25H2#3696msgdesc

PS. Обновления Windows 11 - это какая-то катастрофа....
😁22🤡16💯2
Microsoft начала массовое развёртывание обновления Windows 11 версии 25H2 для всех совместимых устройств, включая ПК на Windows 10.

В 25H2 активируются функции, которые уже были включены в версии 24H2. Его главная цель — обновить срок поддержки системы. После установки 25H2 пользователи получат поддержку на 24 месяца, пользователи корпоративных версий — на 36 месяцев, что обеспечит регулярные обновления и защиту до 2028 года.

Кроме того, обновление включает улучшения для работы ПК Copilot+ AI и элементов интерфейса, таких как панель задач.

Владельцы ПК на Windows 10 или Windows 11 могут проверить наличие обновления через «Параметры» > «Центр обновления Windows» > «Проверить наличие обновлений». Если устройство готово к обновлению, появится опция «Загрузить и установить Windows 11 версии 25H2».

Полный список нововведений доступен на сайте Microsoft: https://support.microsoft.com/en-us/windows/inside-this-update-93c5c27c-f96e-43c2-a08e-5812d92f220d
😁4🤮42👍1🔥1
Формула жизни:
Осмысленная жизнь — это интеграл маленьких радостей каждого мгновения.
👍35🔥5🤡42👏2🍌1
Шпаргалка по алгоритмам машинного обучения
👍6🔥1👏1🤮1😨1
В руководство по языку Java добавлены новые статьи:

Асинхронные задачи FutureTask. Callable и Future
https://metanit.com/java/tutorial/8.13.php

Executor - исполнитель задач
https://metanit.com/java/tutorial/8.14.php

Координация выполнения асинхронных задач
https://metanit.com/java/tutorial/8.15.php

#java
❤‍🔥13👍4🔥2
НИУ ВШЭ представила исследование, где оценила ущерб авторов от использования ИИ в 1 трлн рублей

Расчёты проводились для профессий, наиболее подверженных рискам из-за использования ИИ. Всего выделено 12 таких групп. Наибольшие риски отмечены у переводчиков и лингвистов: к 2030 году доля генеративных произведений в этой сфере может достичь трети всего контента. На втором месте — писатели, поэты, литераторы и композиторы (28%), на третьем — программисты и разработчики приложений (26%). Далее следуют журналисты (24%) и специалисты по рекламе и маркетингу (22%).

Председатель Российского центра оборота прав на результаты творческой деятельности Андрей Кричевский заявил, что такие потери создают риск деградации творческих профессий, так как авторы теряют мотивацию и стимулы. Поскольку речь идёт не только о финансовом ущербе, но и о снижении значимости авторства из-за распространения безличного ИИ-контента.

Наибольшие потери от замещения труда ИИ понесут программисты и разработчики приложений — 542,3 млрд рублей. Далее следуют специалисты по рекламе и маркетингу — 169,9 млрд рублей, переводчики и лингвисты — 48,8 млрд рублей. Также с большим ущербом от распространения генеративного контента столкнутся писатели, поэты и литераторы — 42 млрд рублей,а ещё музыканты, певцы и композиторы — 25,25 млрд рублей.

https://www.vedomosti.ru/media/articles/2025/10/15/1146990-uscherb-dlya-avtorov
🤯16😱75🤬4🫡2🤷‍♂1👍1👎1😁1
Совет по Linux:

Нужно повторять команду каждые несколько секунд?

Используйте:
$ watch -n 2 df -h


Эта команда запустит команду "df -h" каждые 2 секунды.
Отлично подходит для отслеживания использования диска, нагрузки или изменения размера журнала.

Для завершения нажмите q.

#linux
🔥239👍5
В Общественной палате РФ предложили ввести идентификацию по паспорту для доступа к контенту 18+ в интернете
Член комиссии Общественной палаты РФ по общественной экспертизе законопроектов и иных нормативных актов Евгений Машаров сообщил, что значительная часть российских подростков имеет неограниченный доступ к контенту 18+, включая видеоролики блогеров с ненормативной лексикой, сценами насилия и пропагандой асоциального поведения, что приводит к формированию у молодёжи искажённых моделей поведения и утрате культурных ориентиров.

«Что можно этому противопоставить, чтобы исправить ситуацию, выровнять психологическое состояние ещё неокрепших умов — это определить, что контент с маркировкой 18+ может быть доступен для российских пользователей лишь после идентификации через паспорт, водительские права, банковские данные», — пояснил представитель Общественной палаты РФ.

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

https://ria.ru/20251021/internet-2049496070.html
🤡32💩8👎5👍3😁31🤔1
15 эвристик для успешного проектирования систем:
(продолжение в следующем посте)
👍6🔥3👏2😁1
15 эвристик для успешного проектирования систем:
(продолжение предыдущего поста)

1. Задержка + Глобальный масштаб → CDN
↳ Доставляйте данные с пограничных серверов, чтобы сократить задержку

2. Чтение + Узкое место → Кэш
↳ Храните часто запрашиваемые данные в кэше, чтобы снизить нагрузку на базу данных

3. Запись + Резкий рост нагрузки → Очередь
↳ Ставьте операции записи в очередь для фоновой обработки в периоды высокой нагрузки

4. Распределённая система + Транзакции → Saga
↳ Используйте компенсирующие действия для обработки транзакций, затрагивающих несколько сервисов

5. ACID + Реляционные данные → SQL
↳ Используйте SQL‑базу данных для строгой согласованности и целостности транзакций

6. Гибкость + Масштабирование → NoSQL
↳ Используйте NoSQL для гибкости схемы и горизонтального масштабирования

7. SQL + Масштабирование → Шардинг БД
↳ Распределяйте и разбивайте данные по шардам для масштабирования

8. Нагрузка + Рост → Масштабирование наружу (Scale Out)
↳ Добавляйте серверы для обработки дополнительной нагрузки

9. Трафик + Надёжность → Балансировка нагрузки
↳ Равномерно распределяйте запросы для повышения производительности

10. Основное + Сбои → Резервирование
↳ Дублируйте ключевые сервисы, чтобы избежать единичных точек отказа

11. Надёжность + Сбои → Репликация
↳ Реплицируйте данные для обеспечения доступности и возможности восстановления

12. Запросы + Резкий рост → Ограничение частоты (Throttle)
↳ Избегайте перегрузки сервера, ограничивая количество запросов

13. Нагрузка + Резкий рост → Автомасштабирование
↳ Автоматически увеличивайте или уменьшайте мощность серверов для управления нагрузкой

14. Реальное время + Обновления → WebSockets
↳ Используйте WebSockets для двусторонней realtime-коммуникации

15. Повтор + Безопасность → Идемпотентность
↳ Используйте идемпотентность, чтобы повторять операции без побочных эффектов
❤‍🔥5🔥4👏3