/** * Returns the number of edges that match this query * * @return Number of edges that match this query */ public default long edgeCount() { return vertexIds().size(); }
private void testPartitionSpread(boolean flush, boolean batchCommit) { Object[] options = {option(GraphDatabaseConfiguration.IDS_FLUSH), flush}; clopen(options); int[] groupDegrees = {10,15,10,17,10,4,7,20,11}; int numVertices = setupGroupClusters(groupDegrees,batchCommit?CommitMode.BATCH:CommitMode.PER_VERTEX); IntSet partitionIds = new IntHashSet(numVertices); //to track the "spread" of partition ids for (int i=0;i<groupDegrees.length;i++) { TitanVertex g = getOnlyVertex(tx.query().has("groupid","group"+i)); assertCount(groupDegrees[i],g.edges(Direction.OUT,"contain")); assertCount(groupDegrees[i],g.edges(Direction.IN,"member")); assertCount(groupDegrees[i],g.query().direction(Direction.OUT).edges()); assertCount(groupDegrees[i],g.query().direction(Direction.IN).edges()); assertCount(groupDegrees[i]*2,g.query().edges()); for (TitanVertex v : g.query().direction(Direction.IN).labels("member").vertices()) { int pid = getPartitionID(v); partitionIds.add(pid); assertEquals(g, getOnlyElement(v.query().direction(Direction.OUT).labels("member").vertices())); VertexList vlist = v.query().direction(Direction.IN).labels("contain").vertexIds(); assertEquals(1,vlist.size()); assertEquals(pid,idManager.getPartitionId(vlist.getID(0))); assertEquals(g,vlist.get(0)); } } if (flush || !batchCommit) { //In these cases we would expect significant spread across partitions assertTrue(partitionIds.size()>numPartitions/2); //This is a probabilistic test that might fail } else { assertEquals(1,partitionIds.size()); //No spread in this case } }
assertEquals(10, u.query().labels("connectDesc").direction(IN).interval("time", 3, 31).edgeCount()); assertEquals(0, v.query().labels("connect").direction(OUT).has("time", null).edgeCount()); assertEquals(10, v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertexIds().size()); assertEquals(edgesPerLabel - 10, v.query().labels("connect").direction(OUT).has("time", Cmp.GREATER_THAN, 31).count()); assertEquals(10, size(v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertices())); assertEquals((int) Math.floor(edgesPerLabel / (5.0 * 2)), v.query().labels("knows").direction(OUT).has("number", 0).interval("weight", 2.1, 4.0).edgeCount()); assertEquals(20, size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertices())); assertEquals(20, size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertexIds())); assertEquals(30, v.query().labels("friend", "connect", "knows").direction(OUT).interval("time", 3, 33).edgeCount()); assertEquals(noVertices - 2, v.query().labels("friend", "connect", "knows").direction(OUT).has("time", Cmp.NOT_EQUAL, 10).edgeCount()); assertEquals(2 * (int) Math.ceil((noVertices - 1) / 4.0), size(v.query().labels("connect", "friend", "knows").has("weight", 1.5).vertexIds())); assertEquals(1, v.query().direction(IN).has("time", 1).edgeCount()); assertEquals(10, v.query().direction(OUT).interval("time", 4, 14).edgeCount()); assertEquals(noVertices - 1, size(v.query().direction(IN).vertices())); for (Direction dir : new Direction[]{IN, OUT}) { vl = v.query().labels().direction(dir).interval("time", 3, 31).vertexIds(); vl.sort(); for (int i = 0; i < vl.size(); i++) assertEquals(vidsubset[i], vl.getID(i)); assertEquals(10, u.query().labels("connectDesc").direction(IN).interval("time", 3, 31).edgeCount()); assertEquals(0, v.query().labels("connect").direction(OUT).has("time", null).edgeCount()); assertEquals(10, v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertexIds().size()); assertEquals(edgesPerLabel - 10, v.query().labels("connect").direction(OUT).has("time", Cmp.GREATER_THAN, 31).count()); assertEquals(10, size(v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertices())); assertEquals((int) Math.floor(edgesPerLabel / (5.0 * 2)), v.query().labels("knows").direction(OUT).has("number", 0).interval("weight", 2.1, 4.0).edgeCount());
evaluateQuery(v.query().labels("child").direction(BOTH), EDGE, numV, 1, new boolean[]{true, true}); vl = v.query().labels("child").direction(BOTH).vertexIds(); assertEquals(numV, vl.size()); assertTrue(vl.isSorted()); evaluateQuery(v.query().labels("child").interval("weight", 0.0, 1.0).direction(OUT), EDGE, 2 * numV / 10, 1, new boolean[]{false, true}); vl = v.query().labels("child").interval("weight", 0.0, 1.0).direction(OUT).vertexIds(); assertEquals(2 * numV / 10, vl.size()); assertTrue(vl.isSorted()); evaluateQuery(v.query().labels("child").interval("time", 70, 80).direction(OUT).orderBy("time", incr), EDGE, 10, 1, new boolean[]{true, true}, time, Order.ASC); vl = v.query().labels("child").interval("time", 70, 80).direction(OUT).orderBy("time", incr).vertexIds(); assertEquals(10, vl.size()); assertFalse(vl.isSorted()); evaluateQuery(v.query().labels("child").direction(BOTH), EDGE, numV, 1, new boolean[]{true, true}); vl = v.query().labels("child").direction(BOTH).vertexIds(); assertEquals(numV, vl.size()); assertTrue(vl.isSorted()); evaluateQuery(v.query().labels("child").interval("weight", 0.0, 1.0).direction(OUT), EDGE, 2 * numV / 10, 1, new boolean[]{false, true}); vl = v.query().labels("child").interval("weight", 0.0, 1.0).direction(OUT).vertexIds(); assertEquals(2 * numV / 10, vl.size()); assertTrue(vl.isSorted());
/** * Returns the number of edges that match this query * * @return Number of edges that match this query */ public default long edgeCount() { return vertexIds().size(); }
public void retrieveNgh(boolean inMemory) { long time = time(); Vertex vertices[] = new TitanVertex[numVertices]; for (int i = 0; i < numVertices; i++) vertices[i] = graph.getVertices("uid", i).iterator().next(); time = time() - time; //System.out.println("Vertex retrieval: " + time); for (int t = 0; t < 4; t++) { time = time(); for (int i = 0; i < numVertices; i++) { TitanVertexQuery q = ((TitanVertexQuery) vertices[i].query()).direction(Direction.OUT).labels("connect"); if (inMemory) { //TODO: this has been disabled for (Vertex v : q.vertices()) { v.getId(); } } else { VertexList vl = q.vertexIds(); for (int j = 0; j < vl.size(); j++) { vl.get(j); } } } time = time() - time; System.out.println("Ngh retrieval: " + time); } graph.commit(); }
public void neighborhoodTest() { testCreateAndRetrieveComprehensive(); log.debug("Neighborhood:"); TitanVertex n1 = tx.getVertex("name", "Node1"); TitanVertexQuery q = n1.query().direction(OUT).types(tx.getEdgeLabel("connect")); VertexList res = q.vertexIds(); assertEquals(1, res.size()); TitanVertex n2 = tx.getVertex("name", "Node2"); assertEquals(n2.getID(), res.getID(0)); }
assertEquals(10, u.query().labels("connectDesc").direction(IN).interval("time", 3, 31).count()); assertEquals(0, v.query().labels("connect").direction(OUT).has("time", null).count()); assertEquals(10, v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertexIds().size()); assertEquals(edgesPerLabel-10, v.query().labels("connect").direction(OUT).has("time", Compare.GREATER_THAN, 31).count()); assertEquals(10, Iterables.size(v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertices())); assertEquals((int)Math.floor(edgesPerLabel/(5.0*2)), v.query().labels("knows").direction(OUT).has("author", v).interval("weight", 2.1, 4.0).count()); assertEquals(20, Iterables.size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertices())); assertEquals(20, Iterables.size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertexIds())); assertEquals(30, v.query().labels("friend", "connect", "knows").direction(OUT).interval("time", 3, 33).count()); assertEquals(noVertices-2, v.query().labels("friend", "connect", "knows").direction(OUT).has("time", Compare.NOT_EQUAL, 10).count()); assertEquals(2*(int)Math.ceil((noVertices-1)/4.0), Iterables.size(v.query().labels("connect", "friend", "knows").has("weight", 1.5).vertexIds())); assertEquals(1, v.query().direction(IN).has("time", 1).count()); assertEquals(10, v.query().direction(OUT).interval("time", 4, 14).count()); assertEquals(noVertices-1, Iterables.size(v.query().direction(IN).vertices())); for (Direction dir : new Direction[]{IN,OUT}) { vl = v.query().labels().direction(dir).interval("time", 3, 31).vertexIds(); vl.sort(); for (int i = 0; i < vl.size(); i++) assertEquals(vidsubset[i], vl.getID(i)); assertEquals(10, u.query().labels("connectDesc").direction(IN).interval("time", 3, 31).count()); assertEquals(0, v.query().labels("connect").direction(OUT).has("time", null).count()); assertEquals(10, v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertexIds().size()); assertEquals(edgesPerLabel-10, v.query().labels("connect").direction(OUT).has("time", Compare.GREATER_THAN, 31).count()); assertEquals(10, Iterables.size(v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertices())); assertEquals((int)Math.floor(edgesPerLabel/(5.0*2)), v.query().labels("knows").direction(OUT).has("author", v).interval("weight", 2.1, 4.0).count());
assertEquals(10, u.query().labels("connectDesc").direction(IN).interval("time", 3, 31).count()); assertEquals(0, v.query().labels("connect").direction(OUT).has("time", null).count()); assertEquals(10, v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertexIds().size()); assertEquals(edgesPerLabel-10, v.query().labels("connect").direction(OUT).has("time", Compare.GREATER_THAN, 31).count()); assertEquals(10, Iterables.size(v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertices())); assertEquals((int)Math.floor(edgesPerLabel/(5.0*2)), v.query().labels("knows").direction(OUT).has("author", v).interval("weight", 2.1, 4.0).count()); assertEquals(20, Iterables.size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertices())); assertEquals(20, Iterables.size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertexIds())); assertEquals(30, v.query().labels("friend", "connect", "knows").direction(OUT).interval("time", 3, 33).count()); assertEquals(noVertices-2, v.query().labels("friend", "connect", "knows").direction(OUT).has("time", Compare.NOT_EQUAL, 10).count()); assertEquals(2*(int)Math.ceil((noVertices-1)/4.0), Iterables.size(v.query().labels("connect", "friend", "knows").has("weight", 1.5).vertexIds())); assertEquals(1, v.query().direction(IN).has("time", 1).count()); assertEquals(10, v.query().direction(OUT).interval("time", 4, 14).count()); assertEquals(noVertices-1, Iterables.size(v.query().direction(IN).vertices())); for (Direction dir : new Direction[]{IN,OUT}) { vl = v.query().labels().direction(dir).interval("time", 3, 31).vertexIds(); vl.sort(); for (int i = 0; i < vl.size(); i++) assertEquals(vidsubset[i], vl.getID(i)); assertEquals(10, u.query().labels("connectDesc").direction(IN).interval("time", 3, 31).count()); assertEquals(0, v.query().labels("connect").direction(OUT).has("time", null).count()); assertEquals(10, v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertexIds().size()); assertEquals(edgesPerLabel-10, v.query().labels("connect").direction(OUT).has("time", Compare.GREATER_THAN, 31).count()); assertEquals(10, Iterables.size(v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertices())); assertEquals((int)Math.floor(edgesPerLabel/(5.0*2)), v.query().labels("knows").direction(OUT).has("author", v).interval("weight", 2.1, 4.0).count());
evaluateQuery(v.query().labels(child.getName()).direction(BOTH), EDGE, numV, 1 , new boolean[]{true,true}); vl = v.query().labels(child.getName()).direction(BOTH).vertexIds(); assertEquals(numV,vl.size()); assertTrue(vl.isSorted()); evaluateQuery(v.query().labels(child.getName()).interval(weight, 0.0, 1.0).direction(OUT), EDGE, 2*numV/10, 1 , new boolean[]{false,true}); vl = v.query().labels(child.getName()).interval(weight, 0.0, 1.0).direction(OUT).vertexIds(); assertEquals(2*numV/10,vl.size()); assertTrue(vl.isSorted()); evaluateQuery(v.query().labels(child.getName()).interval(time, 70, 80).direction(OUT).orderBy(time,Order.ASC), EDGE, 10, 1 , new boolean[]{true,true},time,Order.ASC); vl = v.query().labels(child.getName()).interval(time, 70, 80).direction(OUT).orderBy(time,Order.ASC).vertexIds(); assertEquals(10,vl.size()); assertFalse(vl.isSorted()); evaluateQuery(v.query().labels(child.getName()).direction(BOTH), EDGE, numV, 1 , new boolean[]{true,true}); vl = v.query().labels(child.getName()).direction(BOTH).vertexIds(); assertEquals(numV,vl.size()); assertTrue(vl.isSorted()); evaluateQuery(v.query().labels(child.getName()).interval(weight, 0.0, 1.0).direction(OUT), EDGE, 2*numV/10, 1 , new boolean[]{false,true}); vl = v.query().labels(child.getName()).interval(weight, 0.0, 1.0).direction(OUT).vertexIds(); assertEquals(2*numV/10,vl.size()); assertTrue(vl.isSorted());