⚡Придумать эффективный запрос
Есть таблица, описывающая некоторые задачи
У задач иерархичная структура, которая задается с помощью id, parent_id. Задача должна начать выполняться только тогда, когда все дочерние задачи выполнены. Для простоты можно считать что status принимает значения PENDING и COMPLETED
У PENDING задач дочерние могут быть как PENDING, так и COMPLETED, у COMPLETED задач дочерние гарантированно COMPLETED
Хочется придумать эффективный способ (запрос + индексы, возможно с добавлением доп колонок) доставать задачи, которые нужно выполнить. То есть те, у которых все дочерние задачи выполнены
Ограничения:
- Всего задач около 100 млн
- В конкретный момент PENDING задач около 1млн
- В конкретных момент PENDING задач, у которых все дочерние COMPLETED около 100
- У одной задачи не более 10 дочерних
Есть таблица, описывающая некоторые задачи
create table tasks
(
id bigserial not null primary key,
parent_id bigint null,
status varchar(128) not null,
data jsonb not null
);
У задач иерархичная структура, которая задается с помощью id, parent_id. Задача должна начать выполняться только тогда, когда все дочерние задачи выполнены. Для простоты можно считать что status принимает значения PENDING и COMPLETED
У PENDING задач дочерние могут быть как PENDING, так и COMPLETED, у COMPLETED задач дочерние гарантированно COMPLETED
Хочется придумать эффективный способ (запрос + индексы, возможно с добавлением доп колонок) доставать задачи, которые нужно выполнить. То есть те, у которых все дочерние задачи выполнены
Ограничения:
- Всего задач около 100 млн
- В конкретный момент PENDING задач около 1млн
- В конкретных момент PENDING задач, у которых все дочерние COMPLETED около 100
- У одной задачи не более 10 дочерних