1. Інформаційні моделі
Інформаційні моделі відображають структуру даних, їх зв’язки та логіку обробки у системі.
1.1. Основні інформаційні сутності
У системі «Прозорро.Продажі» визначено ключові сутності:
...
Дата та час старту
Перелік учасників
- Історія ставок протягом аукціону
- Нотифікації, які відображалися на фронті протягом аукціону
...
2. Опис інтерфейсів
Інтерфейси системи забезпечують взаємодію користувачів, зовнішніх сервісів та інших інформаційних систем.
2.1. Інтерфейси користувачів
Веб-платформа (UI)
Кабінет адміністратора (управління аукціонами)
Кабінет організатора торгів (створення лотів)
Кабінет учасника (подання ставок, перегляд статусу)
Панель аналітики та звітності
...
Спрощений функціонал для учасників торгів
Оповіщення про статус аукціонів
2.2. API-інтерфейси
REST API використовується для інтеграції із зовнішніми системами.
...
Взаємодія з контролюючими органами
Формування автоматизованих звітів
3. Структура бази даних
База даних системи реалізована на основі NoSQL-рішень, таких як MongoDB (для зберігання основних об'єктів системи) та Elasticsearch (для повнотекстового пошуку та аналітики). Обрана архітектура дозволяє ефективно працювати з великими обсягами даних та забезпечує масштабованість, гнучкість і високу швидкодію.
3.1. Основні колекції БД
| Колекція | Опис |
|---|---|
procedure (MongoDB) | Зберігає об’єкти процедур, включаючи метадані, статуси, етапи проведення, тощо. |
registry (MongoDB) | Містить об’єкти реєстрів оренди, приватизації тощо |
jobber (MongoDB) | Об’єкти, пов’язані з фоновими задачами, чергами на обробку, планувальниками. |
notifications (MongoDB) | Події та повідомлення, які надсилаються користувачам або службам. |
auction (MongoDB) | Дані, що стосуються аукціонів: ставки, учасники, результати, лоти. |
swiftStorage | Служба зберігання документів – файлові об’єкти, пов’язані з процедурами. |
Elasticsearch | Індекси для реалізації повнотекстового пошуку по процедурах, учасниках, документах. |
3.2. Зв’язки між колекціями
У MongoDB зв’язки реалізовані через посилання (reference) між об’єктами шляхом зберігання ідентифікаторів:
...
Зв’язки типово реалізуються через ідентифікатори (_id) без застосування вкладених JOIN-запитів, що забезпечує високу продуктивність.
3.3. Оптимізація бази даних
Індексація ключових полів:
Основні поля, за якими здійснюється пошук або фільтрація (наприклад,procedure.status,procedure.createdAt,auction.procedure_id,notifications.user_id), індексуються для прискорення виконання запитів.Розділення БД на модулі (шардінг або окремі бази):
Для підвищення масштабованості й продуктивності, дані розділяються за логічними модулями (наприклад,registry,auction,notifications), а також можуть бути фізично рознесені між базами/серверами.Кешування запитів:
Часто використовувані дані (наприклад, списки категорій, типів процедур, попередні пошуки) кешуються у Redis або Memcached, що суттєво зменшує навантаження на основну БД.Логування операцій:
Усі запити, зміни та критичні події логуються у спеціальну колекцію або зовнішній лог-сервіс. Логи включають інформацію про користувача, час виконання, дію та результат, що забезпечує аудит та інформаційну безпеку.
...