У меня есть список процессов и отношений между ними, хранящихся в одной таблице (в настоящее время AWS DynamoDB). Также сохраняется дополнительная информация, связанная с отношением, например используемый ресурс.
Таблица процессов
|--------------|--------------|--------------|
| Caller_ID | Callee_ID | Resources |
|--------------|--------------|--------------|
| P1 | P2 | 10% |
|--------------|--------------|--------------|
| P2 | P1 | 20% |
|--------------|--------------|--------------|
| P3 | P4 | 15% |
|--------------|--------------|--------------|
| P3 | P1 | 10% |
|--------------|--------------|--------------|
| P3 | P4 | 10% |
|--------------|--------------|--------------|
| P4 | P1 | 10% |
|--------------|--------------|--------------|
| ... | ... | ... |
|--------------|--------------|--------------|
Дополнительная информация
- Один процесс может вызывать несколько процессов (от 1 до 200 +)
- Один процесс может вызывать один и тот же процесс несколько раз
- Количество строк: от 10.000 до 1.000.000 +
Цель
Для данного процесса я хочу найти все циклические зависимости (максимум между 4 процессами), в которые включен данный процесс. Затем мне нужно информация об узлах и отношениях, включенных в круг для выполнения некоторых вычислений (на ресурсах)
Например, результат (с учетом P1) будет:
- P1 => P2 => P1 (P1 вызывает P2 и P2 вызывает P1)
- P1 => P2 => P3 => P1
- P2 => P3 => P4 => P1 => P2
Вопросы
1) Можно ли сохранить текущую структуру базы данных для достижения этой цели? экономически эффективным и производительным способом? (извлечение узлов и отношений, а затем применение алгоритма). Это может быть неэффективно из-за большого количества запросов, необходимых для поиска всех отношений.
2) Можно ли сделать это с DynamoDB и другой структурой таблицы?
3 ) Решит ли эту проблему база данных графов? Это лучший способ решить это? Любое предложение, какую базу данных использовать?
4) Вы предлагаете совершенно другой подход?