Хорошая поддержка запросов, таких как: Для узла найдите все подключенные узлы, все узлы, соединенные через другой узел со значением 'somevalue'
Хорошая поддержка сообщества и документация
Postgres вполне достаточно, если вам нужно только найти узлы в окрестности, поскольку он поддерживает рекурсивные запросы .
Предполагая, что у вас ориентированный граф nodes (id, parent_id, col)
, это позволяет написать:
with rec_nodes as (
select id,
col,
1 as depth
from nodes
where parent_id = :id
union all
select nodes.id,
nodes.col,
rec_nodes.depth + 1 as depth
from nodes
join rec_nodes on rec_nodes.parent_id = nodes.id
where depth < :depth
)
select id
from rec_nodes
where col = :col;
Вышеописанное будет работать очень хорошо, если ограничения :id
и :depth
равны в пределах оператора with
(когда нет, он построит весь график, и вы определенно не не хочу, чтобы это произошло).
Доступно в виде облачного сервиса за 0 $ для небольших объемов данных.
Не облако и не $ 0, а очень дешево здесь . (В последний раз я проверял, базовый VPS предлагает Postgres на общем сервере. И все это управляется одним из основателей Postgres.)
Будьте осторожны при непосредственном размещении БД в облаке.