#Собес #mongoDB
🤔 Что такое map-reduce в MongoDB и когда его следует использовать?
💬 Кратко:
Map-reduce в MongoDB - это парадигма обработки данных, состоящая из двух этапов:
🟠 Мар: Вы определяете функцию, которая обрабатывает каждый документ и выводит пары ключ-
значение.
🟠 Reduce: Вы определяете функцию, которая агрегирует или вычисляет данные на основе этих пар.
Map-reduce полезен для сложных операций агрегации, которые трудно выполнить с помощью
стандартных методов агрегирования MongoDB.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Map-reduce в MongoDB - это парадигма обработки данных, состоящая из двух этапов:
значение.
Map-reduce полезен для сложных операций агрегации, которые трудно выполнить с помощью
стандартных методов агрегирования MongoDB.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#полезное
😐 В .NET 9 может быть самая удобная платформа для микросервисов и вот почему.
Обычно команды тратят недели, чтобы собрать в кучу отказоустойчивость, наблюдаемость, сервис-дискавери и API-шлюзы.
В .NET 9 всё это уже есть из коробки.
🔴 Resilience
Встроенные ретраи, таймауты и circuit breakers, без сторонних библиотек.
🔴 Observability
Поддержка OpenTelemetry из коробки. Трассировки, метрики и логи без лишних усилий.
🔴 .NET Aspire
Cloud-native стек для быстрых распределённых систем.
🔴 Service Discovery
Можно использовать логические имена сервисов вместо жёстко прописанных URL. В рантайме они резолвятся через конфиг.
🔴 API Gateway
YARP — лёгкий reverse proxy, который работает и как API-шлюз, с минимальной настройкой.
Если вы строите микросервисы на .NET, больше не нужно собирать инфраструктуру вручную.
Подробности: ссылка
👉 Новости 👉 База вопросов
Обычно команды тратят недели, чтобы собрать в кучу отказоустойчивость, наблюдаемость, сервис-дискавери и API-шлюзы.
В .NET 9 всё это уже есть из коробки.
Встроенные ретраи, таймауты и circuit breakers, без сторонних библиотек.
Поддержка OpenTelemetry из коробки. Трассировки, метрики и логи без лишних усилий.
Cloud-native стек для быстрых распределённых систем.
Можно использовать логические имена сервисов вместо жёстко прописанных URL. В рантайме они резолвятся через конфиг.
YARP — лёгкий reverse proxy, который работает и как API-шлюз, с минимальной настройкой.
Если вы строите микросервисы на .NET, больше не нужно собирать инфраструктуру вручную.
Подробности: ссылка
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😐 Как включить DATAS в .NET 8
Dynamic adaptation to application sizes (DATAS) по умолчанию включен в dotnet 9, и многие приложения благодаря этому заметно сократили потребление памяти.
В .NET 8 можно включить его через настройку выше.
Не забудь прогнать бенчмарки своего сценария до и после.
https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/datas
👉 Новости 👉 База вопросов
Dynamic adaptation to application sizes (DATAS) по умолчанию включен в dotnet 9, и многие приложения благодаря этому заметно сократили потребление памяти.
В .NET 8 можно включить его через настройку выше.
Не забудь прогнать бенчмарки своего сценария до и после.
https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/datas
Please open Telegram to view this post
VIEW IN TELEGRAM
😍1
#Собес #mongoDB
🤔 Объясните концепцию уровня подтверждения записи (write concern) в MongoDB.
💬 Кратко:
Уровень подтверждения записи (write concern) в MongoDB определяет, сколько узлов репликационного набора должны подтвердить выполнение операции записи (вставка, обновление, удаление), чтобы она считалась успешной. Существует несколько уровней подтверждения:
🟠 Unacknowledged: Запись выполняется без ожидания подтверждения.
🟠 Acknowledged: Ожидается подтверждение от основного узла.
🟠 Majority: Ожидается подтверждение от большинства узлов репликационного набора, что гарантирует сохранность данных.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Уровень подтверждения записи (write concern) в MongoDB определяет, сколько узлов репликационного набора должны подтвердить выполнение операции записи (вставка, обновление, удаление), чтобы она считалась успешной. Существует несколько уровней подтверждения:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
👋 Малоизвестная фича в C# —
Она позволяет давать новое имя уже существующему типу.
Мы использовали её в крупном проекте по модернизации, где было море конфликтов типов, и это реально спасло.
Причём alias работает даже с кортежами.
👉 Новости 👉 База вопросов
type aliasОна позволяет давать новое имя уже существующему типу.
Мы использовали её в крупном проекте по модернизации, где было море конфликтов типов, и это реально спасло.
Причём alias работает даже с кортежами.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😵 Мало кто из разработчиков знает про Dynamic Authorization в
В
Это когда доступ к ресурсу зависит не только от роли пользователя, но и от его атрибутов, самого ресурса и окружения.
Примеры: автор может редактировать только свои книги, а региональный менеджер управляет данными только в своём регионе.
Реализуется это через Attribute-Based Authorization с
Подход полезен там, где нужно гибкое и контекстное управление правами.
Подробнее про best practices в
👉 Новости 👉 База вопросов
ASP.NET CoreВ
ASP.NET Core, помимо Role-Based и Claims-Based подходов, можно использовать Dynamic AuthorizationЭто когда доступ к ресурсу зависит не только от роли пользователя, но и от его атрибутов, самого ресурса и окружения.
Примеры: автор может редактировать только свои книги, а региональный менеджер управляет данными только в своём регионе.
Реализуется это через Attribute-Based Authorization с
IAuthorizationRequirement и AuthorizationHandler.Подход полезен там, где нужно гибкое и контекстное управление правами.
Подробнее про best practices в
ASP.NET Core читай тутPlease open Telegram to view this post
VIEW IN TELEGRAM
❤3
#полезное
😵 Docker + .NET pro tip
Для .NET приложений используйте многоступенчатую сборку: сначала компилируем и публикуем, потом копируем только готовые бинарники в минимальный рантайм-образ.
Преимущества:
🔵 минимальный размер финального контейнера,
🔵 быстрый запуск без SDK, только рантайм,
🔵 меньше уязвимостей благодаря облегчённому окружению.
👉 Новости 👉 База вопросов
Для .NET приложений используйте многоступенчатую сборку: сначала компилируем и публикуем, потом копируем только готовые бинарники в минимальный рантайм-образ.
# Этап сборки
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
# Этап финального образа
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Преимущества:
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
YeaHub
Главные новости и обновления платформы
YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.
Платформа: https://yeahub.ru
Для связи: @ruslan_kuyanets
YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.
Платформа: https://yeahub.ru
Для связи: @ruslan_kuyanets
❤4
#Собес #mongoDB
🤔 Как выполнять текстовый поиск в MongoDB?
💬 Кратко:
B MongoDB для текстового поиска используется оператор
🟠 Создайте текстовый индекс на одном или нескольких полях коллекции.
🟠 Используйте оператор $text в запросе для поиска по индексированным полям.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
B MongoDB для текстового поиска используется оператор
$text и текстовые индексы. Чтобы выполнить текстовый поиск:📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
📞 Monolith или microservices — не вопрос "что лучше".
Важно другое: каждая архитектура даёт свои плюсы и минусы.
Когда нужны микросервисы:
- независимые деплои
- разные технологии под сервисы
- гибкое масштабирование по частям
Все остальные выгоды можно получить и в монолите. Поэтому мой выбор чаще всего — modular monolith: проще, дешевле, без лишней сложности.
Подробнее: https://milanjovanovic.tech/modular-monolith-architecture?utm_source=X&utm_medium=social&utm_campaign=01.09.2025
👉 Новости 👉 База вопросов
Важно другое: каждая архитектура даёт свои плюсы и минусы.
Когда нужны микросервисы:
- независимые деплои
- разные технологии под сервисы
- гибкое масштабирование по частям
Все остальные выгоды можно получить и в монолите. Поэтому мой выбор чаще всего — modular monolith: проще, дешевле, без лишней сложности.
Подробнее: https://milanjovanovic.tech/modular-monolith-architecture?utm_source=X&utm_medium=social&utm_campaign=01.09.2025
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😎 Как писать условные и при этом читаемые запросы?
Всё что нужно, это выражение CASE.
Оно работает так же, как if else if else в C#. Как только условие срабатывает, чтение останавливается и возвращается результат, если ни одно условие не выполнилось, возвращается значение из ветки ELSE.
Главный плюс CASE в том, что уменьшается количество обращений к данным в базе, не нужно писать несколько разных запросов с разными условиями, достаточно одного CASE и одного запроса, чтобы получить нужные значения.
Кроме того, CASE полезен, если у вас несколько ORDER BY для многоуровневой сортировки.
Но есть важный момент, который я сам однажды понял на практике, использовать CASE лучше в SELECT, а не в WHERE.
Почему? потому что WHERE почти всегда работает быстрее для фильтрации строк.
👉 Новости 👉 База вопросов
Всё что нужно, это выражение CASE.
Оно работает так же, как if else if else в C#. Как только условие срабатывает, чтение останавливается и возвращается результат, если ни одно условие не выполнилось, возвращается значение из ветки ELSE.
Главный плюс CASE в том, что уменьшается количество обращений к данным в базе, не нужно писать несколько разных запросов с разными условиями, достаточно одного CASE и одного запроса, чтобы получить нужные значения.
Кроме того, CASE полезен, если у вас несколько ORDER BY для многоуровневой сортировки.
Но есть важный момент, который я сам однажды понял на практике, использовать CASE лучше в SELECT, а не в WHERE.
Почему? потому что WHERE почти всегда работает быстрее для фильтрации строк.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#Собес #mongoDB
🤔 Какие типы индексов существуют в MongoDB?
💬 Кратко:
B MongoDB существуют следующие типы индексов:
🟠 Индекс на одно поле (Single-field)
🟠 Составной индекс (Compound index)
🟠 Текстовый индекс (Text index)
🟠 Геопространственный индекс (Geospatial index)
🟠 Хешированный индекс (Hashed index)|
🟠 Шаблонный индекс (Wildcard index)|
🟠 Индекс с временем жизни (TTL index)
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
B MongoDB существуют следующие типы индексов:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
😇 Фича дня в EF Core — алгоритм Hi/Lo.
Он позволяет генерировать идентификаторы на клиентской стороне, за счёт чего уменьшается количество обращений к базе и снижается конкуренция за блокировки.
Работает это так. Приложение не берёт каждый новый ID отдельно, а запрашивает у базы целую пачку. В самой базе хранится
Минус в том, что могут появиться пропуски в последовательности, если приложение упадёт до того, как израсходует все ID из своей пачки, но это не критично.
Включается всё через метод
👉 Новости 👉 База вопросов
Он позволяет генерировать идентификаторы на клиентской стороне, за счёт чего уменьшается количество обращений к базе и снижается конкуренция за блокировки.
Работает это так. Приложение не берёт каждый новый ID отдельно, а запрашивает у базы целую пачку. В самой базе хранится
hi_value, который отражает максимальный выданный идентификатор. Когда приложению нужна новая порция, оно начинает с hi_value + 1. Минус в том, что могут появиться пропуски в последовательности, если приложение упадёт до того, как израсходует все ID из своей пачки, но это не критично.
Включается всё через метод
UseHiLo, который создаёт в базе sequence для выдачи батчей идентификаторов. После этого EF Core может сам задавать все первичные ключи на клиенте, что особенно удобно для parent/child-отношений.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😇 Слышал о новом типе UUID?
Я часто использую UUID (Guid в C#) как уникальные идентификаторы в базе.
Они удобны тем, что «рандомные», но есть и минусы.
Во-первых, они занимают много памяти — Guid в C# весит 16 байт.
Кроме того, индексы с такими значениями могут фрагментироваться, так как они не сортируемые.
Теперь появился UUID V7. Он сортируемый, потому что в нем есть компонент времени.
Его можно создать в .NET 9 через
Также он будет поддерживаться нативно в PostgreSQL 18.
👉 Новости 👉 База вопросов
Я часто использую UUID (Guid в C#) как уникальные идентификаторы в базе.
Они удобны тем, что «рандомные», но есть и минусы.
Во-первых, они занимают много памяти — Guid в C# весит 16 байт.
Кроме того, индексы с такими значениями могут фрагментироваться, так как они не сортируемые.
Теперь появился UUID V7. Он сортируемый, потому что в нем есть компонент времени.
Его можно создать в .NET 9 через
Guid.CreateVersion7Также он будет поддерживаться нативно в PostgreSQL 18.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
#Собес #mongoDB
🤔 Что такое агрегатный конвейер (aggregation pipeline) в MongoDB и как он работает?
💬 Кратко:
Агрегатный конвейер в MongoDB представляет собой последовательность этапов, каждый из которых выполняет операцию на входных документах и передает результат следующему этапу. Этапы могут включать фильтрацию (
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Агрегатный конвейер в MongoDB представляет собой последовательность этапов, каждый из которых выполняет операцию на входных документах и передает результат следующему этапу. Этапы могут включать фильтрацию (
$match ), группировку ( $group ), сортировку ($sort ), проекцию ( $project ) и другие. Это позволяет выполнять сложные преобразования и агрегации данных.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 .NET Aspire позволяет запускать фронтенд прямо из Vite
В Community Toolkit появился пакет
Что он даёт:
🟠 Запуск Vite-приложений напрямую из Aspire.
🟠 Поддержка npm, Yarn и pnpm — выбирай свой пакетный менеджер.
🟠 Автоустановка зависимостей перед стартом (`WithNpmPackageInstallation()`,
🟠 Лёгкая интеграция фронтенда и бэкенда: всё управляется из одного места.
Пример кода:
💡 Итог: теперь запуск React/Vue/Angular через Vite можно встроить прямо в Aspire, без лишних шагов и костылей.
Подробнее
👉 Новости 👉 База вопросов
В Community Toolkit появился пакет
Aspire.Hosting.NodeJS.Extensions, который позволяет интегрировать Node.js-приложения в .NET Aspire. Что он даёт:
WithYarnPackageInstallation(), `WithPnpmPackageInstallation()`). Пример кода:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddViteApp("vite-demo")
.WithExternalHttpEndpoints();
builder.AddViteApp("yarn-demo", packageManager: "yarn")
.WithExternalHttpEndpoints();
builder.AddViteApp("pnpm-demo", packageManager: "pnpm")
.WithExternalHttpEndpoints();
builder.Build().Run();
💡 Итог: теперь запуск React/Vue/Angular через Vite можно встроить прямо в Aspire, без лишних шагов и костылей.
Подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#полезное
🤯 Простой гид по масштабированию веб-приложений
Система с более чем миллионом пользователей была масштабирована пошагово
1⃣ Начало с простого
Приложение изначально монолит. Один API-сервер, одна база данных. Несколько лет работало стабильно, но с ростом пользователей система начала тормозить
2⃣ Масштабирование API
База данных пока не была узким местом. Масштабирование API и добавление балансировщика нагрузки в Azure позволили обрабатывать больше запросов. Вертикальное масштабирование DB-сервера сработало на время, но позже потребовалось больше
3⃣ Кэширование
Сначала использовался простой in-memory кэш на серверах. Позже внедрён Redis, распределённый кэш снизил нагрузку на базу. Большинство запросов стало обслуживаться из кэша
Главный совет
Решать проблему, которая есть сейчас. Не переусложнять архитектуру раньше времени
Подробнее о масштабировании приложений
👉 Новости 👉 База вопросов
Система с более чем миллионом пользователей была масштабирована пошагово
Приложение изначально монолит. Один API-сервер, одна база данных. Несколько лет работало стабильно, но с ростом пользователей система начала тормозить
База данных пока не была узким местом. Масштабирование API и добавление балансировщика нагрузки в Azure позволили обрабатывать больше запросов. Вертикальное масштабирование DB-сервера сработало на время, но позже потребовалось больше
Сначала использовался простой in-memory кэш на серверах. Позже внедрён Redis, распределённый кэш снизил нагрузку на базу. Большинство запросов стало обслуживаться из кэша
Главный совет
Решать проблему, которая есть сейчас. Не переусложнять архитектуру раньше времени
Подробнее о масштабировании приложений
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #mongoDB
🤔 Что такое покрытый запрос в MongoDB?
💬 Кратко:
Покрытый запрос в MongoDB — это запрос, все поля которого содержатся в индексе. MongoDB может удовлетворить запрос, просто сканируя индекс, без необходимости обращаться к фактическим данным в коллекции. Это значительно ускоряет выполнение запроса, уменьшая нагрузку на диск и улучшая производительность.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
💬 Кратко:
Покрытый запрос в MongoDB — это запрос, все поля которого содержатся в индексе. MongoDB может удовлетворить запрос, просто сканируя индекс, без необходимости обращаться к фактическим данным в коллекции. Это значительно ускоряет выполнение запроса, уменьшая нагрузку на диск и улучшая производительность.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Интерактивный визуальный гид по математике и алгоритмам через концепты геймдева — https://redblobgames.com
Особое внимание уделите главам про теорию графов
👉 Новости 👉 База вопросов
Особое внимание уделите главам про теорию графов
Please open Telegram to view this post
VIEW IN TELEGRAM
Существует малоизвестный многим программистам паттерн обработки ошибок под названием Result Pattern.
Result Pattern используется, чтобы избежать избыточного применения исключений при доменных валидациях. Этот паттерн инкапсулирует тип, добавляя состояние успеха и состояние ошибки.
Его можно применять для доменных валидаций, а также для асинхронных операций - например, запросов к базе данных или HTTP-запросов.
👉 Новости 👉 База вопросов
Result Pattern используется, чтобы избежать избыточного применения исключений при доменных валидациях. Этот паттерн инкапсулирует тип, добавляя состояние успеха и состояние ошибки.
Его можно применять для доменных валидаций, а также для асинхронных операций - например, запросов к базе данных или HTTP-запросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2