как ограничить титан при добавлении вершины без уникального ключа свойства

Я хочу наложить ограничение на график титанов при добавлении новой вершины без уникального ключа свойства.

Например: в моем графе титанов «помощь» - это уникальный ключ свойства, и если я попытаюсь добавить любую вершину через гремлин или рекстер без использования «помощи», она должна остановиться.

Шаги, которые я сделал:

mgmt = g.getManagementSystem()   
aid = mgmt.makePropertyKey('aid').dataType(String.class).make()
mgmt.buildIndex('byAid',Vertex.class).addKey(aid).unique().buildCompositeIndex()

mgmt.commit()

gremlin>g.addVertex([aid:'aid91']);  
==>v[229640]  

*gremlin>g.addVertex([name:'srinivas']);  
==>v[246024]*

Я хочу ограничить второй шаг, если «помощь» не предоставляется.

Не могли бы вы помочь мне узнать решение этой проблемы? Заранее спасибо..


person Srinivas Rao    schedule 29.05.2015    source источник


Ответы (1)


Вам придется проводить такую ​​проверку данных на уровне приложения. Ни Titan, ни стек TinkerPop не позволяют гарантировать наличие поля при добавлении новой вершины.

Синтаксис, который вы используете, похоже, указывает на то, что вы используете Titan 0.5.x (или, возможно, более раннюю версию). Если это так, одним из решений может быть создание «графа-оболочки» для централизации проверки. Шаблон оболочки можно увидеть в TinkerPop в таких функциях, как: ReadOnlyGraph, IdGraph и т. д. По сути, вы создаете ValidationGraph класс и передаете свой TitanGraph экземпляр в конструктор, а затем переопределяете addVertex для перехвата вызовов. Затем вы можете реализовать любую проверку, которую захотите.

В Titan 0.9.x / TinkerPop3 картина немного другая. Текущая модель требует создания TraversalStrategy для реализации проверка. К сожалению, эта закономерность еще немного недоказана. Я уверен, что после выхода TP3 GA он будет развиваться и дальше.

person stephen mallette    schedule 01.06.2015
comment
Спасибо, Стивен, за ответ. Добавлю на уровне приложения. - person Srinivas Rao; 01.06.2015