Hi Stef,

The Neo4j Cypher queries express a subgraph/path that you want to match in the 
big graph (nodes and edges with attributes). No fragmentation due to 
normalization etc., so no joins, it’s more like a regex matcher:

MATCH p=(x:PERSON)-[:KNOWS*]->(:PERSON)
WHERE x.name = 'John'
RETURN p;

Will give you the graph of all persons John knows and all the persons they know 
(transitive closure). You can also combine multiple queries that one processes 
the result of the other (pipes and filters). See 
https://neo4j.com/developer/cypher-query-language/

OutOfMemory only happens if your query selects more data (at any point) than 
you have memory, as the query execution happens entirely in memory, there seems 
to be no flush do disk. But there are ways to work around this (albeit 
resulting in uglier partitioned queries).

You can see it in action for my KOWALSKI tool, collecting API clients and 
extracting call graphs: https://youtu.be/zdx28GnoSRQ 
<https://youtu.be/zdx28GnoSRQ>

Cheers,
Manuel

> On 31 Dec 2017, at 11:19, Stephane Ducasse <stepharo.s...@gmail.com> wrote:
> 
> Hi manuel
> 
> what kind of queries can we express?
> Can be get select node?
> Now out of memory is a read falg for me (for moose because we do that
> all the time).
> 
> Stef
> 
> 
> On Tue, Dec 26, 2017 at 10:03 PM, Manuel Leuenberger
> <leuenber...@inf.unibe.ch> wrote:
>> I’ve always liked Neo4j to persist object graphs. Also has a nice query 
>> language. The database is not fool-proof (isolation issues, out of memory on 
>> expensive queries), but works fine for analytics.
>> 
>>> On 25 Dec 2017, at 10:43, Ian Ian <icjohns...@gmail.com> wrote:
>>> 
>>> Hi All,
>>> 
>>> Thoughts of a purely OO nature?
>>> 
>>> :)
>> 
>> 
> 

Reply via email to