2013-07-01 1 views
3

개체를 생성하는 프레임 워크를 사용하고 있습니다. Node이 이미 id를 할당했습니다. 이제 그들은 (node.id로 액세스) 프레임 워크에서 제어 같은 ID타이탄 데이터베이스에서 정점 ID를 덮어 쓰는 방법은 무엇입니까?

public long addNode(Node node) {  
    TitanVertex vertex = (TitanVertex) g.addVertex(null); 
    g.commit(); 

    vertex.setProperty(ID, node.id); 
    vertex.setProperty(TYPE, node.type); 
    vertex.setProperty(VERSION, node.version); 
    vertex.setProperty(TIME, node.time); 
    vertex.setProperty(DATA, node.data); 
    ... 

오류와 타이탄의 정점으로 변환해야합니다

java.lang.IllegalArgumentException: Name is reserved: id 

하지만 그것을 허용하지 보인다. 보조 ID를 모방하기 위해 가짜 속성을 사용해야합니까? 타이탄은 그렇게 할 수있는 방법이 있습니까?

감사합니다.

답변

8

실제로 요소 식별자를 설정할 수있는 그래프 데이터베이스는 거의 없습니다. Neo4j, OrientDB, Titan 등을 사용하든간에 모두 자체 ID 시스템을 사용하는 경향이 있습니다. TinkerGraph는 실제로 ID 할당을 허용하는 유일한 청사진 구현입니다.

ID를 유지하려면 이름을 다른 것으로 변경해야합니다. "id"대신 "iid"를 사용할 수 있습니다. 프로그래밍 관점에서, 당신은 같은 것을 할 수 있도록 할 것 IdGraph 래퍼의 사용을 고려해 볼 수 있습니다 상황이 더 투명하게 만들려면 : 당신은 IdGraph을 볼 수 있습니다

gremlin> base = TitanFactory.open('/tmp/titan-berkley') 
==>titangraph[local:/tmp/titan-berkley] 
gremlin> g = new IdGraph(base, true, false)    
==>idgraph[titangraph[local:/tmp/titan-berkley]] 
gremlin> g.addVertex(45) 
==>v[45] 
gremlin> g.v(45) 
==>v[45] 

것은 당신이 할당되는 것처럼 표시 할 수 있습니다 요소 ID 자체. 뒤에서 실제로는 키 인덱스 만 사용합니다.

+0

좋은 답변입니다! 감사! 필자의 맥락에서 유일한 문제는 벤치 마크에서 키 인덱스가 있거나없는 테스트를 수행하고자한다는 것입니다. 데이터베이스에서 꼭지점 조회를 색인화하거나 사용자 정의 ID x 실제 ID 사이의 할당을 색인화합니다. 감사합니다. – Luccas

+1

키 인덱스없이 작업해야하는 경우 "id"이외의 이름 (예 : "iid")을 사용하여 속성 이름을 만듭니다. 벤치 마크가 무엇인지는 언급하지 않지만 핵심 지표가 없으면 "iid"에 의한 조회가 선형 스캔으로 끝나기 때문에 상당히 나쁜 결과가 나타날 수 있습니다. 당신이 물어 보는 질문은 어떻게 타이탄이 주요 지표를 저장하는지와 관련이 있습니다. 그렇다면이 링크가 도움이 될 수 있습니다. https://github.com/elffersj/delftswa-aurelius-titan/blob/master/SA-doc/Mapping.md –

+0

가장자리에 맞춤 ID를 추가하려면 IdGraph (base, true, 사실) 그렇다면 0.3.0에서 필요하기 전에 __id 속성을 만들어야 할 수도 있습니다. https://github.com/thinkaurelius/titan/issues/179 –

1

@Stephen, Cant는 gremlin 터미널에 대해 말했지만 Titan Java API를 통해이 작업을 시도했지만 작동하지 않았습니다. id 그래프에서 정점을 생성하는 동안 id를 전달한 후에도 기본 id가 노드에 할당되었습니다.

+0

'TitanGraph' 인스턴스를'IdGraph'에'base'로 전달할 수없는 동일한 문제가 있습니다 : / –

관련 문제