Я использую Spring data neo4j 2.1.0.BUILD-SNAPSHOT и сервер Neo4j 1.6.1.
У меня есть дружеские отношения между двумя узлами пользователя, и я хочу убедиться, что для каждой пары user1, user2 будет создана только одна связь (порядок не учитывается).
Распространенным предложением является проверка на уровне приложения, существует ли связь, прежде чем создавать другую, но я думаю, что это не исключает проблем параллелизма: ограничение должно управляться на уровне базы данных.
Лучшее решение, которое я могу придумать, - это использовать аннотацию @Indexed с уникальным свойством, представленным в Neo4j 1.6, и создать уникальное ограничение на основе идентификаторов user1 и user2, что-то вроде
@Indexed(unique = true)
private String uniqueConstraint;
public String getUniqueConstraint(){
if(user1.id > user2.id){
return user1.id + "|" + user2.id;
}
return user2.id + "|" + user1.id;
}
Кстати, я знаю, что последний выпуск данных Spring neo4j поддерживает эту проверку на узлах с помощью Neo4jTemplate.getOrCreateNode (), но я не уверен, что он работает с Relationships. Остальные API должны быть там, хотя. Уникальные отношения
Итак, у меня два вопроса:
1 Есть ли лучшая альтернатива?
2 Должна ли я быть обеспокоена этой проблемой параллелизма, или очень маловероятно, что что-то плохое случится даже на сайте с высоким трафиком, и проверки на уровне приложения должно быть достаточно? Я спрашиваю, потому что это кажется мне очень распространенной проблемой, но с Neo4j вокруг этого мало. Возможно, от этого страдает встроенная версия.
Спасибо