SQL — удалённая работа в Москве
Дата: 2025-05-10
Детали
Регион
Москва
Занятость
дистанционно
Стоимость
договорная
Дата публикации
2025-05-10
Описание
алгоритм распределения. Бизнес-задача: распределить взаимную проверку студентами заданий. Все на SQL. На Supabase будет выполняться (есть особенности). На вход функции: sprint_strapi_document_id (идентификатор учебной недели) Ожидаемый результат: По 3 заданиям, привязанным к учебной неделе проведены распределения студентов с соблюдением ряда условий. Подробнее: ЧТО ДЕЛАЕТ ГЕНЕРАТОР (ПРИМЕРНО) 1. Старт Получает идентификатор спринта и режим работы («затереть всё» или «дописать недостающее»). Спринт = учебная неделя. 2. Очистка (по желанию) Если запрошен «затереть всё» — удаляет из результата всё, что относится к этому спринту, и фиксирует, сколько строк исчезло. 3. Снимок входных данных Собирает четыре набора сведений, без хранения в БД: 1. перечень дуэлей (2 пользователя делают одну задачу) спринта и их тип (тренировочная / боевые); 2. список разрешённых участников (не уволены, из нужного потока); 3. для каждой сыгранной пары — самые свежие ответы обоих игроков — у каждого ответа есть pair_id; 4. из предыдущего пункта формирует сами пары: «идентификатор пары + оба игрока». 4. Рассчитывает квоты Для каждого допущенного пользователя считает: сколько он сыграл ответов × 3 — столько он обязан проверить. У кого получилось 0 — тот сразу «вне игры» (ему нечего проверять, он никому не нужен). 5. Готовит «кольца» – два воображаемых циклических списка Первое кольцо: шесть «слотов» подряд для каждого будущего рецензента. Второе кольцо: шесть «слотов» подряд для каждой пары, которую надо проверять. 6. Базовый round-robin 1. Для тренировочных дуэлей всем парам заранее выбирает «сдвиг» — на сколько позиций провернуть кольцо рецензентов. Для боевых дуэлей сдвиг 0. 2. «Накладывает» кольцо рецензентов на кольцо пар с учётом сдвига и тем самым назначает первых шесть рецензентов каждой паре, игнорируя случаи «рецензент = игрок пары». Получается черновой чертёж назначений. 3. Из квоты каждого назначенного рецензента вычитает израсходованные слоты. 7. Дозакрывает пары, где оказалось меньше 6 рецензентов Пока остаются «дыры»: • выбирает кандидатов с ещё не обнулённым лимитом, которых нет в данной паре и которые не столкнутся с ограничениями; • назначает их, строго не превышая «осталось проверить» ни у пары, ни у кандидата; • обновляет, сколько ещё нужно и какие квоты остались. 8. Сохраняет результат Каждое назначение дублирует на обе записи пары (чтобы вышло ровно 12 строк на пару: 6 рецензентов × 2 игрока). Старые строки не дублируются — если они уже существуют, пропускает. 9. Проверяет себя Есть две жёсткие проверки — если хотя бы одна не пройдена, всё откатывается и бросается исключение: 1. у каждой пары должно быть ровно 6 назначений, иначе фиксируется список «неполных» пар (попадают в лог) и генератор падает; 2. ни у одного рецензента фактическое число назначений не может превышать рассчитанную квоту; нарушители фиксируются в отдельный список и тоже приводят к падению. 10. Формирует отчёт Возвращает JSON: • уникальный идентификатор запуска; • статус «OK» или «ERROR»; • массив шагов-сообщений в хронологическом порядке: сколько строк стерто, сколько сохранено, попали ли пары в «неполные», есть ли «перебранные» квоты, прошла ли финальная валидация. Полный набор логических «баз»,-которыми оперирует генератор (ниже — только смысловая структура: названия полей и связь с алгоритмом; никаких SQL-таблиц или DDL-врезок) 1. Пользователи • user_id – внутренний идентификатор участника • stream_id – учебный поток (курс) • team_id – команда внутри потока • dismissed_at – дата отчисления / увольнения или пусто Зачем нужно → позволяет • убрать выбывших, • узнать команду игрока для правил FULL-CONTACT, • связать участника с потоком спринта. 2. Страйки • user_id – кто получил штраф • sprint_id – за какой спринт штраф Зачем нужно → если есть запись по текущему спринту, пользователь не допускается к проверкам. 3. Потоки и Спринты • stream_id ↔ sprint_id – один поток может иметь несколько спринтов Зачем нужно → определить, каких пользователей считать «своими» для данного спринта. 4. Команды • team_id – идентификатор команды • stream_id – чей поток Зачем нужно → различать «свою» и «чужую» команду в боевых дуэлях. 5. Дуэли • duel_id – внутренняя ссылка в ответах • sprint_id – к какому спринту относится • type – TRAINING или FULL-CONTACT Зачем нужно → отфильтровать дуэли спринта и понять, нужны ли правила баланса команд. 6. Ответы на дуэли • pair_id – уникальный идентификатор пары игроков • user_id – автор конкретного ответа • rival_id – соперник автора • duel_id – какая дуэль • hash – общий «ключ партии» (одинаков у двух строк пары) • created_at – когда отправлен ответ Зачем нужно → • брать самый свежий ответ каждого игрока в паре, • посчитать, сколько ответов сыграл каждый пользователь → сколько рецензий он обязан выдать (квота = 3 × ответы), • сформировать список всех пар «hash + duel». 7. Назначения на проверку (целевая таблица) • reviewer_id – кто будет проверять • duel_id – дуэль пары • user_id – чей ответ проверяется • hash – «ключ партии» (чтобы различать пары) Зачем нужно → конечный результат работы генератора; строка уникальна в сочетании (reviewer_id, hash, duel_id). 8. Внутренние счётчики-выкладки генератора. Что нужно ещё: поддержка и сопровождение, разработать документацию. Если сработаемся — есть много задач на стэке Supabase/Bubble/N8N.
Похожие заказы
Администраторы баз данных
дистанционно
договорная
Мониторинг и поддержка баз данных 27/7. СУБД: SQL. 1. Мониторинг баз данных силами Исполнителя в режиме 24х7. 2. Реакция и устранение инцидентов силами Исполнителя в режиме 24х7 в соответствии с требованиями к уровню сервиса. 3. Анализ и профилактика работы системы с целью раннего предупреждения угроз и сбоев в режиме 24х7. 4. Реагирование на события или заявления об угрозах в режиме 24х7 в соответствии с требованиями к уровню сервиса. 5. Выявление "узких мест" с точки зрения производительности системы, составление рекомендаций по их устранению, если это находится в рамках компетенции исполнителя. 6. Устранение проблем с производительностью в случае, если они находятся в зоне ответственности исполнителя. 7. Обеспечение высокой доступности системы управления базами данных. (С У Б Д)анализ и оптимизация процедур резервирования и восстановления, других компонентов MAA (Maximum Availability Architecture). 8. Настройка высокой доступности системы управления базами данных (СУБД) для новых систем, оптимизация процедур резервирования и восстановления, других компонентов MAA (Maximum Availability Architecture). 9. Установка, конфигурирование программного обеспечения (ПО) Microsoft SQL Server. Создание (не проектирование) новых баз данных, включая тестовые и базы данных для разработчиков. 10. Своевременное применение критичных обновлений ПО СУБД и серверов приложений. 11. Восстановление баз данных в случае сбоя. 12. Анализ логов СУБД и файлов трассировки. 13. Контроль достаточности дискового пространства сервера СУБД. 14. Управление пользователями и их доступами (по запросу Заказчика). 15. Ведение журнала учёта инцидентов и подготовка ежеквартального отчёта о работе системы (по запросу). Учитываются только инциденты, зафиксированные системой мониторинга. 16. Проведение аудита критичной системы (при приемке и далее по запросу не чаще раза в 1 год.). Что нужно ещё: поддержка и сопровождение.
Приморский край
Фрилансеры
2025-06-05
SQL
дистанционно
договорная
Разработать базу данных с нуля. Подробное описание в файле Нужно написать код расширения на языке SQL, PL/pgSQL по требованиям в файле, тему можно выбрать любую. Например, расширение, которое получает координаты нескольких точек и возвращает порядок, в котором нужно точки посетить, чтобы пройти наименьшее расстояние. Заносить этот порядок в таблицу и по триггеру назначать водителя из другой таблицы.
Екатеринбург
Фрилансеры
2025-06-04
SQL
дистанционно
договорная
Протестировать имеющуюся базу данных. Имея базу данных ответить на вопросы относительно её содержимого через запросы, полученные результаты визуализировать в Гистограммы и собрать дашбор. Эта задача по учёбе, без высокой ответственности к конечному результату. Что нужно ещё: Объяснить проделанную работу текстом в видео описания. Чёткой задачи нету, необходимо подумать что из этого можно сделать. Файл .db отправлю в личку.
Москва
Фрилансеры
2025-06-03
SQL
дистанционно
договорная
Разработать базу данных с нуля. Создать базу данных для классного руководителя. Что нужно ещё: разработать документацию.
Москва
Фрилансеры
2025-06-03
SQL
дистанционно
договорная
Доработать существующую базу данных. Есть база данных (PostgreSQL). В ней есть таблица versions, которая хранит все версии документов и пакетов. Таблица состоит из столбцов: id::text - идентификатор ModelId::jsonb - идентификатор дока или пакета version::integer - номер версии CreationTime::jsonb Для таблицы есть 3 индекса (все btree): id ModelId CreationTime + ModelId В таблице миллионы записей (более 5 млн). В данную таблицу поступает много запросов на поиск версии за определённый период, т.е. часто используется выборка: ...where CreationTime between x1 and x2... Столбец "CreationTime" хранит как множество одинаковых записей, так и множество разных. В данный момент запросы на выборку работают очень медленно. Нужна помощь от опытных специалистов в поиске способов ускорить выполнение данного запроса. P.S. Есть некоторые ограничения: создавать новые индексы для данной таблицы нельзя. Партицировать её тоже нельзя. Варианты из ChatGPT прошу НЕ предлагать! Уже пробовал - не помогло.
Иркутск
Фрилансеры
2025-05-30
SQL
дистанционно
договорная
Доработать существующую базу данных. База данных - система подбора домашних питомцев. пользователь заполняет анкету и получает топ 3 подходящих питомца соответствующих его запросам. есть готовые таблицы со связями. есть форма на добавление породы и на заполнение анкеты пользователем. нужно сделать систему рекомендаций, которая будет отбирать породы, подходящие пользователям, а также немного доработать имеющиеся формы. кнопочную форму делать не надо, заполнять базу не надо.
Москва
Фрилансеры
2025-05-29
SQL
дистанционно
договорная
Разработать базу данных с нуля. В личном сообщение. Что нужно ещё: В личном сообщении.
Москва
Фрилансеры
2025-05-28