@aarifkhamdi

Какие существуют эффективные способы найти связанный граф?

Нужно найти связанный граф. Интересуют реализации лучше, чем эта. И как вообще решаются такие задачи.

Что смущает: скорость работы при большой таблице и более-менее крупных графах (200-300).

Специальные базы данных, другой способ хранения, любые возможные трюки - тоже рассматриваем.

CREATE TABLE "UserMachine" (
    "userId" int,
    "machineId" int
);

INSERT INTO "UserMachine"
("userId", "machineId")
VALUES(1, 1), (2,2), (2,3), (1,2), (3,3), (1,4), (3,4), (4,5), (5,6);

WITH RECURSIVE find_machines AS (
    SELECT "machineId", "userId"
    FROM "UserMachine"
    WHERE "userId" = 1

    UNION

    SELECT new."machineId", new."userId"
    FROM find_machines AS old
        JOIN "UserMachine" AS NEW
            ON (
                (OLD."machineId" = NEW."machineId")
                OR (OLD."userId" = NEW."userId")
            )
)
SELECT * FROM find_machines
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Есть специальный тип баз данных - графовые, например, Neo4j. Можно смотреть аналоги. Синтаксис Gremlin или SPARQL
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
ArangoDB

или да, Neo4j
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы