🍀BitBitGo🍀 Системный Анализ
3.32K subscribers
225 photos
156 videos
120 links
Курс «Системный анализ»
https://bitbitgo.by/
Пишем про системный анализ.
Поможем стартануть в карьере IT. Присоединяйся!
Download Telegram
Что такое разделение данных и зачем оно нужно? 🔄

Разделение данных (data partitioning) — это метод распределения информации в базе данных на отдельные части или разделы. Этот процесс позволяет системе эффективно обрабатывать большие объёмы данных, улучшая её масштабируемость, производительность и доступность.

Основные подходы к разделению данных:
1️⃣ Вертикальное разделение — данные разделяются по колонкам, которые хранятся на разных серверах. Например, частые обновления по финансовым данным могут размещаться на мощных серверах, в то время как статические данные остаются на менее производительных.
2️⃣ Горизонтальное разделение (шардинг) — строки данных делятся на группы и распределяются по разным серверам. Это подходит для повышения масштабируемости: чем больше пользователей, тем больше серверов можно подключить для обработки запросов.

Преимущества разделения данных:
🚀Масштабируемость: горизонтальное разделение позволяет легко добавлять новые сервера для обработки возросших нагрузок.
⏱️Уменьшение задержек: размещение данных ближе к пользователям снижает время доступа.
🔄Повышение доступности: если один сервер выходит из строя, другие разделы продолжают работать, поддерживая работоспособность системы.

Важные вызовы:
Процесс разделения данных также несёт в себе сложности, такие как разработка системы маршрутизации запросов, поддержка целостности данных и сложность администрирования множества серверов. Но правильно настроенное разделение помогает значительно улучшить производительность и надёжность системы в условиях большого количества данных.

#DBMS
1
Горизонтальное и вертикальное масштабирование: как выбрать подходящую стратегию? ⚙️

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

Горизонтальное масштабирование 🖥
Горизонтальное масштабирование (scale-out) предполагает добавление новых серверов для распределения нагрузки. Это особенно полезно для:
• систем с высокой нагрузкой,
• микросервисной архитектуры,
• случаев, когда важна отказоустойчивость.

Вертикальное масштабирование 📈
Вертикальное масштабирование (scale-up) подразумевает увеличение мощности существующего сервера (увеличение CPU, RAM и т.д.). Это подходит для:
• монолитных приложений,
• случаев, когда архитектура не поддерживает горизонтальное масштабирование.

Как выбрать?
Выбор зависит от архитектуры приложения, бюджета и будущих потребностей. Для динамично развивающихся систем, как правило, подходит горизонтальное масштабирование, а для стабильных монолитных решений — вертикальное.

#SYSTEMDESIGN
👌1
This media is not supported in your browser
VIEW IN TELEGRAM
Времена меняются! 🕒🧑‍💻
😁11🔥3👍1😎1
This media is not supported in your browser
VIEW IN TELEGRAM
Краткость — сестра таланта😉
😁2👍1🤔1
Команды SQL: Управление данными и транзакциями 🗄

SQL делится на несколько основных групп команд, каждая из которых решает свои задачи в управлении данными, доступом и транзакциями.

Основные группы команд:
1️⃣ DDL (Data Definition Language) 🛠
Команды для создания и изменения структуры базы данных (таблицы, индексы, представления).
Примеры: CREATE, ALTER, DROP.

2️⃣ DML (Data Manipulation Language) 🔄
Команды для манипуляций с данными — добавление, изменение, удаление и выборка.
Примеры: INSERT, UPDATE, DELETE, SELECT.

3️⃣ DCL (Data Control Language) 🔒
Команды для управления доступом пользователей и контроля прав.
Примеры: GRANT, REVOKE, CREATE USER, DROP USER.

4️⃣ TCL (Transaction Control Language) 🔄💳
Команды для управления транзакциями, включая их начало, завершение и отмену.
Примеры: BEGIN, COMMIT, ROLLBACK.

Основные операторы SQL:
SELECT — извлечение данных из таблиц.
WHERE — фильтрация данных по условию.
JOIN — объединение данных из разных таблиц.
GROUP BY — группировка данных.
ORDER BY — сортировка результатов.
HAVING — фильтрация после группировки.
IN — сравнение значений с набором.
INSERT — добавление данных.
UPDATE — обновление данных.
DELETE — удаление данных.

#DBMS
👍31👌1
TRUNCATE vs DELETE: Чем отличаются эти команды в SQL? 💡

Команды TRUNCATE и DELETE используются для удаления данных из таблиц в SQL, но они имеют существенные различия в работе, скорости и уровне контроля над удалением.

Особенности TRUNCATE ⚡️
1. Мгновенное выполнениеTRUNCATE освобождает место в таблице очень быстро, так как не выполняет физическое удаление строк.
2. Необратимость — все данные в таблице будут безвозвратно удалены.
3. Отсутствие проверки ограничений — не проверяет внешние ключи и другие ограничения целостности, что может привести к ошибкам.
4. Нет записи в журнал транзакций — изменения не записываются в журнал, поэтому операция не может быть отменена.

Особенности DELETE 📝
1. Условное удаление — позволяет удалять строки, удовлетворяющие определённым условиям, оставляя остальные.
2. Проверка ограниченийDELETE учитывает внешние ключи и ограничения целостности.
3. Запись в журнал транзакций — операции записываются в журнал, и их можно откатить при необходимости.
4. Более медленное выполнение — по сравнению с TRUNCATE, работает медленнее, особенно на больших таблицах.

Когда использовать?
• Используйте TRUNCATE для быстрого удаления всех данных из таблицы, когда не нужно соблюдать целостность и не важен откат операции.
• Используйте DELETE для выборочного удаления данных с соблюдением всех ограничений и возможности отмены.

#DBMS
3🔥2👍1
ОСНОВЫ КЭШИРОВАНИЯ 🔄

Что такое кэширование? 📂
Это процесс временного хранения данных, который ускоряет доступ к ним, уменьшая задержки и улучшая производительность системы.

Основные цели кэширования 🎯
Главная задача кэширования — уменьшение времени доступа к данным и снижение нагрузки на систему. Это достигается за счёт хранения часто запрашиваемой информации в быстром доступе.

Подходы к кэшированию 🧩
• По порядку размещения кэша
• По порядку вытеснения кэша
• По порядку взаимодействия с кэшем

Виды кэша по размещению 🗂
Браузерный кэш — хранит данные на устройстве пользователя, ускоряя загрузку веб-страниц.
Прокси-кэш — кэширует данные между пользователем и сервером, что снижает нагрузку на сервер.
Кэш базы данных — хранит часто запрашиваемые данные на уровне базы.
Распределённый кэш — общий для нескольких серверов, часто реализуется через Redis или Memcached.
In-memory кэш — кэширование данных в оперативной памяти для быстрого доступа внутри приложения.

Различные типы кэша и их размещение 🔄
Прокси-кэш удобно размещать между фронтендом и бэкендом, он фильтрует запросы и отвечает из кэша, снижая нагрузку на сервер.
Браузерный кэш — сохраняется на уровне фронтенда и хранится на устройстве пользователя, ускоряя загрузку страниц.
Распределённый кэш — общий для нескольких экземпляров приложения, позволяет разделять данные между серверами.
In-memory кэш — сохраняется в рамках одного процесса и сервера, что делает его быстрым, но ограниченным по масштабу.

Как оценивается эффективность кэширования? 📈
Для оценки эффективности внедрения кэширования используются метрики:
Процент попадания (hit rate) — доля удачных запросов в кэш.
Задержка (latency) — время доступа к данным из кэша.
Количество вытеснений (evictions) — удалённые записи из кэша, чтобы освободить место.

Стратегии кэширования 🚀
Cache Through — данные записываются и в кэш, и в основное хранилище.
Cache Aside — сначала данные ищутся в кэше, при отсутствии загружаются из базы и кэшируются.
Cache Ahead — заранее подгружаются данные в кэш для предстоящих запросов.

Дополнительные моменты ⚙️
Инвалидация — процесс удаления устаревших данных из кэша для актуализации.
Кэш-промах — когда данных нет в кэше, и их нужно загрузить из основного хранилища.
Горячие данные — часто запрашиваемые данные, которые всегда находятся в кэше для быстрого доступа.

Преимущества кэширования 💡
• Повышение производительности
• Снижение нагрузки на сервер
• Оптимизация пропускной способности
• Увеличение доступности данных

#ARCHITECTURE
👍32🔥2
Оператор HAVING в SQL: Когда и зачем его использовать? 🧐

Оператор HAVING применяется для фильтрации групп данных на основе агрегатных функций. Он похож на оператор WHERE, но если WHERE фильтрует отдельные строки, то HAVING работает с группами, которые были созданы оператором GROUP BY.

Синтаксис:
SELECT агрегатная_функция(столбец)
FROM таблица
GROUP BY группирующий_столбец
HAVING условие_фильтрации;


Пример использования:
Предположим, у нас есть таблица заказов с полями product_id, quantity и total_price. Мы хотим найти все продукты, у которых общее количество заказов превышает 100 единиц:

SELECT product_id, SUM(quantity) AS total_quantity
FROM orders
GROUP BY product_id
HAVING total_quantity > 100;


В этом запросе GROUP BY группирует строки по product_id, а HAVING фильтрует группы, где общее количество (total_quantity) превышает 100.

Особенности HAVING:
1️⃣ Используется после группировки данных с помощью GROUP BY.
2️⃣ Применяется для фильтрации групп, а не отдельных строк.
3️⃣ Условие фильтрации может включать агрегатные функции, такие как SUM(), COUNT(), AVG().

Когда использовать HAVING?
• Для поиска групп с определённой суммой, средним или количеством.
• Для фильтрации групп, которые удовлетворяют агрегированным условиям.
• Для создания сводных отчётов, в которых показываются только группы, соответствующие определённым критериям.

#DBMS
2👍2🔥1
API Gateway: Основные Функции, Применение и Трудности 🚀

Что такое API Gateway? 🔗
API Gateway (шлюз API) — это программный компонент, который управляет API и взаимодействует с различными микросервисами. Он служит единой точкой доступа к системе и предоставляет удобные функции для управления трафиком, безопасности, маршрутизации запросов и других задач, связанных с API.

Основные Протоколы 🌐
Для передачи данных через API Gateway чаще всего используется протокол HTTP/HTTPS. Это универсальный протокол для веб-приложений, который поддерживает методы, необходимые для выполнения запросов к микросервисам, такие как GET, POST, PUT и DELETE.

Основные Функции API Gateway ⚙️
API Gateway выполняет несколько ключевых функций, включая:
Маршрутизацию: направляет запросы на соответствующий микросервис.
Валидацию: проверяет правильность запросов.
Авторизацию и аутентификацию: контролирует доступ к API.
Проксирование запросов: действует как прокси между клиентом и микросервисами.
Логирование и мониторинг: отслеживает и записывает все действия для анализа.
Управление кешем: снижает нагрузку на серверы, кешируя часто запрашиваемые данные.
Преобразование протоколов: адаптирует протоколы запросов для разных клиентов.

Таким образом, API Gateway решает множество задач, что делает его полезным в масштабных и сложных проектах с микросервисной архитектурой. 🏢

Когда использовать API Gateway? 📈
API Gateway целесообразно использовать, когда:
• Проект достаточно большой и сложный, чтобы оправдать внедрение централизованного управления API.
• В системе задействовано большое количество микросервисов, что требует унификации доступа и упрощения взаимодействия.

Однако, если проект небольшой, построен на монолитной архитектуре или ограничен в ресурсах, использование API Gateway может быть избыточным и неэффективным.

Управление Трафиком и Безопасностью 🛡
API Gateway также помогает в управлении трафиком. Он может ограничивать количество запросов, поступающих к сервисам, снижая нагрузку и защищая систему от DDoS-атак. Кроме того, API Gateway предоставляет доступ только авторизованным пользователям, обеспечивая безопасность данных. 🔒

Форматы Данных для API Gateway 📂
Наиболее часто используемый формат данных для обмена через API Gateway — JSON. Он легкий и удобен для работы в веб-приложениях, хотя также поддерживаются и другие форматы, такие как XML.

Трудности при Проектировании API Gateway ⚠️
Проектирование API Gateway может вызвать ряд сложностей:
Производительность и масштабируемость: необходимо обеспечить высокую скорость работы и возможность масштабирования при увеличении нагрузки.
Обработка частичных отказов: API Gateway должен корректно обрабатывать сбои, чтобы не нарушать работу всей системы.
Реализация архитектурных шаблонов: использование общих шаблонов помогает поддерживать согласованность, но требует дополнительных усилий.

Варианты Реализации и Архитектура 🏗
API Gateway может быть реализован по-разному:
Один API Gateway для всей системы или несколько шлюзов для разных типов клиентов.
• Можно использовать готовые решения или разработать собственный API Gateway, используя соответствующие фреймворки.

Кеширование в API Gateway 💾
API Gateway поддерживает кеширование, которое помогает снизить нагрузку на серверы и ускорить время отклика. Кеширование особенно полезно для статических данных, так как позволяет избежать многократного обращения к серверу для одинаковых запросов.

Основные Шаблоны и Варианты API Gateway 🧩
API Gateway может работать в различных режимах:
Gateway Routing: перенаправляет запросы на нужные сервисы.
Gateway Aggregation: объединяет данные из нескольких микросервисов и возвращает их клиенту.
Gateway Offloading: решает задачи аутентификации, авторизации и других общих функций.

API Gateway — это мощный инструмент для организации взаимодействия с микросервисами, предоставляющий широкие возможности для управления трафиком, безопасности и эффективного распределения нагрузки. 💡
👍64🔥2
HAVING vs WHERE в SQL: В чём разница? 🔍

Операторы HAVING и WHERE в SQL применяются для фильтрации данных, но работают на разных уровнях и для разных задач. Давайте разберёмся, чем они отличаются! 😎

📌 Оператор WHERE
🔹 Фильтрует отдельные строки в таблице.
🔹 Применяется до группировки данных (GROUP BY).
🔹 Условия WHERE могут включать значения столбцов, константы и функции.

Пример использования:
SELECT * FROM orders WHERE quantity > 100;

Этот запрос вернёт строки, где значение quantity больше 100. 📈

📌 Оператор HAVING
🔸 Фильтрует группы данных (созданные агрегатными функциями).
🔸 Применяется после группировки (GROUP BY).
🔸 Условия могут включать агрегатные функции такие, как SUM(), COUNT(), AVG().

Пример использования:
SELECT product_id, SUM(quantity) AS total_quantity
FROM orders
GROUP BY product_id
HAVING total_quantity > 100;

Этот запрос сначала сгруппирует строки по product_id и затем отфильтрует только те группы, где общее количество (total_quantity) больше 100. 📊

Когда использовать WHERE и HAVING? 🤔
WHERE — для фильтрации отдельных строк на основе значений, констант или функций.
HAVING — для фильтрации групп данных на основе агрегированных значений, таких как сумма, среднее или количество. 🔢

Понимание разницы между WHERE и HAVING поможет вам более эффективно строить запросы в SQL и оптимизировать работу с данными! 🚀

#DBMS
👍51🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Типичный пересмотр зарплаты😢
👍4🔥21
This media is not supported in your browser
VIEW IN TELEGRAM
Учимся правильно транслировать экран😉
5👍2🔥1
Основы REST API: ключевые аспекты и ответы на вопросы 🌐

📍 Что содержит URL в REST-запросе?
URL в REST может включать:
• Протокол и домен 🌎
• Версию API 🆕
• Путь к ресурсу 🛠
Таким образом, он описывает, как и куда направить запрос.

📍 Какие параметры включаются в путь URL?
REST-запросы используют Path Parameters для указания конкретного ресурса. Например:
/users/{userId}{userId} указывает на пользователя с определённым идентификатором.

📍 HEADER в ответе REST
Заголовки содержат метаданные о сервере или самом ответе. Например:
Content-Type указывает на тип содержимого (например, JSON).
Cache-Control управляет кэшированием.
ETag уникально идентифицирует сущность для условной загрузки.

📍 Коды состояния
200 OK — запрос успешно выполнен.
201 Created — создан новый ресурс.
404 Not Found 🚫 — запрашиваемый ресурс не найден.

📍 Методы в REST
GET — получение данных.
POST — создание нового ресурса.
PUT — полное обновление ресурса.
PATCH — частичное обновление.
DELETE — удаление.

📍 Path Parameters vs Query Parameters
Path Parameters используются для указания ресурса: /users/{userId}.
Query Parameters добавляются после ? и служат для фильтрации или сортировки: /users?age=30.

📍 Чем отличается PUT от PATCH?
PUT полностью заменяет ресурс.
PATCH изменяет только указанные поля.

📍 ETag: зачем он нужен?
Заголовок ETag используется для проверки актуальности ресурса при условной загрузке, снижая нагрузку на сервер.
3👍3🔥2
Типы программного обеспечения и их особенности 🖥

1️⃣ Системное ПО
• Это основа работы компьютера.
• Примеры: операционные системы (Windows, Linux), драйверы устройств.
📌 Обеспечивает работу аппаратного обеспечения и выполнение приложений.

2️⃣ Прикладное ПО
• Используется для выполнения конкретных задач пользователя.
• Примеры: офисные приложения, графические редакторы, браузеры.
📌 Упрощает повседневные задачи пользователей.

3️⃣ Инструментальное ПО
• Средства для разработки и поддержки других программ.
• Примеры: компиляторы, среды разработки (IDE), тестировочные фреймворки.
📌 Используется разработчиками для создания ПО.

4️⃣ Индивидуальное ПО
• Разрабатывается для одного пользователя или организации.
• Примеры: специализированные CRM, внутренние корпоративные системы.
📌 Учитывает индивидуальные требования и процессы.

5️⃣ Групповое ПО
• Позволяет нескольким пользователям совместно работать.
• Примеры: мессенджеры, системы управления проектами (Trello, Jira).
📌 Облегчает совместную работу и коммуникацию.

6️⃣ Web/desktop/app
Web-приложения: работают через браузер (Google Docs, Facebook).
Desktop-приложения: устанавливаются на компьютер (Photoshop, Excel).
Мобильные приложения (App): разрабатываются для смартфонов (Instagram, Uber).
📌 Подход зависит от платформы и целей.

#ARCHITECTURE
3👍2🔥1
Жизненный цикл разработки программного обеспечения (SDLC) 💻

Жизненный цикл разработки ПО (Software Development Lifecycle, SDLC) — это структурированный процесс создания программного обеспечения, который охватывает весь путь от идеи до её сопровождения. Рассмотрим основные этапы:

1️⃣ Сбор и анализ требований
• Основной этап, где определяются цели, задачи и функционал будущей системы.
📌 Результат: документ с требованиями, который станет основой для следующего этапа.

2️⃣ Проектирование
• Разработка архитектуры и структуры системы.
📌 На этом этапе выбираются технологии, инструменты и создаются диаграммы (например, UML).

3️⃣ Разработка
• Написание кода согласно требованиям и проекту.
📌 Основной фокус — реализация всех функций, предусмотренных на этапе проектирования.

4️⃣ Тестирование
• Проверка качества и работоспособности ПО.
📌 Задача: найти и устранить ошибки, проверить соответствие требованиям.

5️⃣ Внедрение
• Установка готового продукта на рабочие серверы или устройства.
📌 Этап включает настройку и запуск системы в рабочую среду.

6️⃣ Сопровождение
• Обеспечение бесперебойной работы, устранение багов и добавление новых функций.
📌 Постоянный процесс, который поддерживает актуальность ПО.

#ARCHITECTURE
👍71🔥1
Кто в команде разработки IT-проектов и за что отвечает? 🛠

Каждый успешный IT-проект — это результат работы команды профессионалов, где каждый участник выполняет важную роль. Разберём, кто есть кто в IT-команде и чем занимаются аналитики разных направлений.

🔧 Ключевые роли в команде разработки и сопровождения IT-проектов

1️⃣ Разработчик (Developer)
• Создаёт код, превращая идеи в работающий продукт.
• Реализует логику, интерфейс и серверную часть приложения.

2️⃣ Аналитик (Analyst)
• Собирать требования и преобразует их в задачи для команды.
• Переводит бизнес-цели на технический язык.

3️⃣ Тестировщик (QA Engineer)
• Проверяет систему, чтобы устранить ошибки и дефекты.
• Гарантирует стабильную и безопасную работу продукта.

4️⃣ Product Manager
• Разрабатывает стратегию продукта, ориентируясь на пользователей.
• Формирует задачи, чтобы продукт приносил бизнесу максимальную пользу.

5️⃣ Project Manager
• Управляет процессами, сроками и взаимодействием внутри команды.
• Следит за выполнением задач в рамках бюджета и графика.

6️⃣ Сетевой инженер (Network Engineer)
• Настраивает инфраструктуру, включая серверы и сети.
• Отвечает за связь и стабильность работы системы.

7️⃣ DevOps Engineer
• Автоматизирует процессы, интегрирует разработки и эксплуатацию.
• Отвечает за CI/CD и стабильность серверов.

📊 Виды аналитиков и их задачи

1️⃣ Системный аналитик
• Формализует технические требования, разрабатывает архитектуру и описывает интеграции.

2️⃣ Бизнес-аналитик
• Понимает бизнес-потребности, оптимизирует процессы и ставит цели для команды.

3️⃣ Продуктовый аналитик
• Анализирует взаимодействие пользователей с продуктом.
• Помогает улучшать его с точки зрения юзабилити и бизнес-целей.

4️⃣ BI-аналитик
• Создаёт отчёты и дашборды на основе данных компании.
• Строит аналитику для оптимизации бизнес-стратегии.

5️⃣ Аналитик данных (Data Analyst)
• Обрабатывает большие объёмы данных, находит закономерности и строит визуализации.

#SYSTEMDESIGN
👍21🔥1
Виды документации и их назначение в IT-проектах 📄

Документация — ключевой элемент успешного IT-проекта. Она обеспечивает понимание процессов, целей и правил как для команды, так и для конечных пользователей. Разберём основные виды:

1️⃣ BRD (Business Requirements Document)
• Содержит бизнес-требования и цели проекта.
• Используется для согласования между заказчиком и разработчиками.

2️⃣ FSD/SRS (Functional Specification Document / Software Requirements Specification)
• Описывает функциональные и системные требования.
• Основной источник информации для разработчиков и тестировщиков.

3️⃣ Руководства пользователя
• Содержат инструкции по использованию продукта.
• Предназначены для конечных пользователей, чтобы упростить взаимодействие с системой.

4️⃣ Инструкции и регламенты
• Определяют внутренние процессы и стандартные процедуры.
• Используются для унификации работы в команде или компании.

5️⃣ База знаний
• Включает статьи, руководства и документацию для команды.
• Удобный инструмент для обучения и быстрого поиска информации.

#REQUIREMENTS
👍2🔥21
Модели управления разработкой ПО: что выбрать? 🔧

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

📐 Классические модели

1️⃣ Водопадная модель (Waterfall)
• Последовательный процесс, где каждый этап завершается перед началом следующего.
• Подходит для проектов с чёткими и неизменными требованиями.
• Пример: создание документации, реализация, тестирование — строго по порядку.

2️⃣ Итерационная модель (Iterative)
• Проект разбивается на циклы, каждый из которых добавляет новый функционал.
• Хорошо подходит для сложных проектов, где важна гибкость.
• Пример: в первом цикле создаётся MVP (минимально жизнеспособный продукт), а в следующих — добавляются новые функции.

🤝 Гибкие методологии (Agile)

1️⃣ Scrum
• Деление проекта на короткие итерации (спринты), длительностью 1–4 недели.
• Команда регулярно проводит встречи, анализирует результаты и вносит улучшения.

2️⃣ Kanban
• Управление задачами с помощью визуальной доски (например, Trello).
• Фокус на потоке задач и их завершении без чётких итераций.

3️⃣ Agile как основа
• Гибкий подход, который ориентируется на быструю поставку продукта и взаимодействие команды.
• Принципы Agile включают: адаптивность, сотрудничество, и приоритет рабочих продуктов.

#SYSTEMDESIGN
👍31👏1