Каков наилучший способ найти круговые зависимости в структуре данных ориентированного графа? - PullRequest
1 голос
/ 15 апреля 2020

У меня есть список процессов и отношений между ними, хранящихся в одной таблице (в настоящее время 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) Вы предлагаете совершенно другой подход?

...