Hi Casper,
Gremlin query seems correct and efficient, maybe this is only due to the
Gremlin layer on top of OrientDB.

Lvc@


On 13 April 2015 at 12:27, CasperCLD <[email protected]> wrote:

> I see that the images are missing. Now included.
>
> Additional info: the benchmarks were executed on a Virtual Machine,
> running Debian Wheezy 7 64-bit, i7 3615QM 4 Cores, 4GB RAM.
>
>
>
>
> On Monday, April 13, 2015 at 12:20:59 PM UTC+2, CasperCLD wrote:
>>
>> Hi all,
>>
>> Recently I asked the question if there was any performance difference
>> with OSQL and Gremlin.
>> I've created a comparison between OSQL and Gremlin graph traversal. In
>> this comparison I searched for all adjacent nodes of a vertex (depth 0) and
>> the adjacent nodes of those (depth 1) etc.
>> Three types of graphs were compared. These are: graphs with high
>> interconnectivity, medium interconnectivity and low interconnectivity. For
>> every type of graph a duplicate graph was created and filled with orphan
>> nodes (not connected nodes). This was done in order to test the performance
>> between the graph engines when orphan nodes were involved. The graphs were
>> abbreviated to Generated Graph High/Medium/Low Orphan (GG-H/M/L O) and
>> their composition is displayed below in tables:
>>
>> GG-H/O consists of 1 million vertices and 5 million edges
>> GG-M/O consists of 1 million vertices and 3 million edges
>> GG-L/O consists of 1 million vertices and 1 million edges
>>
>> The following code was used to traverse the vertices:
>>
>> /**
>>  * Traverse all vertices up until the specified depth. Edges are not returned
>>
>>  * GREMLIN
>>  */
>> public void traverseVerticesGremlin(Object vId, int depth, boolean 
>> logEnabled) {
>>     Set x = new HashSet<Vertex>();
>>
>>     Set e = new HashSet<Edge>();
>>     new GremlinPipeline<>()
>>         .start(vId)
>>         .as("s1")
>>         .bothE()
>>         .as("e")
>>         .store(e)
>>         .bothV()
>>         .except("s1")
>>         .except(x)
>>         .store(x)
>>         .loop("s1", o -> {
>>             if (logEnabled)
>>                 System.out.println(((LoopPipe.LoopBundle) 
>> o).getObject().toString());
>>             return ((LoopPipe.LoopBundle) o).getLoops() <= depth;
>>         }).iterate();
>>     edgeCounter = e.size();
>>     vertexCounter = x.size();
>>
>> }
>>
>>
>>
>> /**
>>  * Traverse all vertices up until the specified depth. Edges are not returned
>>
>>  * OSQL
>>  */
>>
>> public void traverseVerticesOSQL(Object vId, int depth, boolean logEnabled) {
>>
>>     if (queryType.equalsIgnoreCase("osql-traverse")) {
>>         oSqlQuery = "SELECT FROM (traverse * from " + vId + " while $depth 
>> <= " + depth + " strategy BREADTH_FIRST) LIMIT -1";
>>     }
>>
>>     ((Iterable<Object>) ((OrientGraph) graph).command(new 
>> OSQLSynchQuery<>(oSqlQuery)).execute()).forEach(o -> {
>>         if (logEnabled))
>>             System.out.println(o);
>>         if (o.getClass() == OrientVertex.class) vertexCounter++;
>>         else if (o.getClass() == OrientEdge.class) edgeCounter++;
>>     });
>>
>> }
>>
>>
>> The results are shown below:
>>
>>
>>
>> While the results are the same I see a huge performance drop, when I use
>> Gremlin. The Gremlin command was fully optimised in discussion
>> <https://groups.google.com/forum/#!topic/gremlin-users/KME74J4apus> with
>> Gremlin guru Daniel Kuppitz.
>> How can this performance be so different?
>>
>>  --
>
> ---
> 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 [email protected].
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Best Regards,

Luca Garulli
CEO at Orient Technologies LTD
the Company behind OrientDB
http://about.me/luca.garulli

-- 

--- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to