Во-первых, вы должны наложить уникальное ограничение на свойство id, чтобы убедиться в отсутствии коллизий, создаваемых параллельными операторами create.Это требует использования метки, но вам НУЖНО это безотказное, если вы планируете делать что-то серьезное с этими данными.Но, таким образом, вы можете использовать скользящие идентификаторы для разных ярлыков.(Все индексированные метки будут иметь таблицу подсчета. UNIQUE CONSTRAINT также создает индекс)
Во-вторых, вы должны выполнить генерацию и создание в одном и том же шифре, как этот
MATCH (n:Node) WITH count(*) AS lastId
CREATE (:Node{id:lastId})
Это сведет к минимумувремя между генерацией и фиксацией, уменьшая вероятность столкновения.(Не забудьте повторить неудачные попытки из-за уникальных нарушений)
Я не уверен, что вы делаете с хэшем, просто вы делаете это неправильно.Либо вы генерируете новый UUID на основе времени (он не требует параметров) и используете его как есть, либо вы используете инкриминирующий идентификатор.(Изменяя UUID, вы лишаете законной силы логику, гарантирующую уникальность, тем самым значительно увеличивая вероятность коллизии)
Вы также можете сохранить текущее число индексов в узле, как объяснено здесь .Не гарантируется поточная безопасность, но это не должно быть проблемой, если у вас есть уникальные ограничения и повторите попытку ограничения.Это будет более терпимым к удалению узлов.