У меня есть граф, который состоит из одного центрального узла и большого числа других узлов, подключенных к центральному. Я хотел бы удалить узлы транзакционным способом, то есть начать с внешних узлов, удалить их в пакетах, скажем, по 5K каждый, и продолжить движение в центр.Как постепенно удалить узлы из графика
Вот ссылка на консоль, которая содержит небольшой иллюстративный граф http://console.neo4j.org/?id=vwphbn для справки.
Моя проблема заключается в том, чтобы сопоставлять узлы, у которых нет других отношений, которые связывают их (косвенно) с центральным узлом.
Обновление. Я думаю, что некоторое объяснение поможет. У меня есть большой иерархический набор данных, который нужно удалить в кусках, но с обычным способом (повторять это:
MATCH (n: Root {rootId : {rootId}})
OPTIONAL MATCH n-[r]-x
DELETE r,x
RETURN count(*)
в то время как count > 0
) может вызвать удаление самого Root
и некоторых дочерних узлов будут оставлены сиротами с нет средств для их обнаружения и удаления, я думаю, должен быть какой-то способ, в котором я все же могу удалить куски графа более или менее дешево, и в то же время иметь некоторый порядок и сохранить краеугольный корень узла.
Дело в том, есть больше, чем на таких «кругов» в базы данных, поэтому я не могу сопоставлять только ярлык. Но вы вдохновили меня на разработку другого подхода, который исключает сущности не в этом «концентрическом» способе, а скорее так, как вы бы нарезали пирог: совпадение с путём «MATCH (r: Root) - [rel ] - (n), p = ((n) - [r *] - (k)) ', а затем удалить' rel' и 'p', что оставит меня с самим корнем после того, как все« срезы »будут был «разрезан». Этот подход стоит попробовать? А так как p будет соответствовать всем путям типа '(a)', '(a) - (b)', '(a) - (b) - (c)' и т. Д., Может быть, лучше ... – tkroman
... чтобы собрать все узлы из путей, сделать «DISTINCT» на них, а затем удалить их внутри блока «FOREACH»? – tkroman
Мне очень нравится эта идея. Вот запрос я рекомендовал бы использовать UNWIND: СПИЧКА р = (n1: Узел) <- [R *] - (П2) ГДЕ НЕ (п2) <-() с узлами (р) ломтиков LIMIT 1 UNWIND slices AS n MATCH (n) - [r] ->() DELETE r, n –