Hi,
I was wondering if u had a chance to take a look on my results?

Thank you.


On Sunday, June 26, 2016 at 1:30:01 PM UTC+3, idor wrote:
>
> Hi Michael,
> I did experiments with your suggested query. with shortest path I got much 
> lesser DB hits.
>
>
> my query (with shortest path)
>
> PROFILE MATCH p=shortestPath((user:User{userId:'userId123'})-[r*1..3]-(f:
> User))
>         WHERE f <> user 
>         RETURN *
>
> result:
>
>
> <https://lh3.googleusercontent.com/-ds4qwKmZYCI/V2-uIXvSMpI/AAAAAAAAOYE/g-mgIM3ZZ4MQuai64aMhIIP5g_ouxSgvQCLcB/s1600/Screen%2BShot%2B2016-06-26%2Bat%2B1.28.37%2BPM.png>
>
> and using your query (return let's of paths with the same nodes which was 
> redundant)
>
> PROFILE MATCH (user:User{userId:'userId123'})
>  MATCH p=(user)-[r*1..3]-(friend:User)
>         WHERE friend <> user 
>         RETURN friend.userId as userId, reduce(base = '', rel in r | base 
> + ' ' + rel.dist) as dist
>
>
> result:
>
>
> <https://lh3.googleusercontent.com/-GQY7WeqhW1s/V2-uo6YnDnI/AAAAAAAAOYM/KyaRtb4qAmY862yR-bDw-wWhytKWpPrcwCLcB/s1600/Screen%2BShot%2B2016-06-26%2Bat%2B1.29.38%2BPM.png>
>
>
> On Sunday, June 26, 2016 at 12:46:43 AM UTC+3, Michael Hunger wrote:
>>
>>
>>
>> On Sat, Jun 25, 2016 at 10:23 PM, idor <[email protected]> wrote:
>>
>>> Hi Michael,
>>> Thanks for replying. 
>>>
>>> scale it out on a scluster.
>>>
>>>
>>> It requiresNeo4j entreprise license isnt it? 
>>>
>>
>> It will require neo4j enterprise. Which license depends on your use-case 
>> and company.
>>  
>>
>>>
>>> Why do you string-concatinate the dist property?
>>>>
>>>
>>> On each relation we have a numeric property that we want to aggregate 
>>> later on. if A connected to D this way (A->B->C>D) we need the properties 
>>> of each relation between two nodes within 3  hops (A->B,B->C,C->D).
>>>
>>> The expected result would be:
>>> B,C,D and the relation between. 
>>>
>>
>> I don't understand what you're saying. 
>>
>>>
>>>
>>> But you also know that this can potentially return a lot of data? e.g. 
>>>> of you have 100 friends on average this returns 100^3 aka 1M results !
>>>
>>>
>>> The max "friends" of each node will be ~10. not more. 
>>>
>>> for what you do shortest Path is not the right solution
>>>
>>>  
>>> How this query will overcome ciruclar iterations ? let's assume 
>>> following relation ships.. 
>>>
>>
>> Each relationship will appear only once in a path. So no circles.
>>
>> If you mean that there are multiple paths between your start node and 
>> it's 3rd degree neighbors, sure that can happen.
>>
>> You, could either aggregate on the end node and select one of the paths.
>>
>> In APOC procedures there is expandPath operation 
>> <https://github.com/neo4j-contrib/neo4j-apoc-procedures/blob/master/src/main/java/apoc/path/PathExplorer.java#L41>which
>>  
>> allows you to define the uniqueness of nodes and relationships. There you 
>> could define node-global as uniqueness.
>>
>>  
>>
>>>
>>> A->B
>>> B->C->D 
>>> B->F->D
>>> B->H->D
>>> ...
>>> now if I apply it on node A. expected results is (B,C,D,F,H). but as u 
>>> can see there are many *paths* to get into D. I might have lots of 
>>> paths between one source to another(within 3 hops) till I iterate on all 
>>> relevant nodes. 
>>> Wouldnt you query fall for this with performances?
>>>
>>> Thanks.
>>>
>>>
>>>
>>>
>>>
>>> On Saturday, June 25, 2016 at 10:46:37 PM UTC+3, Michael Hunger wrote:
>>>>
>>>> Hi,
>>>>
>>>> for what you do shortest Path is not the right solution, as you don't 
>>>> wan the path between two nodes but the neighborhood of one node.
>>>>
>>>> Also having that many connections when you don't have the CPUs to 
>>>> process it doesn't make sense, scale it out on a scluster.
>>>>
>>>> Why do you string-concatinate the dist property?
>>>>
>>>> I presume you have an index / constraint on :User(userId) ?
>>>>
>>>> Try this instead:
>>>>
>>>>
>>>> MATCH (user:User{userId:<someUser>})
>>>>  MATCH 
>>>> p=(user)-[r:relation_type1|relation_type2|relation_3*1..3]-(friend:User)
>>>>         WHERE friend <> user 
>>>>         RETURN friend.userId as userId, reduce(base = '', rel in r | 
>>>> base + ' ' + rel.dist) as dist 
>>>>
>>>> But you also know that this can potentially return a lot of data? e.g. 
>>>> of you have 100 friends on average this returns 100^3 aka 1M results !
>>>>
>>>> Michael
>>>>
>>>>
>>>> On Sat, Jun 25, 2016 at 10:36 AM, idor <[email protected]> wrote:
>>>>
>>>>> I have in my graph ~1M nodes and ~1M relations.
>>>>>
>>>>> My motivation for query is to retrieve all related nodes(by 3 hops) of 
>>>>> specific source node + aggregate properties within the response.
>>>>>
>>>>> I understood the shortestPath taking your sourceNode and query all 
>>>>> other nodes(not necessarily related ones) in the graph to match the 
>>>>> relevant results.
>>>>> My latency is around 2-4 seconds when I have load (~4000 concurrent 
>>>>> connections). it's too high. 
>>>>>
>>>>> Any idea how could I optimize my query for better performances?
>>>>>
>>>>>
>>>>>  MATCH 
>>>>> p=shortestPath((user:User{userId:<someUser>})-[r:relation_type1|relation_type2|relation_3*1..3]-(user:User))
>>>>>         WHERE f <> user 
>>>>>         RETURN (f.userId) as userId,
>>>>>         reduce(base = '', rel in r | base + ' ' + rel.dist) as dist 
>>>>>
>>>>>
>>>>> * notes: userId and relation_type1/2/3 are auto indexed
>>>>>
>>>>> * I am using the rest client and recently thought to upgrade into the 
>>>>> new BOLT driver(not sure it will helps)
>>>>>
>>>>> Thank you.
>>>>>
>>>>>
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "Neo4j" 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.
>>>>>
>>>>
>>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Neo4j" 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.
>>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" 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