-
Notifications
You must be signed in to change notification settings - Fork 0
Модель данных
Для дальнейшего расчета объема памяти, будем считать длину строк n = 150, т.к. строки фигурируют в полях с именем пользователя, логином, паролем, типом события, описанием события, адресом и названием склада, которые не требуют большой длины.
Хранение информации о складе, на котором расположены ячейки. Поля:
- int id_storage (4)
- text Адрес (n)
- text Название (n)
Хранение информации о характеристиках и состоянии ячейки.
- int id_cell (4)
- int id_storage (4)
- int Номер ячейки (4)
- int Номер яруса (4)
- bool Свободна (1)
- datetime Время окончания аренды (8)
- char Размер (1)
Информация об изменении состояния ячейки, например: забронирована, освобождена, обслужена, выявлена неполадка.
- int id_event (4)
- int id_cell (4)
- int id_user (4)
- text Тип события (n)
- text Описание (n)
- datetime Время (8)
Информация о пользователях системы, к которым относятся клиенты сервиса, работники и администрация.
- int id_user (4)
- text ФИО (n)
- int Роль (4)
- text Логин (n)
- text Пароль (n)
- datetime Дата регистрации (8)
- float Задолженность (4)
Рассчитаем размер каждой сущности:
- Склад: 4 + 150*2 = 304 байта
- Ячейка: 4*3 + 2 + 8 = 22 байта
- Событие: 4*3 + 150*2 + 8 = 320 байт
- Пользователь: 4*3 + 150*3 + 8 = 470 байт
Для расчета формулы, определим, что на каждом складе должно быть как минимум:
- 100 ячеек
- каждую ячейку нужно хотя бы раз обслужить, забронировать и освободить => 300 событий
- 3 рабочих, 1 директор склада, 100 клиентов, 1 сис.админ => 105 пользователей
*владелец бизнеса не включен в формулу, т.к. он всегда 1.
Формула, зависящая от количества складов s:
Избыточные поля в модели:
- id_storage в сущности Склад
- id_storage, id_cell в сущности Ячейка
- id_event, id_cell, id_user в сущности Событие
- id_user в сущности Пользователь
За вычетом избыточных полей, объем коллекции будет составлять:
Отношение между фактическим объемом базы и чистым объемом составляет:
Зависимость избыточности от кол-ва складов можно выразить формулой:
Создание объекта одной сущности не требует создания объектов других сущностей. Поэтому скорость роста модели имеет простую зависимость от каждой сущности.
Ранжировка сущностей по влиянию на скорость роста модели:
- Пользователь (наибольший рост модели)
- Событие
- Склад
- Ячейка (наименьший рост модели)
id_storage | adress | title |
---|---|---|
29031 | г. Санкт-Петербург ул. Кузнецовская д. 16к1 | Электросила |
19384 | г. Санкт-Петербург ул. Задворная д. 15 | Волковская |
46237 | г. Санкт-Петербург ул. Гренадерская д. 34 | Выборгская |
id_cell | cell_number | floor | is_free | date_free | size |
---|---|---|---|---|---|
34232 | 23 | 2 | true | null | M |
78932 | 5 | 1 | false | 2024-12-01 16:00:00 | S |
92648 | 201 | 5 | false | 2025-01-13 23:15:00 | L |
id_event | id_cell | id_user | type_action | descript | created_at |
---|---|---|---|---|---|
22394 | 78932 | 91822 | reserve | null | 2024-10-24 11:13:02 |
67438 | 34232 | 78221 | release | null | 2024-10-24 16:57:16 |
68927 | 78932 | 91822 | open | null | 2024-10-24 17:00:16 |
83211 | 67322 | 10001 | failure | Отломалась ручка дверцы | 2024-11-03 11:01:23 |
id_user | FIO | role | login | password | created_at | arrear |
---|---|---|---|---|---|---|
91822 | Иванов Андрей Викторович | 5 | ivanov@mail.ru | 3hjfs3jhd33kllssl | 2023-10-03 16:01:00 | 0.00 |
78221 | Петров Олег Игоревич | 5 | petrov@mail.ru | 42ijscnnjd38njjhj | 2024-11-10 08:04:57 | 200.00 |
10001 | Смирнов Дмитрий Васильевич | 1 | smir32@mail.ru | hjf3lmvn6c948df | 2020-03-05 12:58:23 | 0.00 |
SELECT role
FROM User
WHERE id = @id
AND password = @password
INSERT INTO User(FIO, login, password, created_at, arear)
VALUES (@FIO, @login, @password, NOW(), 0.00)
INSERT INTO Event(id_cell, id_user, type_action, descript, created_at)
VALUES (@id_cell, @id_user, "reserve", null, NOW())
UPDATE Cell
SET is_free = false, date_free = @date_free
WHERE id = @id_cell;
INSERT INTO Event(id_cell, id_user, type_action, descript, created_at)
VALUES (@id_cell, @id_user, 'service', null, NOW())
WITH Services (id_user, count_of_services) AS (
SELECT id_user, COUNT(*)
FROM Event
WHERE type_action = 'service'
GROUP BY id_user
)
SELECT fio, count_of_services
FROM User
JOIN Services ON Services.id_user = User.id_user;
COPY Storage FROM '/dataset.scv' DELIMITER ',' CSV HEADER;
COPY Event TO '/export.csv' DELIMITER ',' CSV HEADER;