Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Index stores temporary RIDs for vertices created in transaction (remote storage)

29 views
Skip to first unread message

BK

unread,
May 26, 2015, 10:25:50 PM5/26/15
to orient-...@googlegroups.com
Looking for feedback on whether to create an issue: 
Using OrientDB 2.1-rc3 and remote storage, an index on edge in/out link properties will store the temporary (negative) RIDs for endpoint vertices created in the same transaction as an edge.  (This does not happen if memory storage is used - the permanent RIDs are correctly stored in the index in that case.)

Example output (sample code below):
Vertices: #11:0 #11:1 #11:2 #11:3 #11:4 

Index data: CustomEdge.in
key: #-1:-7, rid: CustomEdge#12:3{out:#11:0,in:#11:1} v2
key: #-1:-5, rid: CustomEdge#12:2{out:#11:1,in:#11:2} v2
key: #-1:-3, rid: CustomEdge#12:1{out:#11:2,in:#11:3} v2
key: #-1:-2, rid: CustomEdge#12:0{out:#11:3,in:#11:4} v2

Index data: CustomEdge.out
key: #-1:-9, rid: CustomEdge#12:3{out:#11:0,in:#11:1} v2
key: #-1:-7, rid: CustomEdge#12:2{out:#11:1,in:#11:2} v2
key: #-1:-5, rid: CustomEdge#12:1{out:#11:2,in:#11:3} v2
key: #-1:-3, rid: CustomEdge#12:0{out:#11:3,in:#11:4} v2

Index data: CustomEdge.compositeInOut
key: OCompositeKey{keys=[#-1:-9, #-1:-7]}, rid: CustomEdge#12:3{out:#11:0,in:#11:1} v2
key: OCompositeKey{keys=[#-1:-7, #-1:-5]}, rid: CustomEdge#12:2{out:#11:1,in:#11:2} v2
key: OCompositeKey{keys=[#-1:-5, #-1:-3]}, rid: CustomEdge#12:1{out:#11:2,in:#11:3} v2
key: OCompositeKey{keys=[#-1:-3, #-1:-2]}, rid: CustomEdge#12:0{out:#11:3,in:#11:4} v2




Example code:
package com.example.orientdb.index;

import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.orient.OrientEdgeType;
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
import com.tinkerpop.blueprints.impls.orient.OrientGraphFactory;
import com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx;
import com.tinkerpop.blueprints.impls.orient.OrientVertexType;

public class EdgeIndexTxProblem {
private static final String CUSTOM_VERTEX = "CustomVertex";
private static final String CUSTOM_EDGE = "CustomEdge";
private static final String IN_INDEX_NAME = CUSTOM_EDGE + ".in";
private static final String OUT_INDEX_NAME = CUSTOM_EDGE + ".out";
private static final String COMPOSITE_INDEX_NAME = CUSTOM_EDGE + ".compositeInOut";
public static void main(String[] args) {
OrientGraphFactory graphFactory = null;
// Use NoTx for schema config to avoid warning messages
OrientGraphNoTx graphNoTx = null;
OrientGraph graph = null;
try {
graphFactory = new OrientGraphFactory("remote:localhost/edgeTxProblem", "user", "pass");
graphNoTx = graphFactory.getNoTx();
OrientVertexType vertexType = null;
if( ! graphNoTx.getRawGraph().existsCluster(CUSTOM_VERTEX)) {
vertexType = graphNoTx.createVertexType(CUSTOM_VERTEX);
}
else {
vertexType = graphNoTx.getVertexType(CUSTOM_VERTEX);
}
if( ! graphNoTx.getRawGraph().existsCluster(CUSTOM_EDGE)) {
OrientEdgeType edgeType = graphNoTx.createEdgeType(CUSTOM_EDGE);
edgeType.createProperty("out", OType.LINK, vertexType);
edgeType.createProperty("in", OType.LINK, vertexType);
edgeType.createIndex(IN_INDEX_NAME, OClass.INDEX_TYPE.UNIQUE, "in");
edgeType.createIndex(OUT_INDEX_NAME, OClass.INDEX_TYPE.UNIQUE, "out");
edgeType.createIndex(COMPOSITE_INDEX_NAME, OClass.INDEX_TYPE.UNIQUE, "out", "in");
}
graphNoTx.shutdown();
graph = graphFactory.getTx();
Vertex inVert = null;
for(int i = 0; i < 5; ++i) {
Vertex currentVert = graph.addVertex("class:" + CUSTOM_VERTEX);
if(inVert != null) {
graph.addEdge("class:" + CUSTOM_EDGE, currentVert, inVert, CUSTOM_EDGE);
}
inVert = currentVert;
}
graph.commit();
Iterable<Vertex> verts = graph.getVertices();
StringBuilder vertIds = new StringBuilder();
for(Vertex vert : verts) {
vertIds.append(vert.getId().toString()).append(" ");
}
System.out.println("Vertices: " + vertIds);
System.out.println();
printIndexData(graph, IN_INDEX_NAME);
printIndexData(graph, OUT_INDEX_NAME);
printIndexData(graph, COMPOSITE_INDEX_NAME);
}
finally {
if(graphNoTx != null) {
try {
graphNoTx.shutdown();
}
catch(Throwable t) {
System.err.println("Error shutting down graphNoTx:" + t);
}
}
if(graph != null) {
try {
graph.shutdown();
}
catch(Throwable t) {
System.err.println("Error shutting down graph:" + t);
}
}
if(graphFactory != null) {
graphFactory.close();
}
}
}
private static void printIndexData(OrientGraph graph, String indexName) {
System.out.println("Index data: " + indexName);
Iterable<ODocument> indexDataDocs = graph.getRawGraph().query(
new OSQLSynchQuery<ODocument>("select from index:" + indexName));
for(ODocument indexDataDoc : indexDataDocs) {
System.out.println("key: " + indexDataDoc.field("key") + ", rid: " + indexDataDoc.field("rid"));
}
System.out.println("");
}
}


Andrey Lomakin

unread,
May 27, 2015, 1:50:36 AM5/27/15
to orient-database
Hi,
Could you open issue ?

--

---
You received this message because you are subscribed to the Google Groups "OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email to orient-databa...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Best regards,
Andrey Lomakin.

BK

unread,
May 27, 2015, 2:24:17 PM5/27/15
to orient-...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages