2016-10-12 4 views
2

У меня есть следующее определение графика.Как избежать дублирования записей вершин в графе DSE/Titan

schema.propertyKey("ID").text().create() 
schema.vertexLabel("Student").properties("ID").create() 

Когда я выполняю следующий запрос Гремлина, создается новая вершина.

g.addV(label, 'Student').property('ID', '1234') 

, когда я исполню ее снова, новый Vertex с таким же ID был created.I'm ищет пути к макияжа значения ID уникальной. Значение Я должен получить ошибку, когда я пытаюсь добавить нового ученика с тем же ID (1234). Любая помощь была высоко оценена по этому поводу.

ответ

1

При определении вашей схемы для графа установить мощность на ID собственности ОДНОГО

Из схемы документации Titan

SINGLE: Позволяет более одного значения для каждого элемента такого ключа , В других словах отображение ключа → значение уникально для всех элементов графика. Ключ от ключевого слова BirthDate - пример с SINGLE кардинально с каждый человек имеет ровно одну дату рождения.

Вот ссылка на документы http://s3.thinkaurelius.com/docs/titan/1.0.0/schema.html

+0

Можете ли вы дать мне пример на основе моего сценария? – BDR

+0

Я не пробовал, но что-то вроде этого может выполнять работу '' 'mgmt = graph.openManagement() ID = mgmt.makePropertyKey ('ID'). DataType (String.class). Cardinality (Cardinality.SINGLE) .make() mgmt.commit() '' ' –

+0

Хорошо. Спасибо. Будет проверять его – BDR

2

Я не знаю, о DSE Graph, но в Titan вы можете создать индекс и настроить его, чтобы быть уникальным. Но это не рекомендуется делать (по крайней мере, если это влияет на многие вершины), поскольку Titan должен использовать блокировки для вставки вершин с таким индексом, чтобы избежать дублирования.

Вы получите лучшую производительность, если вы проверите, существует ли вершина уже перед ее вставкой. Daniel Kuppitz предоставил запрос для этого в списке рассылки [1]:

g.V().has('Student','ID','1234').tryNext().orElseGet(g.addV(T.label,'Student','ID', '1234').next()) 

Конечно, вы могли бы получить в условиях гонки здесь, где два из этих запросов оцениваются по той же ID в то же время. Но это должно происходить очень редко, и вы, вероятно, можете выполнить регулярную очистку с помощью OLAP-работы с предстоящей версией TinkerPop. (К сожалению, в настоящее время не представляется возможным изменить график работы с OLAP.)

[1] https://groups.google.com/forum/#!topic/gremlin-users/pCYf6h3Frb8

+2

http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.html#index-unique –

Смежные вопросы