Системный Аналитик – Telegram
Системный Аналитик
18.6K subscribers
91 photos
4 videos
49 files
254 links
Канал для системных аналитиков и не только: подборки полезных материалов на все случаи жизни.

Реклама и сотрудничество @radale

https://gosuslugi.ru/snet/67b0613c6411ff785396754a
Download Telegram
Apache_Kafka_Потоковая_обработка_и_анализ_данных.pdf
8.2 MB
Apache Kafka. Потоковая обработка и анализ данных

✍️ Авторы: Гвен Шапира, Тодд Палино, Раджини Сиварам, Крит Петти
🗓 Год издания: 2023
🔤 Язык: русский
📚 Объём: 512 стр.

Второе издания бестселлера о Kafka.

При работе любого корпоративного приложения образуются данные: файлы журналов, показатели, информация об активности пользователей, исходящие сообщения и другие. Правильное управление этими данными не менее важно, чем сами данные. Если вы архитектор, разработчик или инженер-технолог, но вы пока не знакомы с Apache Kafka, то из этой обновленной книги вы узнаете, как работать с потоковой платформой Kafka, позволяющей обрабатывать потоки данных в реальном времени. Дополнительные главы посвящены API AdminClient от Kafka, транзакциям, новым функциям безопасности и изменениям в инструментарии.

Инженеры из Confluent и LinkedIn, ответственные за разработку Kafka, объясняют, как с помощью этой платформы развертывать производственные кластеры Kafka, писать надежные управляемые событиями микросервисы и создавать масштабируемые приложения для потоковой обработки данных. На подробных примерах вы изучите принципы проектирования Kafka, гарантии надежности, ключевые API и детали архитектуры.

5 причин добавить эту книгу в свою библиотеку:
1. Авторы — разработчики Kafka.
2. Лучшие практики развертывания и настройки Kafka.
3. Шаблоны и требования для обеспечения надежной доставки данных.
4. Паттерны построения конвейеров данных и приложений с помощью Kafka.
5. Правильные мониторинг, настройка и обслуживание Kafka в рабочей среде.

#интеграции
👍3911🔥6👏32
Хранимые процедуры и пользовательские функции в БД

📌Кратко

Хранимые процедуры предназначены для выполнения действий, а пользовательские функции - для вычислений и возврата значений.


✔️ Хранимые процедуры

Это набор инструкций, которые выполняют любые операции с данными, сложную логику или задачи на стороне сервера БД
🟡компилируются один раз и хранятся на сервере
🟡могут содержать циклы, условные операторы
🟡как в обычном коде в языках программирования, можно реализовать логику работы с данными
🟡могут принимать параметры и возвращать результаты, но могут и не возвращать

Как используются?

🔘выполнение сложных операций (сортировка, фильтрация и агрегация), сложной бизнес-логики
🔘могут включать несколько операций, которые выполняются как одна транзакция
🔘последовательное выполнение нескольких SQL-команд
🔘регулярно выполняющихся операций, требующих быстрого повторного исполнения
🔘обеспечивают защиту, выполняясь на стороне сервера БД, а также контролируют доступ и выполнение операций. С помощью процедур можно реализовать логику доступа, проверки прав и аутентификации пользователей

Примеры

процедура принимает ID сотрудника в качестве входного параметра и возвращает его имя из таблицы Employees
процедура принимает данные о новом заказе (например, клиент, товары, количество) и добавляет соответствующую запись в базу данных.
входной параметр -- ID заказа, процедура извлекает информацию о товарах в заказе и вычисляет стоимость всех товаров.


〰️ Минусы
💩 когда сложны, тяжело поддерживаемы, возникают проблемы с рефакторингом
💩могут создавать зависимость от конкретной СУБД — затрудняет масштабирование
💩хранение бизнес-логики в PLSQL ведет к созданию монолита. Его дальнейшее разбиение затрудняется
💩 отладка не всегда удобна, логирование и обработка ошибок выполняется вручную


Пользовательские функции

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

Как используются?

🔘 для сложных логических или арифметических операций
🔘возвращаемые значения используются в др. запросах / выражениях
🔘для использования операторах SQL (SELECT, WHERE и тд) для вычисления значений
🔘фильтрации данных, поиска определенных значений или обработки данных по заданными условиями
🔘для работы с текстовыми данными (разбиение строк, поиск подстрок, замена символов и тд)

Пример:
преобразование даты в определенный формат или вычисление дополнительных параметров на основе входных данных.
входные параметры -- ID пользователя и ID ресурса, в ответе булевое значение, указывающее, имеет ли пользователь доступ к этому ресурсу

〰️ Минусы
💩не эффективны в сложных запросах
💩на больших объемах данных могут привести к низкой производительности
💩отладка может быть трудной из-за изоляции от основного кода
💩могут зависеть от контекста сессии или окружения, что может привести к неожиданным результатам

✔️ Основные различия

Назначение
🟡процедуры -- для выполнения последовательности операций и изменения данных в БД
🔵функции -- для выполнения вычислений и возвращения результата

Возвращаемые значения
🟡процедуры могут возвращать 0 или более значений или изменять состояние БД
🔵функции возвращают только одно значение

Типы вызовов
🟡процедуры -- как отдельными операторами SQL, так и из других процедур и функций.
🔵функции -- вызываются обычно внутри запросов SQL или в выражениях, где нужно вычислить значения


ХП и пользовательские функции могут использоваться не только в БД, а еще в:
🟣приложениях на стороне сервера: могут быть частью серверных приложений, написанных на Java, C#, Python и др. Используются для обработки данных на сервере перед отправкой их клиенту.
🟣интеграциях в веб
🟣интеграциях с внешними системами, такими как API, сервисы и внешние БД, чтобы обрабатывать данные и для взаимодействия между приложениями и платформами.


⭐️ Подборки материалов по этой и другим темам доступны в
базе знаний по системному анализу

#бд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3716🔥8👏3🤡3
Денормализация в БД и не только

Ранее мы рассказывали про нормализацию в БД, рассмотрим обратный процесс.

Денормализация — внесение избыточности в БД путём объединения таблиц, чтобы упростить структуру и ускорить чтения данных

Отличие от нормализации

Нормализация нужна для устранения избыточности данных; для разделения информации по отдельным таблицам, чтобы обеспечать целостность и упростить обслуживания БД
😀Увеличивает количество джойнов при выполнении запросов и может замедлять чтение данных

Денормализация
, наоборот, вводит избыточность обратно в БД, объединяя таблицы и дублируя информацию
😀Запросы становятся проще, операции чтения быстрее. Но могут возникнуть трудности с поддержкой и обновлением из-за риска несогласованности


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

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

Методы

😀 Добавление избыточных данных: дублирование данных в нескольких таблицах для сокращения соединений при запросах
😀 Добавление производных или агрегированных столбцов: включение полей с предварительно вычисленными значениями, например, общей суммы заказа.
😀 Объединение таблиц: слияние смежных таблиц в одну для уменьшения операций соединения
😀 Денормализация иерархических структур: дублирование информации о верхних уровнях иерархии на нижних для упрощения запросов
😀 Использование материализованных представлений: хранение результатов сложных запросов в виде отдельной таблицы для быстрого доступа
😀 Введение таблиц сумм и счётчиков: создание отдельных таблиц для хранения суммарной информации, например, общее количество товаров, проданных за день, или общее количество посетителей сайта. Позволяет избежать необходимости агрегации больших объёмов данных при каждом запросе

Примеры

😀Агрегация данных: в таблице заказов хранится не только идентификатор клиента, но и агрегированная информация о клиенте, например, общая сумма покупок. Это избавляет от необходимости соединять таблицы заказов и клиентов для расчета общих покупок клиента
😀Кэширование результатов запросов: в таблице с продуктами может храниться не только информация о продукте, но и предварительно рассчитанное количество продуктов на складе. Это снижает нагрузку на СУБД за счет уменьшения количества вычислений при каждом запросе

Недостатки

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

Совет

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


Денормализация в других областях

😀Data Warehouse: улучшает производительность аналитических запросов через агрегированные структуры данных для быстрого выполнения запросов OLAP
😀NoSQL базы данных: для оптимизации горизонтального масштабирования и ускорения доступа к данным, храня связанные данные вместе
😀Frontend-разработка: при проектировании состояния приложений, например в Redux для React, для упрощения доступа к данным и улучшения производительности
😀Микросервисы: улучшает независимость и отказоустойчивость сервисов, храня данные, необходимые каждому микросервису в его собственной базе


⭐️ Подборки материалов по этой и другим темам доступны в
базе знаний по системному анализу

#бд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍367🔥6👏2
Нас 10 000
🎉13556👍6🔥5
🔄 CI/CD: Краткий обзор

Continuous Integration/Continuous Delivery (непрерывная интеграция и доставка) — подход к разработке приложений, который обеспечивает автоматизацию процессов сборки, тестирования и доставки кода.

Код интегрируется и доставляется пользователю итерационно, как можно чаще. Ценность CI/CD кроется в автоматизации всех этапов интеграции и развёртывания кода.

💩CI — практика интеграции кода от разных разработчиков в общий репозиторий. Разработчики как можно чаще сливают изменения в основную ветку, используя систему контроля версий (например, Git). При этом, любые изменения проходят через автоматические тесты.
💩CD — автоматизация развёртывания (доставки) кода в "прод" после успешной интеграции и тестирования.


✔️ Этапы CI/CD

1️⃣ Код. Разработка создает код, исправляет ошибки или делает доработки, выполняет тесты, а затем отправляет в ветку master с актуальной сборкой продукта. Несколько команд могут отправить любое количество модулей в master.
2️⃣ Сборка. Старт автоматической сборки и авто-тестов. Критерии запуска системы управления версиями и начала сборки настраиваются заранее.
3️⃣ Тестирование. После авто-тестов выкатываемой версии проекта, можно приступать к ручной проверке.
4️⃣ Релиз. После успешных тестов, разработчики вносят исправления и выпускают новую версию продукта.
5️⃣ Развёртывание. Отправка финальной версия кода на боевой сервер. Взаимодействие пользователя с сервисом
6️⃣ Поддержка и мониторинг. Разработка мониторит работу продукта, отслеживая и анализируя пользовательский опыт.
7️⃣ Планирование. На основе мониторинга и анализа, формулируются идеи новых доработок и улучшений. Цикл начинается заново - написание кода.


Плюсы CI/CD


+ Сокращение времени поставки (Time to Market): автоматизация процессов позволяет быстрее и чаще доставлять новые функции и исправления.
+ Качество кода: автотесты обеспечивают высокое качество кода, а регулярные интеграции помогают выявлять проблемы на ранних этапах.
+ Легкость масштабирования: Автоматизированные процессы легко масштабируются с увеличением объемов работы.
+ Однородная среда разработки: все члены команды работают в однородной среде - упрощает совместную разработку.

Минусы CI/CD

— Сложность внедрения: Реализация CI/CD требует времени и усилий для внедрения в существующие процессы разработки. обслуживания. Сложные системы CI/CD могут требовать значительных ресурсов для обслуживания
— Трудность согласования изменений: в больших командах интеграция изменений может быть сложной.
— Безопасность: неправильная настройка CI/CD может стать источником уязвимостей.
— Не всегда применимо: когда проект слишком маленький или слишком сложный для автоматизации всех процессов.


🖥 Программы для CI/CD:

Jenkins: Один из самых популярных и распространенных инструментов для CI/CD.
GitLab CI/CD: Встроенная система CI/CD в GitLab, интегрированная с GitLab репозиториями.
Travis CI: Облачный сервис CI/CD, легко настраиваемый для проектов на GitHub.
CircleCI: Облачная CI/CD-платформа с широкими возможностями конфигурации.
TeamCity: Мощный и гибкий инструмент CI/CD от JetBrains.


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#devops
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29👍178
Kanban vs Scrum: сравнение методологий

Kanban и Scrum — методологии гибкого управления проектами, используемые для реализации принципов Agile и DevOps при разработке.

Kanban — подход к управлению процессом разработки, который включает следующие практики:

💩Визуализация задач и прогресса с помощью канбан-доски, установление приоритетов задачам
💩Ограничение количества задач со статусом "В работе", или WIP (work in progress). Если лимит превышен, то команда не может взять новую задачу в работу, пока не будет завершена одна из текущих
💩Управление потоком: отслеживание метрик, таких как скорость движения задач между статусами, для устранения «бутылочных горлышек», где процесс замедляется
💩Проведение каденций — встреч членов команды по процессу разработки. Всего выделяют 7 видов встреч. Главная цель — объяснение правил для всех участников команды и сбор обратной связи
💩Непрерывное улучшение процесса на основе обратной связи и анализа метрик

Что общего между Kanban и Scrum


Обе методологии относятся к Agile
Важна визуализация работы для прозрачности и оценки текущего состояния задач.
Имеют итерационный подход к работе, даже если длительность итераций различается.
Имеют механизмы для определения и управления приоритетами задач.
Акцентируют внимание на командной работе и взаимодействии между участниками

Различие подготовили в сравнительной таблице постом выше.


Когда лучше применять

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

Scrum:

💩 важен строгий контроль сроков и структура
💩 требуется четкое определение целей и результатов
💩 команда является кросс-функциональной
Пример: Разработка новой версии продукта с фиксированным релизным циклом, например, каждые 3 месяца.


Когда не подойдет

Kanban
💩в проектах, где необходимо строго соблюдать сроки
💩в кросс-функциональных командах
💩когда требуется постоянная обратная связь от клиентов

Scrum

💩 продукт нужен целиком, итерации невозможны
💩 когда нет сплочённой, самоорганизованной и кросс-функциональной команды
💩 для слишком маленьких групп из 1–2 человек, или, наоборот, больших лучше заменить другими методами — SAFe, LeSS.


☯️ Гибрид ScrumBan

Используется в средах, где необходимо управление проектом в условиях неопределенности и частых изменений. ScrumBan легче внедрить, чем Scrum
💩от Scrum: сохраняет ключевые элементы Scrum: спринты, роли (Product Owner, Scrum Master, и команда разработки) и основные события (планирование, ревью, ретроспектива).
💩от Kanban: заимствует концепцию визуализации процесса на доске, ограничения рабочего объема, адаптацию к изменениям в реальном времени и фокус на поток задач.


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#управление_проектами
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍178👎4
Scrum vs Kanban: сравнение по пунктам
👍527🔥2💩1
UX/UI: краткий обзор

💙UX (User Experience — «пользовательский опыт») отвечает за то, как интерфейс работает

💙UI (User Interface — «пользовательский интерфейс») отвечает за то, как интерфейс выглядит

Цели UI/UX дизайна

💙UX: обеспечить позитивный опыт пользователя при взаимодействии с продуктом с учетом его потребностей, ожиданий и контекста использования
💙UI: сделать интерфейс интуитивно понятным и легким в использовании, а также привлекательным визуально


💙 UX

Примеры UX-анализа

💙 Исследование пользовательского поведения: взаимодействие с веб-сайтом или приложением, анализ переходов между страницами, время пребывания на страницах, клики на элементы и т. д.
💙 Тестирование пользовательского интерфейса: удобство использования, понятность и эффективность. Например, тесты сценариев использования или а/б-тестирования
💙 Сбор обратной связи от пользователей: анализ отзывов о продукте, определение их потребности и предпочтения, выявление проблем, с которыми пользователи сталкиваются

Основные принципы UX

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

Usability ≠ UX

Usability - лишь часть хорошего UX

💙 Usability - удобство и легкость взаимодействия пользователя с продуктом
Цель: сделать задачу легко, интуитивно и быстро
💙Достиг ли пользователь цели максимально удобным способом?

💙 UX - опыт взаимодействия пользователя. Восприятие и совокупность эмоций, возникающих в результате использования продукта
Цель: сделать пользователя счастливым до, во время и после использования продукта
💙Был ли опыт пользователя максимально положительным?


💙 UI

Примеры
UI -анализа

⤵️ Анализ дизайна и компоновки: изучение дизайна интерфейса, например, расположение элементов на странице
⤵️ Изучение цветовой гаммы и шрифтов: анализ и оценка их соответствие бренду, легкость восприятия и читаемость.
⤵️ Проверка совместимости с устройствами: как интерфейс отображается на устройствах и разрешениях экрана, рекомендации по адаптивной верстке для оптимального пользовательского опыта.

Основные принципы UI

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

🟣 Адаптивная верстка

Это подход к созданию веб-страниц, при котором страницы адаптируются к различным устройствам и разрешениям экрана.


Этапы разработки UX/UI

🟢Исследование и анализ: исследование аудитории и их потребностей, изучение рынка и конкурентов
🟢Проектирование: создается структура и навигация, выбирается цветовая гамма и шрифты
🟢Прототипирование: создаются прототипы интерфейса для проверки удобства использования
🟢Тестирование и итерации: прототипы тестируются среди пользователей
🟢Разработка и реализация: на основе утвержденных прототипов
🟢Мониторинг и оптимизация: После запуска продукта сбор аналитики для оптимизации интерфейса


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#развитие #uxui
Please open Telegram to view this post
VIEW IN TELEGRAM
28👍15🔥7💩2🤔1🎉1
GRASP: краткий обзор

Проектирование ПО
начинается с определения архитектуры высокого уровня (HLA - High Level Architecture). В HLA надо определить объекты или процессы, для чего создаём приложение. Существуют подходы:

1⃣Функциональный (структурный)
2⃣Объектно‑ориентированный
Включает принципы GRASP
Может быть реализован с помощью DDD

🔵В функциональном подходе выделют компоненты системы, их функции и способы взаимодействия, без привязки к объектам
➡️ Выделяем модули для управления товарами (добавление, удаление), обработки заказов (создание, обработка оплаты). Модуль управления товарами может вызывать функции модуля обработки для оформления заказа

🔵ОО основан на моделировании системы в виде взаимосвязанных объектов, у которых есть свойства и поведение, а также учитывает принципы объектно-ориентированного программирования
Класс — шаблон, который определяет структуру и поведение объектов. Содержит атрибуты (данные) и методы (функции)
Объект — конкретный экземпляр класса, содержащий значения атрибутов и способный выполнять определённые методы
➡️ Рассматриваем систему как набор объектов (Задача, Пользователь), каждый из которых имеет свои свойства и методы, и взаимодействует через них


✳️ GRASP

GRASP (General Responsibility Assignment Software Patterns) — набор рекомендаций и принципов проектирования ПО для определения архитектуры и отношений между объектами

— сфокусирован не на решении прикладных задач, а на распределении какому объекту назначить то или иное поведение
— GRASP может рассматриваться в рамках объектно-ориентированного проектирования, помогает в реализации его принципов
— применяется в веб-разработке и мобильной разработке, автоматизации процессов и т. д.
— может использоваться в сочетании с различными типами паттернов проектирования
Например, чтобы определить, какие объекты будут создавать методы / определить роли классов в компонентах

✳️ Зачем GRASP аналитику?

помогает разрабатывать четкие, понятные структуры системы
определять обязанности каждого объекта и устанавливать связи между ними

✳️ Паттерны GRASP

Используются для:
🔵создания объектов
🔵определения ответственностей классов
🔵управления связями между объектами и др

Сначала определяют бизнес-правила и требования к системе➡️ После выбираются подходящие паттерны для реализации этих требований

Каждый паттерн решает конкретную проблему проектирования и имеет свои рекомендации по применению

Популярные принципы GRASP:

1⃣Controller (Контроллер): координирует работу между объектами и обрабатывает внешние запросы. Объект, который принимает пользовательский ввод, делегирует его другим объектам для выполнения операций
➡️ контроллер веб-приложения обрабатывает запросы от клиентов и вызывает методы для выполнения бизнес-логики

2⃣Creator (Создатель): отвечает за создание экземпляров других классов
➡️ если есть класс Order, который создает экземпляры Item, то метод создания объекта Item должен быть внутри класса Order

3⃣Expert (Эксперт): объект, больше всех знает, как выполнить определенную операцию, должен быть ответственным за её выполнение
➡️ класс управления заказами может быть экспертом по созданию и обработке заказов

4⃣High Cohesion (Высокая связность): класс выполняет только одну задачу / ответственность. Каждый класс должен быть организован вокруг единой цели
➡️ класс EmailSender должен заниматься только отправкой электронных писем, а класс PaymentProcessor - только обработкой платежей

5⃣Low Coupling (Низкая связность): классы должны быть слабо связаны друг с другом. Изменения в одном классе не должны приводить к изменениям в другом классе
➡️ если меняется способ оплаты в классе PaymentProcessor, класс Order и Customer не должны быть затронуты

6⃣ Pure Fabrication (Чистая фабрикация): для создания объектов, которые не имеют аналога в предметной области, но служат для снижения связанности и увеличения гибкости системы
➡️ класс Logger для записи логов, не является объектом из реального мира, но играет важную роль в системе для логирования

⭐️ Подборка материалов доступна в базе знаний по системному анализу

#проектирование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍205🔥2🤔2
Формализация_требований_на_практике.pdf
780.3 KB
Формализация требований на практике

✍️ Авторы: В. В. Кулямин, Н. В. Пакулин, О. Л. Петренко, А. А. Сортов, А. В. Хорошилов
🗓 Год издания: 2006
🔤 Язык: русский
📚 Объём: 69 стр.

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

О чём книга

✔️ Улучшение процесса сбора требований: Методы и техники для точного выявления и описания задач, которые должно решать программное обеспечение. Книга поможет лучше понимать потребности пользователей и формализовать их.
🚫 Анализ и сравнение методов работы с требованиями: Обзор и сравнение различных подходов, таких как RUP, DOORS, CORE, SSM, RAISE.
📐 Формальные модели: Примеры использования формальных моделей для представления требований и методов их решения.
✏️ Как использовать формальные модели для улучшения взаимодействия между командами разработчиков и заказчиками.
📝 Процесс формализации требований FOREST: Детальное описание процесса формализации требований, включая этапы и техники.

#требования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍349🔥5🤔3🎉1
Оконные функции

Оконные функции — функции, которые выполняют вычисления внутри заданного набора данных или "окна" в таблице БД

Принцип работы

1⃣ Оконная функция (ОФ) определяет "окно" данных, на которых будет выполняться вычисление (несколько строк или диапазон значений столбца)
2⃣ Если требуется, данные внутри окна упорядочиваются по одному/нескольким столбцам
3⃣ Применяются вычисления, заданные в ОФ (сумма, среднее значение, ранжирование и тд)
5⃣ Если требуется, результаты группируются по столбцам или выражениям
5⃣ Возврат результатов

Упрощенный синтаксис

➡️ <имя функции> OVER (<окно>)
где имя функции = имя оконной функции
окно = выражение, описывающее набор строк для обработки и порядок обработки


Характеристики

🟠в отличие от агрегатных функций, оконные могут вычислять значения для каждой строки в результате запроса. Агрегатные работают над всем набором данных
🟠это не то же самое, что GROUP BY. ОФ не уменьшают количество строк, а возвращают столько значений, сколько получили на вход
🟠в отличие от GROUP BY, OVER может обращаться к другим строкам


Как используются?


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


Виды


Агрегатные — вычисляют агрегированные значения по группам строк в окне. Например, среднее значение или сумма всех значений в окне

Ранжирующие — назначают ранг каждой строке в пределах окна в соответствии с заданными критериями сортировки. Например, можно ранжировать товары по его цене в каждой категории.
Под ключевым словом OVER обязательным идёт условия ORDER BY, по которому будет происходить сортировка ранжирования
➡️ROW_NUMBER — возвращает номер строки, используется для нумерации;
➡️RANK — возвращает ранг каждой строки

Смещения — позволяют перемещаться и обращаться к разным строкам в окне, относительно текущей строки, а также к значениям в начале или в конце окна
➡️LAG — обращается к данным из предыдущих строк окна
➡️LEAD — обращается к данным из следующих строк. Аналогично LAG имеет 3 аргумента


Примеры

➡️Ранжирование данных
SELECT student_id, test_score,  
RANK() OVER (ORDER BY test_score DESC)
AS rank
FROM student_scores;


➡️Вычисление среднего значения по группам
 SELECT region, sales_amount,  
AVG(sales_amount) OVER (PARTITION BY region)
AS avg_sales_per_region
FROM sales_data;


Окно vs Партиция в оконных функциях

Окно — набор строк внутри результата запроса, на котором выполняется операция агрегации или аналитическая функция
➡️Таблица с данными о студентах и их оценках за тесты.
Нужно вычислить средний балл каждого студента по последним трем тестам.
ОФ определит "окно", которое охватывает последние три записи для каждого студента, и вычислит средний балл только в этом окне данных.

Партиция (оператор PARTITION BY) — подмножество строк, выделенное для ОФ по одному/нескольким столбцам в таблице.
Задает условие, по которому эти строки группируются для вычисления функций.
➡️ Есть таблица с данными о продажах,.
ОФ помогут вычислить суммы продаж в каждом регионе отдельно.
Партиция разделит данные на группы по регионам, после чего сумма продаж вычисляется в каждой группе отдельно.

💡 Окно определяет, где выполняется функция,
а партиция - как данные группируются для выполнения этой функции


Недостатки оконных функций

🟢не все СУБД их поддерживают
🟢производительность может ухудшаться из-за их влияния на выполнение запроса
🟢отладка также может быть затруднительна


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#бд #sql
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍1882
🔐 Хэширование и Шифрование

🤗 Хэширование и Хэш-функции

⚪️Хэширование — преобразование данных с помощью специального алгоритма
В результате возникает хеш (hash) — отображение данных в виде уникальной строки
😍размер строки одинаковый для информации разного объема.
😍хеш состоит из цифр и латинских букв.


😂 Хэш-функция

Хэш-функция
— алгоритм, который принимает входные данные любого размера и возвращает хэш фиксированного размера
Результат хеш-функции называется «хеш-суммой»\«хеш», а входные данные — «сообщением»
Исходное сообщение -> [Хэш-функция] -> Хэш 


Когда хэши совпадают — это коллизия. Это небезопасно, т.к. позволяет подменить данные.

Как работает хеш-функция


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

🔣В хеш-функциях для более простых случаев преобразования проще. Например, хэш-функция построения таблиц

🔣Хэш с солью — хэш, к которому добавили случайные данные (соль) перед хэшированием.
Это делается, чтобы предотвратить атаки по радужным таблицам и сделать каждый хэш уникальным, даже для одинаковых исходных данных

Основные характеристики хэш-функций

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


Для чего используется хэширование

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

Примеры хэширования


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

Популярные алгоритмы хэширования

MD5 (Message Digest Algorithm 5)
SHA-1 (Secure Hash Algorithm 1)
SHA-2 — семейство алгоритмов с общей идеей хеширования данных
☺️SHA-256


🥶 Шифрование

Шифрование — преобразование данных в вид, который нельзя прочитать без специального ключа

Как работает шифрование

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

Основные типы

Симметричное: Один и тот же ключ используется как для шифрования, так и для дешифрования данных
Асимметричное: Используются два различных ключа – публичный для шифрования и приватный для дешифрования

Для чего используется

⚪️Конфиденциальность: защищает данные от несанкционированного доступа
⚪️Целостность: чтобы данные не были изменены
⚪️Аутентификация: подтверждает подлинность отправителя данных

Примеры использования

😥в HTTPS для защиты данных при передаче между веб-браузером и сервером
😥в емэйлах для прочтения только авторизованными пользователями
😥VPN сервисы шифруют интернет-трафик между устройством и сервером VPN
😥в бд при передаче и хранении

Популярные алгоритмы


AES (Advanced Encryption Standard)
RSA (Rivest–Shamir–Adleman)
Blowfish


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1612
😸 Работа со списками данных в REST API: сортировка, фильтрация, пагинация

🟧Сортировка

Нужна, чтобы упорядочить данные по определённому критерию

Алгоритм работы

🤯клиент отправляет запрос к API с параметром сортировки
🤯сервер обрабатывает запрос, извлекает данные из БД, сортирует по параметру и возвращает их

Примеры параметров

🟧Sort или order_by: для указания поля и порядка сортировки
GET /products?sort=price&order=desc
сортировка по цене в порядке убывания
🟧Order: указывает порядок сортировки, по возрастанию (asc) или убыванию (desc)
GET /products?sort=price&order=desc — сортировка по цене в порядке убывания
sort=field1,field2 sort = field1,field2: указание несколько полей для сортировки
GET /products?sort=price,name — сначала сортировка по цене, затем по имени
🟧custom_sort: пользовательская логика сортировки
GET /products?custom_sort=popularity — сортировка по популярности, где popularity — кастомный критерий
🟧nulls (first или last): указывает, где значения null должны идти (первыми / последними)
GET /products?sort=price&nulls=last — значения null идут последними

Примеры использования

🟧 сортировка вакансий по дате публикации, зарплате или компании
🟧 сортировка плейлистов по популярности, дате релиза или алфавиту.

🌇 Чтобы избежать сложных и затратных, нужно ограничивать количество сортируемых полей


💙 Фильтрация

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

В URL, используются параметры строки запроса для условий фильтрации
Каждый параметр имеет формат field=value, несколько параметров разделяются символом "&"

Методы

Поиск по значению: на основе точного совпадения значений
GET /api/items?status=active — фильтрует все элементы, у которых статус = active
Диапазонный фильтр: когда значения находятся в определенном диапазоне
GET /api/items?price[gte]=10&price[lte]=50 — элементы с ценой в диапазоне от 10 до 50
Поиск по подстроке: когда значения содержат указанную подстроку
GET /api/items?name[like]=%book% — элементы со словом book в названии
Фильтрация по множеству значений: значения записей из набора
GET /api/items?category=in:(books,electronics) — элементы с категорией books или electronics

Примеры использования

💙Поиск фильмов по жанрам, годам выпуска или рейтингам
💙Фильтрация задач по статусу, приоритету или дате создания

💙Для более точного поиска можно комбинировать несколько фильтров.
Для ускорения запросов — использовать индексы на колонках, которые часто фильтруются


♥️ Пагинация

При пагинации происходит разделение данных на страницы для удобства просмотра и ускорения ответов

Алгоритм работы

клиент отправляет запрос к API с параметрами пагинации
сервер его обрабатывает, извлекает нужное количество записей из БД, начиная с указанного смещения (offset)
возвращает данные и информацию о наличии следующих страниц

Методы

➡️ Offset-Based: использует параметры limit и offset для определения диапазона возвращаемых записей
GET /items?limit=10&offset=20 — возвращает 10 элементов, начиная с 21-го элемента (т.к. offset=20)
➡️ Page-Based: использует параметры page и page_size для определения страницы данных и количества записей на странице
GET /items?page=3&page_size=10 — 10 элементов, начиная с третьей страницы
➡️ Cursor-Based: использует указатели позиции (курсоры) в наборе данных. Позволяет избежать проблем с изменением данных во время пагинации
GET /items?cursor=abc123&limit=10 — 10 элементов, начиная с позиции, определенной курсором abc123

Примеры использования

🔴Соц сеть отображает ленту новостей с постами по 10 шт на странице
🔴Пользователи видят только несколько товаров на одной странице

💚 Полезно возвращать информацию о текущей странице, общем кол-ве страниц и кол-ве записей в ответе API
Для больших наборов данных лучше использовать курсорную пагинацию


🖋️ Порядок в запросе

Параметры в URL указываются в любом порядке, сервер должен обрабатывать их в логической последовательности:
Фильтрация ➡️ Сортировка ➡️ Пагинация


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#api
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4316🔥8
🌎 Как работает интернет

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

Структура интернета

🔵 Протоколы связи: Основной протокол интернета — это TCP/IP (Transmission Control Protocol/Internet Protocol). TCP гарантирует целостность передачи, разбивая данные на пакеты и контролируя их доставку. IP отвечает за маршрутизацию пакетов от отправителя к получателю
🔵 Доменная система имен (DNS): Распределенная база данных, которая служит для хранения и преобразования доменных имен (например, google.com) в IP-адреса (172.217.18.0), которые используются для маршрутизации данных в интернете
🔵 Интернет-провайдеры (ISP): Компании, которые предоставляют доступ к интернету
🔵 Маршрутизаторы и коммутаторы: Устройства, которые направляют данные через сеть, по оптимальным маршрутам
🔵 Протоколы приложений: Протоколы, такие как HTTP/HTTPS, FTP, SMTP, POP3 и другие, обеспечивают работу интернет-сервисов и приложений (веб-сайты, электронная почта, файловый обмен и т.д.).

Интернет работает на базе набора протоколов TCP/IP, которые реализовывают 3, 4 и 7 уровни модели OSI:

🔵TCP (Transmission Control Protocol): Обеспечивает надежную передачу данных.
🔵IP (Internet Protocol): Определяет маршрутизацию пакетов.
🔵HTTP/HTTPS (HyperText Transfer Protocol): Протоколы передачи гипертекста, обеспечивающие взаимодействие между клиентом и сервером. HTTPS включает шифрование для безопасности.

Подробнее про OSI — в наших постах (ссылки в материалах)


Доменная система имен (DNS). Включает:

1⃣ Корневые серверы — вершина иерархии DNS. Их задача — направлять запросы к соответствующим серверам доменов верхнего уровня (TLD). В мире существует 13 наборов корневых серверов, обозначенных буквами от A до M, управляемых различными организациями.
Пример: Один из корневых серверов — A.ROOT-SERVERS.NET, управляемый организацией VeriSign.

2⃣ DNS-серверы доменов верхнего уровня (TLD DNS Servers — top-level domains) — управляют доменами верхнего уровня, такими как .com, .org, .net, .ru и т.д. Они получают запросы от корневых серверов и направляют их к авторитетным серверам для конкретных доменов второго уровня.
Пример: Для домена .com существует множество TLD серверов, например, a.gtld-servers.net.

3⃣ Авторитетные серверы содержат информацию о доменных именах и их IP-адресах. Возвращают окончательные ответы на DNS-запросы.
Пример: Если запрос касается домена example.com, авторитетный сервер для google.com может быть ns1.google.com.

Интернет централизован?

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

Однако существует координационный орган — ICANN (Internet Corporation for Assigned Names and Numbers). ICANN отвечает за распределение IP-адресов, управление доменными зонами и поддержание стабильности работы сети.

ICANN координирует распределение IP-адресов и доменных зон верхнего уровня (.com, .org и т.д.), т.е. обеспечивает работу корневых DNS-серверов. ICANN не управляет содержимым сайтов и интернет-провайдерами, а лишь поддерживает техническую инфраструктуру. Хотя ICANN не может физически отключить интернет в стране, но может прекратить обслуживание доменных зон.

Что происходит, когда мы вводим в браузере google.com?

1⃣ Браузер отправляет запрос на локальный DNS-сервер.
2⃣ Локальный DNS-сервер ищет IP-адрес. Если не находит, пересылает запрос на корневой сервер
3⃣ Корневой сервер направляет запрос на TLD-сервер (для .com)
5⃣ TLD-сервер направляет запрос на авторитетный DNS-сервер для google.com
5⃣ Авторитетный сервер возвращает IP-адрес
6⃣ Браузер отправляет HTTP/HTTPS-запрос на полученный IP-адрес
7⃣ Сервер Google отвечает, и браузер отображает страницу

Автор: Виталия Малютина

#сети
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥50👍2410
🔵OLTP и OLAP

OLTP

OLTP (Online Transaction Processing) — система, предназначенная для управления и обработки множества транзакций в режиме онлайн
Транзакции обычно включают в себя операции создания, чтения, обновления и удаления (CRUD)

Алгоритм работы

🟡Ввод данных: пользователь вводит данные через интерфейс (форму заказа в Amazon)
🟡Валидация: система проверяет корректность и полноту введенных данных (проверка номера карты)
🟡Транзакция: cистема создает транзакцию с операциями (уменьшение количества товара на складе)
🟡Запись в БД: изменения сохраняются в БД, используя характеристики ACID
🟡Подтверждение: пользователь получает уведомление об успешном выполнении транзакции (сообщение об успешной покупке)

Характеристики

должна обрабатывать большое количество транзакций в секунду
одновременное выполнение транзакций разными пользователям
обеспечение ACID свойств для предотвращения ошибок и обеспечения надежности транзакций

Примеры

Сбербанк Онлайн — банковские транзакции и управления счетами
1С:Предприятие — учет и управления предприятием
Ozon — бронирование и продажа товаров, управление складскими запасами
РЖД — бронирование и продажа билетов


OLAP

OLAP (Online Analytical Processing) — система для выполнения сложных запросов и анализа больших объемов данных.
— Собирает информацию из БД, ERP, CRM и др источников, затем формирует многомерный массив данных для дальнейшего анализа. Эти массивы называют OLAP-кубами
Кубы объединяют информацию из большого числа таблиц с её предварительной обработкой. Могут иметь разные измерения (в годах, регионах и тд)

Компоненты OLAP

Источники данных — реляционные или многомерные БД, хранилище данных
ETL-инструменты (extract, transform, load) — набор средств извлечения, преобразования и загрузки данных в хранилище
OLAP-сервер, управляющий многомерными массивами данных
Аналитические инструменты для формирования отчетов, графиков, диаграмм для пользователей

Алгоритм работы

данные поступают из различных источников, таких как OLTP системы, файлы, сторонние API в ETL систему
процесс ETL:
— извлечение данных
— данные очищаются, нормализуются и преобразуются
— загрузка в OLAP хранилище
данные организуются в многомерные структуры (кубы) для быстрого выполнения аналитических запросов
пользователь запрашивает данные через аналитический интерфейс, выполняются аналитические запросы (агрегация, фильтрация, анализ)
результаты анализа визуализируются, создаются отчеты и дашбордов

Характеристики

скорость выполнения запросов важна, но не критична
анализ данных по разным измерениям (по времени, региону, продукту)
эффективная обрабатка терабайтов данных
обработка сложных аналитических запросов, включая агрегирование и группировку данных

Примеры систем

Yandex DataLens — визуализация и анализа данных
Microsoft Power BI — инструмент бизнес-анализа
Vertica — БД для OLAP


Cвязь между OLTP и OLAP

Дополняют друг друга в процессе управления данными и аналитики:
🟡OLTP системы генерируют и собирают данные через транзакционные операции. Данные используются в OLAP системах для анализа и отчетности
🟡данные из OLTP систем извлекаются, преобразуются и загружаются в OLAP системы для анализа
🟡результаты анализа из OLAP систем могут влиять на операции в OLTP системах
(анализ покупательского поведения может привести к изменениям в маркетинговых кампаниях или стратегиях продаж)


Пример компонентов архитектуры с OLTP и OLAP системами

OLTP
🟡Пользовательский интерфейс (UI): веб-приложение / мобильное приложение
🟡Серверное приложение для обработки транзакций и бизнес-логики
🟡Реляционная БД: для хранения транзакционных данных

OLAP
🟡ETL Процесс: извлечения, трансформации и загрузки данных из OLTP БД в хранилище данных
🟡Хранилище данных: централизованное, для анализа данных
🟡Аналитические инструменты (BI Tools): для анализа данных и создания отчетов


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#проектирование #бд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍127
🔖Паттерны проектирования и архитектурные паттерны

Паттерны проектирования
(ПП) — проверенные решения для часто встречающихся проблем в ПО. Шаблоны, которые применяются для повышения эффективности и качества кода

Архитектурные паттерны (АП) — шаблоны для высокоуровневой организации системы. Они определяют основные компоненты системы, их взаимосвязи и взаимодействия


✳️ Отличие

Служат для разных уровней проектирования ПО:

🟢 ПП работают на уровне классов и объектов. Используются разработчиками при написании / рефакторинге кода
🔵 АП на более высоком уровне, описывают структуру всего продукта. Определяют на какие компоненты/модули будет делиться приложение и каким образом они взаимодействуют


✳️ Паттерны проектирования

Применение

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

Делятся на три вида:

🟢 Порождающие

Для создания экземпляра объекта или группы связанных объектов

➡️ Одиночка (Singleton): гарантирует существование только одного экземпляра определенного класса, который можно использовать из любой части программы
➡️ Фабрика (Factory): создает объекты через специальный метод или класс, скрывая детали их создания
➡️ Прототип (Prototype): объект сам создает свои копии
➡️ Ленивая инициализация (Lazy Initialization): создает объект по мере необходимости

🟢 Структурные

В основном связаны с композицией объектов, с тем, как сущности могут использовать друг друга

➡️ Декоратор (Decorator): динамически добавляет новые обязанности объектам
➡️ Фасад (Facade): предоставляет простой интерфейс к сложной системе, скрывая ее реализацию
➡️ Заместитель (Proxy): паттерн, похожий на «Фасад», но со специальным объектом-заместителем, который контролирует доступ к основному

🟢 Поведенческие

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

➡️ Наблюдатель (Observer): позволяет объектам следить за изменениями состояния другого объекта
➡️ Посредник (Mediator): организует слабые связи между объектами, чтобы снизить их зависимость друг от друга
➡️ Хранитель (Memento): помогает сохранить объект в каком-то состоянии с возможностью вернуться к нему в будущем


✳️ Архитектурные паттерны

Применение

Определение общей структуры системы
Обеспечение масштабируемости и надежности
Упрощение взаимодействия между компонентами

Примеры


Более абстрактные:
➡️ Service-Oriented Architecture (SOA) (Сервис-ориентированная архитектура): система организована вокруг предоставления услуг (сервисов), которые могут использоваться различными приложениями
➡️ Layered Architecture (Слоистая архитектура): делит систему на уровни (слои), каждый из которых отвечает за конкретный функционал

Более конкретные:
➡️ Event-Driven Architecture (Событийно-ориентированная архитектура): компоненты системы взаимодействуют через передачу событий. Это один из способов реализации SOA
➡️ Микросервисы: разделяет приложение на небольшие, самостоятельные сервисы, которые могут разрабатываться и разворачиваться независимо. Является конкретным примером SOA
➡️ Клиент - сервер: делит систему на серверы, предоставляющие услуги, и клиенты, запрашивающие их
➡️ MVC (Model-View-Controller) (Модель-Вид-Контроллер): разделяет систему на три основные компоненты для улучшения тестирования и организации кода


✳️ Взаимосвязь GRASP с архитектурными паттернами

В объектно-ориентированных системах внутри архитектурных паттернов можно использовать паттерны GRASP
Например, паттерны для распределения обязанностей между классами и объектами (Creator, Information Expert)
Они помогут определить, как распределять обязанности


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#проектирование #архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍163
🗺 Customer Journey Map (CJM)

CJM (Карта пути клиента) — инструмент визуализации пути клиента, включая все этапы взаимодействия с продуктом или сервисом.
CJM помогает понять опыт пользователя, выявить проблемы и улучшить взаимодействие пользователя c продуктом

Зачем нужна

Новая фича Довести клиента до цели
Текущая фича Найти и решить проблемы клиента при достижении цели

Примеры использования

🟡Аналитика: визуализация помогает выявить требования, проблемные ситуации, спроектировать пользовательский интерфейс
🟡Разработка продуктов: для анализа процессов, создания пользовательских и тестовых сценариев
🟡UX/UI дизайн: для улучшения пользовательского интерфейса и опыта, основываясь на реальных данных о взаимодействии пользователей с продуктом
🟡Маркетинг: для анализа как клиенты реагируют на маркетинговые кампании, поиска эффективных каналов продвижения


Основные элементы

CJM может выглядеть по-разному в зависимости от целей
Основные элементы:

🟡Действующее лицо ― клиент (образ из ядра основных групп клиентов или несколько конкретных покупателей (персонажей)
🟡Цели и ожидания пользователя
🟡Этапы пользовательского пути
🟡Точки контакта (места, ситуации и интерфейсы, когда клиент сталкивается с продуктом)
🟡Эмоции и действия пользователя
🟡Барьеры, которые мешают перейти на дальнейший этап
🟡Способы улучшения продукта и преодоления барьеров

Как построить CJM


Собрать данные: исследование клиентов, опросы, интервью, анализ данных CRM
Определить этапы пути пути клиента
Определить точки взаимодействия клиента с продуктом
Проанализировать эмоции и болевые точки на каждом этапе
Сделать визуализацию карты

Пример построения CJM по шагам

🟡 Определение целей: почему клиенты интернет-магазина часто покидают корзину, не завершив покупку
🟡Создание персонажей: составляются профили ключевых клиентов (молодые профессионалы, пожилые покупатели, с их характеристиками и поведение)
🟡 Сбор данных: анализ веб-аналитики, опросов, отзывов и интервью с клиентами для выявления ключевых точек взаимодействия и проблем
🟡 Определение этапов пути клиента: поиск товара, добавление в корзину, процесс оформления заказа, оплата и доставка
🟡 Идентификация точек взаимодействия: на сайте, через email-рассылки и службу поддержки
🟡 Анализ эмоционального состояния клиента: определяются моменты, когда клиент испытывает радость (быстрая доставка) или раздражение (сложный процесс оплаты)
🟡 Выявление болевых точек и возможностей для улучшений: проблемы на этапе оплаты и доставки. Упрощение процесса оплаты и более точное отслеживание доставки
🟡 Визуализация карты пути клиента: создается графическая карта всех этапов и точки взаимодействия с болевыми моментами и предложениями по улучшению
🟡Внедрение изменений и мониторинг результатов


Программы для построения CJM


Онлайн-доски и специальные сервисы: UXPressia, Miro, Canvanizer
Дизайнерские программы и редакторы: если создание CJM требует визуализации (Figma, Adobe Illustrator или Photoshop)

Похожие инструменты


📍Service Blueprint: более детализированная карта, описывает внутренние процессы и ресурсы, необходимые для предоставления услуг
📍Experience Map: общий контекст и опыт клиента с брендом, со всеми точками взаимодействия и эмоциями
📍Empathy Map: инструмент для понимания мыслей, чувств, действий и слов клиента, помогающий создать персонализированный опыт
📍User Story Mapping: инструмент для организации и приоритизации пользовательских историй
📍Touchpoint Map: фокусируется только на точках взаимодействия клиента с продуктом, без детального анализа этапов пути клиента


#требования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍229🔥42
😌 Знакомство со Swagger

Swagger — набор инструментов для создания, документирования и тестирования RESTful API. Основой Swagger является формат OpenAPI, который позволяет описывать API на уровне спецификаций

Зачем нужен?

автоматическая генерация интерактивной документации
тестирование API в реальном времени
единый стандарт (OpenAPI) для совместимости между различными системами и командами
автоматизация создания клиентских SDK и серверных частей

Возможности

💙 Интеграция с инструментами для авто-тестирования (Postman и др.), создание тестов на основе спецификаций API
💙 Поддержка версионирования спецификаций API
💙 Широкая экосистема: множество плагинов, инструментов и расширений для различных нужд
💙 Добавление информации о безопасности API, включая поддержку OAuth2, JWT и др. механизмов аутентификации и авторизации


Из чего состоит?

Swagger Core — ядро Swagger, программная реализация спецификации OpenAPI 3.0.

Swagger Editor: Веб-инструмент для создания и редактирования спецификаций OpenAPI
подсветка синтаксиса и автодополнение
встроенная валидация спецификаций
работа с YAML и JSON форматами
экспорт / импорт спецификаций

Swagger UI: Интерактивная документация, которая генерируется на основе спецификаций API
тестирование API вызовов
поддержка авторизации (Bearer, Basic Auth, API Key)
визуальное отображение структуры API
встроенная поддержка для описания моделей данных

Swagger Codegen: инструмент для автоматической генерации клиентских SDK и серверных частей на основе спецификаций OpenAPI
поддержка разных языков программирования и фреймворков (Java, Python, C#, Ruby и др.).
генерация клиентских библиотек, серверных стубов и документации
настраиваемые шаблоны для генерации кода
интеграция с CI/CD процессами

С чего начать работу со Swagger?

Создать спецификацию API в Swagger Editor
Сохранить в формате JSON или YAML
Открыть в Swagger UI, чтобы визуализировать и тестировать API
Использовать Swagger Codegen для генерации кода клиента или сервера


Подходы к созданию API

💙 Code First
Спецификации API генерируются на основе кода
Используется:
💙когда необходимо быстро создать API
💙для создания прототипов и экспериментальных проектов
💙когда добавляются API к уже существующим кодовым базам

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

😌 Пример реализации
💙 Swagger annotations (Java) / атрибуты (C#): добавление документации в код
💙 Swagger-Core (Java)/ Swashbuckle (C#): генерация спецификаций

💙 Contract First (API First)
Спецификации создаются до написания кода
Используется:
💙для обеспечения согласованности и стандартизации
💙когда несколько команд работают над разными частями системы
💙для детальной проработки API до начала разработки

высокая согласованность и понятность, легче поддерживать
требует больше усилий на этапе проектирования

😌 Пример реализации
💙 Editor: создание спецификаций API в формате OpenAPI
💙 Codegen: генерация серверных шаблонов и клиентских библиотек по спецификациям


Примеры расширений и плагинов

💙 SwaggerHub: Платформа для совместной работы над спецификациями API в реальном времени
💙 SwaggerHub Explorer: Инструмент для тестирования API без необходимости писать код
💙 Swagger Validator: Проверка спецификации на наличие ошибок и соответствие стандартам


Отличие от Postman


Цель
Swagger ориентирован на проектирование и документирование API
Postman — на тестирование и отладку
Функции
Swagger позволяет создавать спецификации и генерировать код
Postman фокусируется на тестировании, хранении запросов и автоматизации тестов


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#api #инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44👍18141
🔵 Колоночные БД, Cassandra vs PostreSQL

В колоночной БД данные хранятся и обрабатываются по столбцам, а не по строкам.

Все значения одного столбца хранятся вместе, отдельно от значений других столбцов.

В строковой БД данные хранятся построчно:
🟡[1, 2024-01-01, Телефон, 500]
🟡[2, 2024-01-02, Ноутбук, 1000]
🟡[3, 2024-01-03, Планшет, 300]

В колоночной — по столбцам:
▫️ID: [1, 2, 3]
▫️Дата: [2024-01-01, 2024-01-02, 2024-01-03]
▫️Продукт: [Телефон, Ноутбук, Планшет]
▫️Цена: [500, 1000, 300]

Чтение: если нужно найти все цены, БД сразу читает столбец "Цена", не проходя по каждой строке.


Особенности

*️⃣Данные одной колонки сохраняются вместе на диске. Каждая колонка хранится отдельно (в строковых — вместе)
*️⃣Хранят все ячейки, которые относятся к колонке, в виде непрерывной записи — это и делает выполнение операций по поиску и доступу быстрее
*️⃣Агрегированные операции выполняются быстрее, так как считывается меньше данных и не нужно обрабатывать лишние колонки
*️⃣Оптимизированы для операций агрегации, таких как SUM, AVG, COUNT
*️⃣Каждая запись в семействе колонок идентифицируется уникальным ключом строки (Row Key)

Когда лучше выбрать?

Когда нужно быстро читать большие объемы данных по конкретным столбцам
Когда важна быстрая агрегация данных
Для данных, собранных по времени или другим параметрам, т.к. информация часто анализируются по определенным метрикам (столбцам)
Для распределенной обработки данных и масштабируемости
Некоторые БД (Apache Cassandra и HBase) спроектированы для работы в распределенной среде. Они легко масштабируются горизонтально, добавляя новые узлы в кластер
Это позволяет обрабатывать большие объемы и распределять нагрузку между серверами
Для OLAP систем при анализе больших объемов данных

Когда неэффективны

*️⃣Если данные часто обновляются, то колоночные БД могут быть неэффективными, т.к. нужно обновлять каждый столбец отдельно
*️⃣Могут иметь ограничения при выполнении транзакций, что может усложнять согласование данных в случае ошибок
*️⃣При выполнении транзакций с большим объемом данных может возникнуть задержка из-за сканирования множества столбцов

Примеры использования


🟠Анализ данных продаж для определения трендов и прогнозов
🟠Хранилище данных для аналитики финансовых транзакций
🟠Мониторинг производительности серверов и сетевого трафика

Отличия колоночных SQL от NoSQL

SQL:
*️⃣Имеет более строгую схему, таблицы и типы данных фиксированы
*️⃣Стандартный язык SQL для запросов
*️⃣Для вертикального масштабирования (увеличение мощности одного сервера)
*️⃣Для аналитических запросов

NoSQL:
*️⃣Более гибкая схема, можно легко добавлять новые столбцы
*️⃣Часто собственные языки или API
*️⃣Легче масштабируется горизонтально (добавление новых серверов)
*️⃣Для больших распределенных систем

Примеры БД


*️⃣SQL: Clickhouse, Google BigQuery
*️⃣NoSQL: Apache Cassandra, Apache HBase


Когда лучше выбирать строковые БД

🟠Для транзакционных систем (OLTP): БД, такие как PostgreSQL и MySQL, оптимизированы для быстрого выполнения транзакций, включая вставку, обновление и удаление строк. Подходят для банковских систем или системы обработки заказов.
🟠Когда структура данных может часто меняться: в строковых БД каждая запись хранится в виде строки, операции обновления данных более эффективные
🟠Для частого соединения данных из разных таблиц и реляционных операций между таблицами


Сравнение Cassandra vs PostgreSQL на картинке поста 👇

⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#бд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍218🤔1
Производительность API: краткий обзор способов

1⃣ Кэширование

Временное хранение часто используемых ответов
💛 снижение время отклика, уменьшение нагрузки на сервер за счет повторного использования данных
💛 риск устаревания данных, сложность управления сроками жизни кеша
➡️ Применяется при частых запросах к неизменяемым или редко изменяемым данным

2⃣ Batch-запросы

Объединение нескольких запросов в один для сокращения количества обращений к серверу
💛 снижение количества сетевых вызовов;
💛 повышение производительности за счет групповой обработки запросов
💛 увеличение сложности обработки на сервере, что может вызвать задержки;
💛может усложнится обработка ошибок, т.к. все запросы обрабатываются вместе
➡️ Когда клиенту нужно выполнить несколько связанных запросов одновременно.

3⃣ Chunked-запросы

Разделение большого запроса или ответа на более мелкие части (чанки), которые отправляются последовательно
💛 улучшение обработки больших объемов данных за счет поэтапной передачи
💛 снижение вероятности тайм-аутов при передаче больших файлов
💛 сложнее реализация и координация частей запроса, возможны задержки между частями
➡️ При работе с большими объемами данных, например, загрузка файлов

4⃣ Rate Limiting

Ограничение количества запросов за определенный промежуток времени
💛 защита сервера от перегрузок за счет контроля нагрузки
💛 исключение злоупотребления API
💛 может вызвать неудобства у пользователей при жестких ограничениях
требует мониторинга и настройки
➡️ Для защиты от DDoS-атак и управления ресурсами сервера

5⃣ Retry

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

6⃣ Timeout

Установка максимального времени ожидания ответа
💛 предотвращение долгих ожиданий
💛 освобождение ресурсов
💛 обнаружение проблем с задержками
💛 возможны сбои при медленной работе сервера, требует точной настройки
💛 неправильно настроенные тайм-ауты могут привести к преждевременным отказам
➡️ Для предотвращения зависания запросов и оптимизации ресурсов

7⃣ Pagination

Разделение результатов на страницы
💛 снижение нагрузки на сервер за счет обработки небольших частей данных
💛 улучшение скорости обработки
💛 увеличение сложности навигации по данным
💛 усложнение реализации API
➡️ Для работы с большими объемами данных (списки, поисковые результаты)

8⃣ Compression

Сжатие данных перед передачей
💛 снижение объема данных, повышение скорости передачи
💛 требует дополнительноых и ресурсов на сжатие и разжатие данных
➡️ Для уменьшения трафика


Верхнеуровневые (архитектурные) способы

😈 Load Balancing

Распределение нагрузки между серверами
улучшение масштабируемости и устойчивости за счет равномерного распределения запросов
повышение доступности системы
увеличение сложности настройки и управления
требуется мониторинг и управление балансировщиками нагрузки
➡️ Для высоконагруженных систем

😈 CDN (Content Delivery Network)

Использование сети серверов для кэширования и доставки контента
снижение времени отклика за счет храненич контента на серверах, расположенных ближе к пользователям
снижение нагрузки на основной сервер за счет распределения на несколько серверов
стоимость использования и сложность настройки
зависимость от стороннего провайдера
➡️ Для ускорения доставки статического контента (изображения, видео и файлы)

😈 Асинхронное взаимодействие

Выполнение операций без ожидания завершения, позволяя другим процессам продолжать работу
производительность за счет параллельной обработки задач
масштабируемость, т.к ресурсы не блокируются ожиданием завершения операций
сложность разработки и отладки из-за необходимости обработки асинхронных событий
сложность сложность управления состоянием и синхронизации данных
➡️ Для долгих операций (сетевые запросы, обработка больших объемов), без блокировки основного потока выполнения


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#api
Please open Telegram to view this post
VIEW IN TELEGRAM
👍59🔥1712