I just created a "super" label and a constraint on the id of its nodes. Just to make it more clear, at first i had 16 labels (which could be represented by the roles of each person inside a company) and only one relationship between 2 different nodes (which is of only one kind, DIRECTS for example). The "super" label i created now is something like "MemberOfCompany" and added a constraint on it
Should i add ON CREATE before SET and CALL the addLabels method or is it going to be redundant/disruptive? When i need to MERGE relationships this is the code i use String query = "UNWIND $relationships AS relationship " + "MATCH (x {id: relationship.source_id}), (y {id: relationship.target_id}) " + "CALL apoc.merge.relationship(x, relationship.type, {source_id: relationship.source_id, target_id: relationship.target_id, type: relationship.type}, relationship, y) YIELD rel RETURN rel"; session.run( query, params ); I'm suspecting this could be highly inefficient aswell, especially since i dont have a unique id for each relationship and i use a combo of source, target and type to determine its uniqueness. Is there anything here i could do differently to improve the efficiency and performances of this part? Thanks again Il giorno giovedì 7 febbraio 2019 22:47:16 UTC+1, eve.freema ha scritto: > > Sure thing. Let us know how it works out. :) > > On Thu, Feb 7, 2019 at 4:43 PM Andrea Balzoni <andrea....@keypartner.it > <javascript:>> wrote: > >> Thanks a lot for your input, i'll surely try what you suggested and add a >> constraint to my schema :) >> >> Thankd again for taking your time to answer >> >> Il giorno gio 7 feb 2019, 22:04 Eve Freeman <eve.f...@gmail.com >> <javascript:>> ha scritto: >> >>> Something like (these are totally untested, sorry for bugs)--also, this >>> label AllCategories should probably be more what your entities actually are: >>> >>> create constraint on (allCategories:AllCategories) assert >>> allCategories.id is unique; >>> >>> UNWIND $nodes AS n >>> MERGE (node:AllCategories {id: n.id}) >>> SET node += n >>> RETURN node >>> >>> If you want to retain category as a label, you could add it in a second >>> part with something like: >>> UNWIND $nodes AS n >>> MERGE (node:AllCategories {id: n.id}) >>> SET node += n >>> call apoc.create.addLabels([ id(node) ], [ n.category ]) yield node >>> RETURN node >>> >>> On Thu, Feb 7, 2019 at 3:52 PM Andrea Balzoni <andrea....@keypartner.it >>> <javascript:>> wrote: >>> >>>> Ids are supposed to be globally unique, regardless of their label >>>> (again, i'm not sure this is the best approach, but i thought it was the >>>> one that made more sense), i'm not sure what kind of info i could provide >>>> so feel free to ask... >>>> >>>> Il giorno gio 7 feb 2019, 21:24 Eve Freeman <eve.f...@gmail.com >>>> <javascript:>> ha scritto: >>>> >>>>> Whoops, "if so" should be "if not". >>>>> >>>>> On Thu, Feb 7, 2019 at 3:22 PM Eve Freeman <eve.f...@gmail.com >>>>> <javascript:>> wrote: >>>>> >>>>>> Are the ids unique to each label? If so, maybe you can merge on one >>>>>> "inclusive" label and then add an additional category label, and then >>>>>> you >>>>>> can have just one constraint. No idea what you're doing here, so giving >>>>>> my >>>>>> best guess. >>>>>> >>>>>> On Thu, Feb 7, 2019 at 2:40 PM Andrea Balzoni < >>>>>> andrea....@keypartner.it <javascript:>> wrote: >>>>>> >>>>>>> That sounds like a lot of constraints or am i wrong? >>>>>>> >>>>>>> Il giorno gio 7 feb 2019, 20:19 Eve Freeman <eve.f...@gmail.com >>>>>>> <javascript:>> ha scritto: >>>>>>> >>>>>>>> Yes. You would need to add a constraint for each label + id >>>>>>>> combination. >>>>>>>> >>>>>>>> On Thu, Feb 7, 2019 at 1:57 PM Andrea Balzoni < >>>>>>>> andrea....@keypartner.it <javascript:>> wrote: >>>>>>>> >>>>>>>>> Sadly the ids i'm trying to add are not going to be necessarily >>>>>>>>> unique, hence why i'm using merge. I think i grasped what a constrant >>>>>>>>> is, >>>>>>>>> but i cant say the same about indexes. So you are telling me that >>>>>>>>> adding a >>>>>>>>> constraint on ids would make the query faster? Sorry about questions >>>>>>>>> that >>>>>>>>> might sound stupid, but i'm fairly new to neo4j... >>>>>>>>> >>>>>>>>> Il giorno gio 7 feb 2019, 18:59 Eve Freeman <eve.f...@gmail.com >>>>>>>>> <javascript:>> ha scritto: >>>>>>>>> >>>>>>>>>> One other note--if you know these are unique ids, you can avoid >>>>>>>>>> using merge, and just use create, which will be quicker still. >>>>>>>>>> >>>>>>>>>> On Thu, Feb 7, 2019 at 12:54 PM Eve Freeman <eve.f...@gmail.com >>>>>>>>>> <javascript:>> wrote: >>>>>>>>>> >>>>>>>>>>> Well, what a merge will do is check whether something exists >>>>>>>>>>> before it creates it, "match or create". The match step will get >>>>>>>>>>> linearly >>>>>>>>>>> slower as it has to scan larger and larger lists of nodes on a >>>>>>>>>>> label. If >>>>>>>>>>> you add an index (at minimum), or unique constraint/node key >>>>>>>>>>> (preferred, >>>>>>>>>>> especially if you require uniqueness and will eventually have >>>>>>>>>>> concurrent >>>>>>>>>>> requests of this nature), it will be able to do the match step much >>>>>>>>>>> quicker. >>>>>>>>>>> >>>>>>>>>>> On Thu, Feb 7, 2019 at 12:50 PM Andrea Balzoni < >>>>>>>>>>> andrea....@keypartner.it <javascript:>> wrote: >>>>>>>>>>> >>>>>>>>>>>> Honestly i heard of those, but i'm not using any. I'm quite new >>>>>>>>>>>> to it, so i wasnt sure what their purpose is. >>>>>>>>>>>> >>>>>>>>>>>> Il giorno gio 7 feb 2019, 18:43 Eve Freeman <eve.f...@gmail.com >>>>>>>>>>>> <javascript:>> ha scritto: >>>>>>>>>>>> >>>>>>>>>>>>> What's your schema? Do you have a unique constraint or index >>>>>>>>>>>>> on the labels + id you're merging on? >>>>>>>>>>>>> >>>>>>>>>>>>> Eve >>>>>>>>>>>>> >>>>>>>>>>>>> On Thu, Feb 7, 2019 at 12:23 PM <andrea....@keypartner.it >>>>>>>>>>>>> <javascript:>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hello everyone, i'm trying to MERGE thousands of nodes using >>>>>>>>>>>>>> UNWIND and apoc procedures (for a dynamic label creation) using >>>>>>>>>>>>>> Java Driver >>>>>>>>>>>>>> as follows: >>>>>>>>>>>>>> >>>>>>>>>>>>>> String query = >>>>>>>>>>>>>> "UNWIND $nodes AS n " + >>>>>>>>>>>>>> "CALL apoc.merge.node([n.category], {id: n.id}, >>>>>>>>>>>>>> n) YIELD node RETURN node"; >>>>>>>>>>>>>> session.run( query, params ); >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> My database contains something like 150k nodes divided by 16 >>>>>>>>>>>>>> labels and 130k relationships of the same type. It worked fine >>>>>>>>>>>>>> so far, it >>>>>>>>>>>>>> never failed to deliver, but now that i'm trying to create >>>>>>>>>>>>>> something like >>>>>>>>>>>>>> 4k new nodes and 5k new relationships at once it took more than >>>>>>>>>>>>>> 30 minutes. >>>>>>>>>>>>>> I feel like it should be way faster than this. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Am i doing anything wrong? Is it really supposed to be this >>>>>>>>>>>>>> slow? Is there anything i can do to make this process smoother >>>>>>>>>>>>>> and to >>>>>>>>>>>>>> improve performances? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks in advance >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> 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+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+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+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+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+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+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+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+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+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+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.