Thank you so much Michael. it's obviously in the docs. On Wednesday, April 2, 2014 12:50:26 PM UTC+7, Michael Hunger wrote: > > It is also supported via the rest api > > You find it in the docs > > Sent from mobile device > > Am 02.04.2014 um 06:47 schrieb Rio Eduardo <rioedu...@gmail.com<javascript:> > >: > > Oh yeah Michael I'm new in traversal api, after I read the doc about > traversal api, should I use it with java? I mean is there others way to use > traversal api, ex: I can run the syntax traversal api in neo4j shell or > http? if there is, please provide me a reference how to use traversal api > not through java. > > Thank you. > > On Tuesday, April 1, 2014 8:31:25 PM UTC+7, Michael Hunger wrote: >> >> For the traversal framework check out: >> http://docs.neo4j.org/chunked/milestone/tutorial-traversal.html >> >> >> On Tue, Apr 1, 2014 at 3:09 PM, Rio Eduardo <rioedu...@gmail.com> wrote: >> >>> Hi Michael, >>> >>> you said "In general if you really want to do these deep traversals you >>> might be better off (in terms of performance) using the traversal-API with >>> an appropriate uniqueness constraint, like node-path". Please give me any >>> references so I can learn it. or Does it mean you suggest me to use Gremlin? >>> >>> Thank you. >>> >>> >>> On Monday, March 31, 2014 8:09:32 PM UTC+7, Michael Hunger wrote: >>> >>>> Just use a dataset that you can reason about and check if they work >>>> correctly. >>>> >>>> Hard for me to be the consistency checker on your queries :) >>>> >>>> In general if you really want to do these deep traversals you might be >>>> better off (in terms of performance) using the traversal-API with an >>>> appropriate uniqueness constraint, like node-path. >>>> >>>> >>>> >>>> >>>> On Mon, Mar 31, 2014 at 1:09 PM, Rio Eduardo <rioedu...@gmail.com>wrote: >>>> >>>>> Hello again Michael. >>>>> >>>>> I just want to make sure that my query is correct to find friends of >>>>> friends at depth of four and five. Please help me by checking my query. >>>>> >>>>> Query at depth of four: >>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User) >>>>> WHERE U.user_id=1 >>>>> WITH DISTINCT U, FU, FFU >>>>> WHERE FFU<>U >>>>> WITH DISTINCT U, FU, FFU >>>>> MATCH (FFU:User)-[FFF:Friend]->(FFFU:User) >>>>> WHERE FFFU<>FU >>>>> WITH DISTINCT U, FFU, FFFU >>>>> MATCH (FFFU:User)-[FFFF:Friend]->(FFFFU:User) >>>>> WHERE FFFFU<>FFU AND FFFFU<>U AND NOT (U)-[:Friend]->(FFFFU) >>>>> RETURN DISTINCT FFFFU.username; >>>>> >>>>> Query at depth of five: >>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User) >>>>> WHERE U.user_id=1 >>>>> WITH DISTINCT U, FU, FFU >>>>> WHERE FFU<>U >>>>> WITH DISTINCT U, FU, FFU >>>>> MATCH (FFU:User)-[FFF:Friend]->(FFFU:User) >>>>> WHERE FFFU<>FU >>>>> WITH DISTINCT U, FFU, FFFU >>>>> MATCH (FFFU:User)-[FFFF:Friend]->(FFFFU:User) >>>>> WHERE FFFFU<>FFU >>>>> WITH DISTINCT U, FFFU, FFFFU >>>>> MATCH (FFFFU:User)-[FFFFF:Friend]->(FFFFFU:User) >>>>> WHERE FFFFFU<>FFFU AND FFFFFU<>U AND NOT (U)-[:Friend]->(FFFFFU) >>>>> RETURN DISTINCT FFFFFU.username; >>>>> >>>>> I need your help so much. >>>>> Thank you. >>>>> >>>>> >>>>> On Sunday, March 30, 2014 7:42:27 PM UTC+7, Michael Hunger wrote: >>>>> >>>>>> Split it up in one more intermediate step, the intermediate steps are >>>>>> there to get the cardinality down, so it doesn't have to match billions >>>>>> of >>>>>> paths, only millions or 100k >>>>>> >>>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User)-[FFF: >>>>>> Friend]->(FFFU:User) >>>>>> WHERE U.user_id=1 >>>>>> WITH DISTINCT U, FU, FFU >>>>>> WHERE FFU<>U >>>>>> WITH DISTINCT U, FFU >>>>>> MATCH (FFU:User)-[FFF:Friend]->(FFFU:User) >>>>>> WHERE NOT (U)-[:Friend]->(FFFU) >>>>>> RETURN distinct FFFU.username; >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Sun, Mar 30, 2014 at 1:29 PM, Rio Eduardo <rioedu...@gmail.com>wrote: >>>>>> >>>>>>> Please help me again Michael. >>>>>>> >>>>>>> You ever said: >>>>>>> >>>>>>> I would also change: >>>>>>> >>>>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User) >>>>>>> WHERE U.user_id=1 AND FFU.user_id<>U.user_id AND NOT >>>>>>> (U)-[:Friend]->(FFU) >>>>>>> RETURN FFU.username >>>>>>> >>>>>>> to >>>>>>> >>>>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User) >>>>>>> WHERE U.user_id=1 >>>>>>> WITH distinct U, FFU >>>>>>> WHERE FFU<>U AND NOT (U)-[:Friend]->(FFU) >>>>>>> RETURN FFU.username >>>>>>> >>>>>>> Query above is to find friends of friends at depth of two. And I >>>>>>> would like to find friends of friends at depth of three, when I use >>>>>>> model >>>>>>> of your query, it returns result longer than mine and the result is >>>>>>> much >>>>>>> more than mine. Ok so here is model of your query at depth of three: >>>>>>> >>>>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User)-[FFF: >>>>>>> Friend]->(FFFU:User) >>>>>>> WHERE U.user_id=1 >>>>>>> WITH DISTINCT U, FU, FFU, FFFU >>>>>>> WHERE FFU<>U AND FFFU<>FU AND NOT (U)-[:Friend]->(FFFU) >>>>>>> RETURN FFFU.username; >>>>>>> >>>>>>> ... >>>>>>> >>>>>>> 118858 rows >>>>>>> 20090 ms >>>>>>> >>>>>>> Mine: >>>>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User)-[FFF: >>>>>>> Friend]->(FFFU:User) >>>>>>> WHERE U.user_id=1 AND FFU<>U AND FFFU<>FU AND NOT >>>>>>> (U)-[:Friend]->(FFFU) >>>>>>> RETURN DISTINCT FFFU.username; >>>>>>> >>>>>>> ... >>>>>>> >>>>>>> 950 rows >>>>>>> 18133 ms >>>>>>> >>>>>>> Please help me, Why is model of your query longer than mine and >>>>>>> return much more results than mine? >>>>>>> >>>>>>> Thank you. >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Friday, March 28, 2014 8:30:20 PM UTC+7, Michael Hunger wrote: >>>>>>> >>>>>>>> Rio, >>>>>>>> >>>>>>>> was this your first run of both statements? If so, please run them >>>>>>>> for a second time. >>>>>>>> And did you create an index or constraint for :User(user_id) ? >>>>>>>> >>>>>>>> MATCH (U:User) RETURN COUNT(U); >>>>>>>> >>>>>>>> I would also change: >>>>>>>> >>>>>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User) >>>>>>>> WHERE U.user_id=1 AND FFU.user_id<>U.user_id AND NOT >>>>>>>> (U)-[:Friend]->(FFU) >>>>>>>> RETURN FFU.username >>>>>>>> >>>>>>>> to >>>>>>>> >>>>>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User) >>>>>>>> WHERE U.user_id=1 >>>>>>>> WITH distinct U, FFU >>>>>>>> WHERE FFU<>U AND NOT (U)-[:Friend]->(FFU) >>>>>>>> RETURN FFU.username >>>>>>>> >>>>>>>> I quickly created a dataset on my machine: >>>>>>>> >>>>>>>> cypher 2.0 foreach (i in range(1,1000) | create (:User {id:i})); >>>>>>>> >>>>>>>> create constraint on (u:User) assert u.id is unique; >>>>>>>> >>>>>>>> match (u1:User),(u2:User) with u1,u2 where rand() < 0.1 create >>>>>>>> (u1)-[:Friend]->(u2); >>>>>>>> >>>>>>>> Relationships created: 99974 >>>>>>>> >>>>>>>> 778 ms >>>>>>>> >>>>>>>> match (u:User) return count(*); >>>>>>>> >>>>>>>> +----------+ >>>>>>>> | count(*) | >>>>>>>> +----------+ >>>>>>>> | 1000 | >>>>>>>> +----------+ >>>>>>>> 1 row >>>>>>>> *4 ms* >>>>>>>> >>>>>>>> >>>>>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User) >>>>>>>> WHERE U.id=1 >>>>>>>> WITH distinct U, FFU >>>>>>>> WHERE FFU<>U AND NOT (U)-[:Friend]->(FFU) >>>>>>>> RETURN FFU.id; >>>>>>>> >>>>>>>> ... >>>>>>>> >>>>>>>> 910 rows >>>>>>>> >>>>>>>> 101 ms >>>>>>>> >>>>>>>> but even your query takes only >>>>>>>> >>>>>>>> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User) >>>>>>>> WHERE U.id=1 AND FFU.id<>U.id AND NOT (U)-[:Friend]->(FFU) >>>>>>>> RETURN FFU.id; >>>>>>>> >>>>>>>> ... >>>>>>>> >>>>>>>> 8188 rows >>>>>>>> >>>>>>>> 578 ms >>>>>>>> >>>>>>>> >>>>>>>> On Fri, Mar 28, 2014 at 2:08 PM, Lundin <lundin....@gmail.com> >>>>>>>> wrote: >>>>>>>> > >>>>>>>> > ms, it is milliseconds. >>>>>>>> > >>>>>>>> > What is the corresponding result for a SQL db ? >>>>>>>> > MATCH (n:User)-[:Friend*3]-(FoFoF) return FoFoF; >>>>>>>> > >>>>>>>> > Albeit a valid search is it something useful ? I would think >>>>>>>> finding a specific persons FoFoF in either end, as a starting point or >>>>>>>> end >>>>>>>> point, would be a very realistic scenario. Adding an Index on >>>>>>>> User:name and >>>>>>>> query for a User with name:Rio try to find his FoFoF. >>>>>>>> > >>>>>>>> > Yes, neo4j has been kind and exposed various function, like >>>>>>>> shortestpath in cypher >>>>>>>> > http://docs.neo4j.org/refcard/2.0/ >>>>>>>> > >>>>>>>> > Also look at some gist examples >>>>>>>> > https://github.com/neo4j-contrib/graphgist/wiki >>>>>>>> > >>>>>>>> > Den fredagen den 28:e mars 2014 kl. 05:00:22 UTC+1 skrev Rio >>>>>>>> Eduardo: >>>>>>>> >> >>>>>>>> >> Thank you so much for the reply Lundin. I really apreciate it. >>>>>>>> Okay, yesterday I just tested my experiment again. And the result was >>>>>>>> not >>>>>>>> what I imagined and expected before. Okay, before I tested 1M users, I >>>>>>>> reduced the number of users into 1000 users and tested it not in my >>>>>>>> social >>>>>>>> network but directly in database only(Neo4j Shell) to find out that it >>>>>>>> was >>>>>>>> not caused by the performance of pc. But the result of returning 1000 >>>>>>>> users >>>>>>>> was 200ms and 1 row and the result of returning friends at depth of >>>>>>>> two was >>>>>>>> 85000ms and 2500 rows and are 200ms and 85000ms fast to you? and what >>>>>>>> does >>>>>>>> ms stand for? is it milliseconds or microseconds? >>>>>>>> >> >>>>>>>> >> the query I use for returning 1000 users is >>>>>>>> >> MATCH (U:User) RETURN COUNT(U); >>>>>>>> >> >>>>>>>> >> and the query I use for returning friends at depth of two is >>>>>>>> >> MATCH (U:User)-[F:Friend]->(FU:User)-[FF:Friend]->(FFU:User) >>>>>>>> >> WHERE U.user_id=1 AND FFU.user_id<>U.user_id AND NOT >>>>>>>> (U)-[:Friend]->(FFU) >>>>>>>> >> RETURN FFU.username >>>>>>>> >> >>>>>>>> >> Please note that I tested with default configuration of Neo4j >>>>>>>> and created users with 1000 random nodes and created friends >>>>>>>> relationships >>>>>>>> with 50000 random relationships(1 user has 50 friends). Each >>>>>>>> relationship >>>>>>>> has a label Friend and no properties on it. Each node has a label >>>>>>>> User, 4 >>>>>>>> properties: user_id, username, password and profile_picture. Each >>>>>>>> property >>>>>>>> has a value of 1-60 characters. average of characters of >>>>>>>> user_id=1-1000 >>>>>>>> characters, all usernames have 10 characters randomly, all passwords >>>>>>>> have >>>>>>>> 60 characters because I MD5 it, and profile_picture has 1-60 >>>>>>>> characters. >>>>>>>> >> >>>>>>>> >> And about your statement "Otherwise if you really need to >>>>>>>> present that many "things" just paging the result with SKIP,LIMIT. I >>>>>>>> has >>>>>>>> never made sense to present 1M of anything at a time for a user.", I >>>>>>>> already did according to your statement above but it is still the >>>>>>>> same, >>>>>>>> Neo4j returns result slower. >>>>>>>> >> >>>>>>>> >> And I'm wondering if Neo4j already applied one of graph >>>>>>>> algorithms(shortest path, djikstra, A*, etc) in its system or not. >>>>>>>> >> >>>>>>>> >> Thank you. >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> On Friday, March 28, 2014 3:43:49 AM UTC+7, Lundin wrote: >>>>>>>> >>> >>>>>>>> >>> Rio, any version will do. They can all handle million nodes on >>>>>>>> common hardware, no magic at all. When hundred of millions of billions >>>>>>>> then >>>>>>>> we might need to look into specfication more in detail. But in that >>>>>>>> case >>>>>>>> with that kind of data there are other bottlencks for a social network >>>>>>>> or >>>>>>>> any web appp that needs to be taken care of as well. >>>>>>>> >>> >>>>>>>> >>> you said: >>>>>>>> >>>> >>>>>>>> >>>> Given any two persons chosen at random, is there a path that >>>>>>>> connects them that is at most five relationships long? For a social >>>>>>>> network >>>>>>>> containing 1,000,000 people, each with approximately 50 friends, the >>>>>>>> results strongly suggest that graph databases are the best choice for >>>>>>>> connected data. And graph database can still work 150 times faster >>>>>>>> than >>>>>>>> relational database at third degree and 1000 times faster at fourth >>>>>>>> degre >>>>>>>> >>> >>>>>>>> >>> >>>>>>>> >>> I fail to see how this is connected to your attempt to list 1M >>>>>>>> users in one go at the first page. You would want to seek if there is >>>>>>>> a >>>>>>>> relationship and return that path between users. You need two start >>>>>>>> nodes >>>>>>>> and seek a path by traveser the relationsip rather than scan tables >>>>>>>> and >>>>>>>> that would be the comparison. >>>>>>>> >>> Otherwise if you really need to present that many "things" just >>>>>>>> paging the result with SKIP,LIMIT. I has never made sense to present >>>>>>>> 1M of >>>>>>>> anything at a time for a user. Again, that wouldn't really serve your >>>>>>>> experiment much good to prove graph theory. >>>>>>>> >>> >>>>>>>> >>> What is the result of MATCH(U:User) RETURN count(U); ? >>>>>>>> >>> >>>>>>>> >>> Also when you do your test make sure to add the warm/cold cache >>>>>>>> effect (better/worse performance) >>>>>>>> >>> >>>>>>>> >>> Den torsdagen den 27:e mars 2014 kl. 17:57:10 UTC+1 skrev Rio >>>>>>>> Eduardo: >>>>>>>> >>>> >>>>>>>> >>>> I just knew about memory allocation and just read Server >>>>>>>> Performance Tuning of Neo4j. neo4j.properties: >>>>>>>> >>>> # Default values for the low-level graph engine >>>>>>>> >>>> >>>>>>>> >>>> #neostore.nodestore.db.mapped_memory=25M >>>>>>>> >>>> #neostore.relationshipstore.db.mapped_memory=50M >>>>>>>> >>>> #neostore.propertystore.db.mapped_memory=90M >>>>>>>> >>>> #neostore.propertystore.db.strings.mapped_memory=130M >>>>>>>> >>>> #neostore.propertystore.db.arrays.mapped_memory=130M >>>>>>>> >>>> >>>>>>>> >>>> Should I change this to get high performance? If yes, please >>>>>>>> suggest me. >>>>>>>> >>>> >>>>>>>> >>>> And I just knew about Neo4j Licenses, they are Community, >>>>>>>> Personal, Startups, Business and Enterprise. And at Neo4j website all >>>>>>>> features are explained. So which Neo4j should I use for my case that >>>>>>>> has >>>>>>>> millions nodes and relationships? >>>>>>>> >>>> >>>>>>>> >>>> Please answer. I need your help so much. >>>>>>>> >>>> >>>>>>>> >>>> Thanks. >>>>>>>> >>>> >>>>>>>> >>>> On Tuesday, March 25, 2014 12:03:58 AM UTC+7, Rio Eduardo >>>>>>>> wrote: >>>>>>>> >>>>> >>>>>>>> >>>>> I'm testing my thesis which is about transforming from >>>>>>>> relational database to graph database. After transforming from >>>>>>>> relational >>>>>>>> database to graph database, I will test their own performance >>>>>>>> according to >>>>>>>> query response time and throughput. In relational database, I use >>>>>>>> MySQL >>>>>>>> while in graph database I use Neo4j for testing. I will have 3 Million >>>>>>>> more >>>>>>>> nodes and 6 Million more relationships. But when I just added 60000 >>>>>>>> nodes, >>>>>>>> my Neo4j is already dead. When I tried to return all 60000 nodes, it >>>>>>>> returned unknown. I did the same to MySQL, I added 60000 records but >>>>>>>> it >>>>>>>> could return all 60000 records. It's weird because it's against the >>>>>>>> papers >>>>>>>> I read that told me graph database is faster than relational database >>>>>>>> So >>>>>>>> Why is Neo4j slower(totally dead) in lower specification of >>>>>>>> pc/notebook >>>>>>>> while MySQL is not? And What specification of pc/notebook do I should >>>>>>>> use >>>>>>>> to give the best performance during testing with millions of nodes and >>>>>>>> relationships? >>>>>>>> >>>>> >>>>>>>> >>>>> 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 neo4j+un...@googlegroups.com. >>>>>>>> >>>>>>>> > 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 neo4j+un...@googlegroups.com. >>>>>>> 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 neo4j+un...@googlegroups.com. >>>>> 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 neo4j+un...@googlegroups.com. >>> 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 neo4j+un...@googlegroups.com <javascript:>. > 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 neo4j+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.