Re: [Neo4j] large graph visualizations/analytics
I suppose suggesting a YarcData system is out of the question too -- http://www.yarcdata.com . -- Actually though - I think what you need to do is aggregate some of your nodes and edges, or you need to figure out (much) subgraphs and only look at them at one time. It is hard for the brain to take in a huge amount of data - even visually - without some sort of aggregation. If you can't figure out a subgraph or way to do aggregation, they you probably want to take a sample of the data. Select nodes at random. My 24 screen is configured with a resolution of 1920 x 1080. That gives me about 2M pixels. If I wanted to display 2.3M Nodes, with colors and information about those nodes, and edges between them, I'd need a much, much larger screen. ... Even if I had the memory and processing power. With Gephi, a 4G JVM, and my 24 screen, I find even 20,000 nodes a bit much to process and visualize at once. If you want to take an approach using a browser (such as D3), you should load only portions of the data at once. Anything more than a few (single digit) thousand data points at one time in a browser will drag it down pretty quickly. There are some examples out there of some techniques people have used. This one uses Neo4j as a back end -- http://getvouched.com/visualizations . For advanced D3 examples, check out Mike Bostock's D3 wiki rather than just on the main page or in the zip file -- https://github.com/mbostock/d3/wiki . Here are a couple of links with other ideas for visualizing large graph data sets: http://www.visualcomplexity.com/vc/ http://www.mkbergman.com/414/large-scale-rdf-graph-visualization-tools/ -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Peter Neubauer Sent: Wednesday, April 11, 2012 5:25 AM To: Neo4j user discussions Subject: Re: [Neo4j] large graph visualizations/analytics Ajinkya, just talked to one of the Gephi guys, 2.3M nodes and 60M edges...you should buy another computer with at least 60GB of RAM for Gephi. Cheers, /peter neubauer G: neubauer.peter S: peter.neubauer P: +46 704 106975 L: http://www.linkedin.com/in/neubauer T: @peterneubauer Neo4j - Graphs rule. Program or be programmed - Computer Literacy for kids. http://foocafe.org/#CoderDojo On Wed, Apr 11, 2012 at 10:17 AM, Ajinkya Kale kaleajin...@gmail.com wrote: Hi, I am trying to load neo4j db in Gephi on a 64-bit windows system with 6GB RAM running a 64-bit jvm but it runs out of memory .. i tried to allocate more memory through the jvm parameters and ended up allocating the maximum possible without any luck. My graphdb is of the following dimensions : nodes 2320895 type1 relationship edge 50655143 type2 relationship edge 10632833 Any suggestions on tools/techniques to visualize and run analytics on graphdbs of this scale ? -- Regards, Ajinkya http://ajinkya.info .O. ..O OOO ___ NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register and consider posting at https://groups.google.com/forum/#!forum/neo4j Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register and consider posting at https://groups.google.com/forum/#!forum/neo4j Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register and consider posting at https://groups.google.com/forum/#!forum/neo4j Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Suggestions on how to order relationships?
Another approach, probably not better, would be to only have a relationship from the user to the first movie in the list. Between the movies have relationships with the user as a property, so you could traverse from first to last (which would have no outgoing relationships for that user). You'd have to drop and add relationships to change the ordering (instead of changing properties on a set of relationships). -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Aseem Kishore Sent: Thursday, January 19, 2012 1:24 PM To: Neo4j user discussions Subject: [Neo4j] Suggestions on how to order relationships? Hi there, Take a Facebook-like example, where users can like different movies/music/celebs/etc. Suppose we want to let users drag-and-drop these movies/etc. on their profile pages, to let them e.g. show their favorite movies first. How would you guys recommend achieving that in Neo4j? If possible, I'd like to avoid creating a node for every relationship (redundancy/overhead as we do this more and more). I can't think of anything better than putting properties on the relationship. Maybe index numbers (e.g. rel D might have index: 0, rel B might have index: 1, etc.), but that's essentially reordering an array, which sucks. The other option that thus came to mind was to mimic a linked list: have an after property that contains the ID of the relationship this one comes after (and/or maybe a before property instead or in addition). Just wondering if there are better ideas! Thanks. =) Aseem ___ NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register and consider posting at https://groups.google.com/forum/#!forum/neo4j Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register and consider posting at https://groups.google.com/forum/#!forum/neo4j Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Suggestions on how to order relationships?
On the other hand, it avoids a sort when you are working with the list of movies a particular user likes. (You are pre-building the linked list.) Like I said, probably not better, just different. I guess it partly depends on how you are using the data and whether a sort is faster than a traversal. It is an approach that would not really help with recommendations or finding similar folks. -- In the split-the-difference approach, you would still occasionally have to re-write the properties on all of the like relationships, but only when you hit the limit for your ability to find a between value. It is a good approach -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Aseem Kishore Sent: Thursday, January 19, 2012 2:42 PM To: Neo4j user discussions Subject: Re: [Neo4j] Suggestions on how to order relationships? Can't say I'm a fan of this approach. You lose the ability to quickly determine if the user likes a particular movie, and storing the user (presumably their ID) as a property on the relationship feels like it defeats the point of a graph db, know what I mean? On Thu, Jan 19, 2012 at 1:29 PM, Rick Otten rot...@manta.com wrote: Another approach, probably not better, would be to only have a relationship from the user to the first movie in the list. Between the movies have relationships with the user as a property, so you could traverse from first to last (which would have no outgoing relationships for that user). You'd have to drop and add relationships to change the ordering (instead of changing properties on a set of relationships). -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Aseem Kishore Sent: Thursday, January 19, 2012 1:24 PM To: Neo4j user discussions Subject: [Neo4j] Suggestions on how to order relationships? Hi there, Take a Facebook-like example, where users can like different movies/music/celebs/etc. Suppose we want to let users drag-and-drop these movies/etc. on their profile pages, to let them e.g. show their favorite movies first. How would you guys recommend achieving that in Neo4j? If possible, I'd like to avoid creating a node for every relationship (redundancy/overhead as we do this more and more). I can't think of anything better than putting properties on the relationship. Maybe index numbers (e.g. rel D might have index: 0, rel B might have index: 1, etc.), but that's essentially reordering an array, which sucks. The other option that thus came to mind was to mimic a linked list: have an after property that contains the ID of the relationship this one comes after (and/or maybe a before property instead or in addition). Just wondering if there are better ideas! Thanks. =) Aseem ___ NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register and consider posting at https://groups.google.com/forum/#!forum/neo4j Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register and consider posting at https://groups.google.com/forum/#!forum/neo4j Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register and consider posting at https://groups.google.com/forum/#!forum/neo4j Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register and consider posting at https://groups.google.com/forum/#!forum/neo4j Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Modeling subrelationships in Neo4j
Can you do this with properties on the relationship? In your example a KNOWS relationship could have a how well property, with values 1 to 100. You could define KNOWS_BETTER as [ 50 how well 80 ]. KNOWS_BEST as [ 80 = how well = 100 ]. I'm not sure what the difference between a sub relationship and a relationship qualified with properties really is. -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Sourajit Basak Sent: Tuesday, December 06, 2011 6:09 AM To: user@lists.neo4j.org Subject: [Neo4j] Modeling subrelationships in Neo4j Is it possible to create subrelationships in neo4j ? For e.g. a relationship called KNOWS_BETTER as a subrelationship of KNOWS. Do I need to explicitly connect the nodes using both relationships for the traversal to work ? Lets say, I create this neo4j -- KNOWS_BETTER -- graphDB, does this entails the following ? neo4j -- KNOWS -- graphDB. Such a scenario can be modeled in OWL Ontology, wondering if neo4j has any capabilities. Note: Under the hood, most OWL Ontology implementations do create these *extra* inferred links internally. ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Suggestions on materials for learning graph theory
Also there are several pop-science books on these ideas such as: 'Six Degrees - The Science Of A Connected Age', by Duncan Watts. There is a lightweight graph theory book 'Puzzle and Graphs' by John Fujii, that isn't very rigorous from a mathematical perspective, and may not have much in the way of programming tools, but is a fun look at the field. Most of math focused books are going to be pretty dense though. It is a 175 year old branch of mathematics and is traditionally only taught after you've exhausted most of the calculus track as a math student (although it need not be). Perhaps there is a market for an 'introductory graph theory book for the social network programmer', maybe with a title 'Practical Applied Graph Theory' or something like that. I haven't seen one yet. (I'd add a copy to my personal library.) -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of maxdemarzi Sent: Tuesday, November 08, 2011 6:48 PM To: user@lists.neo4j.org Subject: Re: [Neo4j] Suggestions on materials for learning graph theory Marko's blog has some good articles. http://markorodriguez.com/writings/ The Graph Traversal Pattern = http://arxiv.org/pdf/1004.1001v1 Constructions from Dots and Lines = http://arxiv.org/pdf/1006.2361v1 -- View this message in context: http://neo4j-community-discussions.438527.n3.nabble.com/Suggestions-on-materials-for-learning-graph-theory-tp3490877p3492120.html Sent from the Neo4j Community Discussions mailing list archive at Nabble.com. ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Article: The Coming SQL Collapse
What is the law of separation of concerns and logical vs. physical models, and why is it a law? -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Tobias Ivarsson Sent: Friday, October 14, 2011 8:49 AM To: Neo user discussions Subject: [Neo4j] Article: The Coming SQL Collapse We had an interesting discussion about this internally at Neo Technology today. We thought it might be of interest to the broader community. I don't think the discussion is over, so it would be interesting to continue it on the public mailing list. It regards the initial paragraphs of an article posted to dzone recently: http://www.dzone.com/links/rss/the_coming_sql_collapse.html It mentions Neo4j and how the author dislikes a common way of using Neo4j for building applications. It would be interesting to hear suggestions on how to improve this. Forwarded conversation follows: On Fri, Oct 14, 2011 at 10:13 AM, Tobias Ivarsson tobias.ivars...@neotechnology.com wrote: I found this while reading feeds in bed last night: *The Coming SQL Collapse* http://www.dzone.com/links/rss/the_coming_sql_collapse.html (Sent from Flipboard http://flipboard.com) The things he say about SQL vs NOSQL is not very interesting, but I'd like to raise what he says about Neo4j: I looked at neo4j briefly the other day, and quite predictably thought 'wow, this looks like a serious tinkertoy: it's basically a bunch of nodes where you just blob your attributes.' Worse than that, to wrap objects around it, you have to have them explicitly incorporate their node class, which is ugly, smelly, violates every law of separation of concerns and logical vs. physical models. On the plus side, as I started to look at it more, I realized that it was the perfect way to implement a backend for a bayesian inference engine (more on that later). Why? Because inference doesn't care particularly about all the droll requirements that are settled for you by SQL, and there are no real set operations to speak of. He attacks our pattern of building domain models with Neo4j, calling it ugly, smelly and in violation of every law of separation of concerns and logical vs. physical models. Is he right? My feeling is that he is brain washed with too many so called best practices, but Neo4j has been my main model for a long time now, my perspective is likely skewed. I'd like to hear your thoughts. -- Tobias Ivarsson tobias.ivars...@neotechnology.com On Fri, Oct 14, 2011 at 10:32 AM, Rickard Öberg rickard.ob...@neotechnology.com wrote: Well, I'd tend to agree with the author. Mixing persistence details with the domain model itself is really a bad idea. Infrastructure details should not pollute the domain logic as it does with the currently suggested usage of Neo4j. But I think both Spring Data Graph and the Qi4j usage model fixes this, as it allows you to keep many of those things outside of the domain code. /Rickard On Fri, Oct 14, 2011 at 11:45 AM, Tobias Ivarsson tobias.ivarsson@ neotechnology.com wrote: On Fri, Oct 14, 2011 at 11:21 AM, Rickard Öberg rickard.ob...@neotechnology.com wrote: On 10/14/11 17:16 , Tobias Ivarsson wrote: I was hoping for a bit more elaboration, of why it is a bad idea. Spring Data Neo4j operates mainly in the same way (at least it did when I was part of the design process), it just hides the details of it. The model we suggest is not to mix infrastructure details (nodes, relationships, traversals) with the domain logic. We suggest the domain logic be a separate layer, acting on domain data objects (defined as a set of interfaces). What we do suggest though is for those domain data objects to be implemented as wrappers of nodes and relationships. That sounds like transaction script+anemic domain model, which is an anti-pattern as well. I'm guessing the anemic domain model is what you are pointing out as the anti-pattern. I can see how transaction scripts are and ADM usually come together though. References: http://martinfowler.com/eaaCatalog/transactionScript.html http://martinfowler.com/bliki/AnemicDomainModel.html Domain logic should be in the domain objects, and so splitting them into several layers confuse things more than it helps. I agree with you, SDN solves this, and does so well. So is the bad part of it just the part of having the implementation of your domain data objects deal with the Neo4j API, instead of having DTOs and DAOs that you load from the database, operate on in memory, then store back to the db at explicit points? Or are there deeper issues than that? It relates to testability (you should be able to test domain objects without infrastructure), code cohesion (put domain logic in domain objects), and as the article author points out, separation of concerns in general. The testability aspect is interesting and important. I
Re: [Neo4j] Importing data from oracle to neo4j
Another approach might be to adapt SymmetricDS -- http://symmetricds.codehaus.org/ -- to feed data from your Oracle (or other JDBC accessible Relational database) into Neo4j - live, as the data changes. I've been wanting a SymmetricDS interface to Neo4j for a while. Let me know if you get one working! -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Peter Neubauer Sent: Tuesday, October 11, 2011 6:47 AM To: Neo4j user discussions Subject: Re: [Neo4j] Importing data from oracle to neo4j Hi there, yes, the utility is converting m:n into relationships, see https://github.com/peterneubauer/sql-import and https://github.com/peterneubauer/sql-import/blob/master/src/test/java/com/neo4j/sqlimport/InsertTest.java fro an eample. Let me know if that helps! Cheers, /peter neubauer GTalk: neubauer.peter Skype peter.neubauer Phone +46 704 106975 LinkedIn http://www.linkedin.com/in/neubauer Twitter http://twitter.com/peterneubauer http://www.neo4j.org - Your high performance graph database. http://startupbootcamp.org/ - Öresund - Innovation happens HERE. http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party. On Sat, Oct 8, 2011 at 11:14 PM, Michael Hunger michael.hun...@neotechnology.com wrote: What is your use-case for importing the DWH data? How are you going to model the data of the DWH in neo4j. How does the domain-model look like? BI data is normally denormalized. So for creating a good graph structure it would be sensible to normalize it during the import. 10k rows is not that much. You can import them using the normal neo4j transactional facilities in a few seconds. For building up your graph model you probably want to index your data or create category nodes to access certain parts of your domain model. Peter wrote a tool to import relational data into neo4j but that was normalized data where each table was represented by a certain type of node in the graph and foreign key relationships were converted to graph relationships. I don't know if that also handled m:n connection tables efficiently by converting them to relationships too. HTH Michael Am 08.10.2011 um 23:05 schrieb jiteshks: I am very new to neo4j.So I don't know all of its features.I am reading its documentation to understand how it works. My project's requirement is to import the data from a data warehouse( which is an oracle db) once every month.We are thinking of implementing neo4j in our project which means we will have to read the data from oracle db and put it into neo4j. There will be around 1 lakh rows(10^5) to be fetched from oracle db.What is the fast/efficient way of doing it? Thanks! -- View this message in context: http://neo4j-community-discussions.438527.n3.nabble.com/Importing-dat a-from-oracle-to-neo4j-tp3406024p3406024.html Sent from the Neo4j Community Discussions mailing list archive at Nabble.com. ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
[Neo4j] most in common
I have a graph of a bunch of people who are not connected to each other, but instead connected to things they like. I'd like to start with one person, and find a list of people have the 'most in common' with them. Ideally I'd like to be able to prioritize the things they like, for example, it is more important to find people who like live in the same town, than people who liked the same movie. One approach is to traverse each 'like', one at a time, in order of importance, and then do a bunch of Set intersections on the results, and then return the list of people in reverse order. Is there a way to do this without having to run a whole bunch of queries? -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Open Data Manual - contributions welcome
Hi Tim, I have zero time to either write much, or even explore new ideas these days, but I think an area that would be very interesting to map into a graph model is campaign finance. Showing the relationship of donors to politicians and their committees and the fiscal relationships between politicians could provide great insights into some of the why things happen the way they do. You could also geocode the donors and politicians (their addresses are in the reports), and you could show employers on the graph (employers are listed in the US forms as well). If someone has the time and is looking for a good application of how to use Open Data with a graph model, that is a project I would vote for. I've been wanting to do it ever since the last election, but can't seem to find the time to sit down, download the reports, and feed them into a model or visualization tool. Hi all, Sorry if this is off topic. I am the editor of the Open Data Manual[0]. It's an ever improving manual on how to go about open data. At the moment, it's mostly focused on government data, but that is changing. A great enhancement would be some information on graphs. In particular, an outline of moving data housed in relational tables into a graph would be excellent. The manual has a large readership and it could be a great way to become a published author.* If you would like to assist, please email me off the list. Tim McNamara Professional \\ paperlessprojects.com Personal \\ @timClicks http://twitter.com/timClicks | timmcnamara.co.nz [0] http://opendatamanual.org * We're investigating options for creating printed material, but that hasn't happened yet. ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Open Data Manual - contributions welcome
Campaign finance data for federal offices is available from the Federal Election Commission. http://www.fec.gov State campaign finance data is usually available from the office of the Secretary of State for each state. Here is Ohio's: http://www.sos.state.oh.us/SOS/Campaign%20Finance/Database.aspx (You can search for me in there. I ran for State Rep in 2004.) Often the data is posted online within hours or days after each of the filing deadlines. Journalists, activists, campaign opponents, political scientists, professional fundraisers, and more will mine it to learn about who is paying for what and where they are spending their money. My original idea was to just pull the information for my congressman and build a simple geo graph to visualize how much out of state funding he was getting, but I quickly realized the data is highly interconnected (candidates give money to each other, and to PAC's, and the PAC's then distribute money back to candidates and it gets really confusing), some people give to more than one candidate, other's give to both parties, and others can be identified as all working for the same organization. [Some of those games are played to hide the true origin of the money from the casual political investigator.] The data used to be available in CSV format, it probably still is (I haven't tried to download it in a while)... Hey Rick, Do you know the whereabouts of any of this data? On Fri, Jun 3, 2011 at 5:51 AM, Rick Otten rot...@windfish.net wrote: Hi Tim, I have zero time to either write much, or even explore new ideas these days, but I think an area that would be very interesting to map into a graph model is campaign finance. Showing the relationship of donors to politicians and their committees and the fiscal relationships between politicians could provide great insights into some of the why things happen the way they do. You could also geocode the donors and politicians (their addresses are in the reports), and you could show employers on the graph (employers are listed in the US forms as well). If someone has the time and is looking for a good application of how to use Open Data with a graph model, that is a project I would vote for. I've been wanting to do it ever since the last election, but can't seem to find the time to sit down, download the reports, and feed them into a model or visualization tool. Hi all, Sorry if this is off topic. I am the editor of the Open Data Manual[0]. It's an ever improving manual on how to go about open data. At the moment, it's mostly focused on government data, but that is changing. A great enhancement would be some information on graphs. In particular, an outline of moving data housed in relational tables into a graph would be excellent. The manual has a large readership and it could be a great way to become a published author.* If you would like to assist, please email me off the list. Tim McNamara Professional \\ paperlessprojects.com Personal \\ @timClicks http://twitter.com/timClicks | timmcnamara.co.nz [0] http://opendatamanual.org * We're investigating options for creating printed material, but that hasn't happened yet. ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Self-referencing relationships
Where I've wanted self referencing nodes is when mapping a sequence of user actions: user clicks button A - [then clicks] - button B - [then clicks] - button B (again) - [then clicks] - button C - [then ... Run this over a few 10's of thousands of users (incrementing counts), and a few dozen buttons, and you can start to find things like: This sequence of button presses is the most common path for users through our prouduct. If a user is on button B, it is pretty likely they'll click it again. The group of users who are based in California tend to click buttons on the left side of the screen, while the ones in Massachusetts tend to click buttons on the right side of the screen. There may have been other ways to do this modeling, but the way I implemented it really needed self referencing relationships to count all the [then clicks] relationships, not just the ones that move to new buttons. Hi Shaunak, As you've noticed, self-referencing nodes have been considered before, and I remember being perplexed by the lack when I first became a Neo4j user. Changing the support is simple enough, but there was obviously a conscious design decision. Why? Anecdotally (and wiser, longer memoried minds should correct me), self-referencing nodes lead to more trouble than they're worth. So they're considered an error because there is more value in being alerted that you just related a node to itself, then there is value in the few cases where you absolutely must have them. Being a database, the decision has been to err on the side of avoiding problems, even at the cost of some convenience. An approach that could allow for intentional self-referencing, while still protecting against accidental self-references, would be implement an explicit Node.relateToSelfAs(RelationshipType type). What does you model look like, that you expect to require self-referencing? Best, Andreas On Apr 26, 2011, at 11:15 AM, Shaunak Kashyap wrote: I know this topic has been discussed before[1] and that a trac issue was also created[2]. I see that a patch was submitted as part of the issue but from browsing the source code[3] it appears that self-referencing relationships are still a no-go in Neo4J. Are there any plans to apply the patch submitted by tobias OR, in general, to provide for self-referencing relationships in Neo4J? We are evaluating Neo4J against OrientDB for an internal tool at Yahoo. While Neo4J looks like a far more mature product overall, the lack of self-referencing relationships might become a sticking point (yes, I understand they can be worked around with a middle node but that requires the application to handle special cases which we would like to avoid). References: [1] http://www.mail-archive.com/user@lists.neo4j.org/msg03996.html [2] https://trac.neo4j.org/ticket/239 [3] https://github.com/neo4j/community/blob/master/kernel/src/main/java/org/neo4j/kernel/impl/core/RelationshipImpl.java#L45 Thank you, shaunak kashyap technical yahoo shau...@yahoo-inc.com direct 408-349-4024mobile 408-203-2450 701 first avenue, sunnyvale, ca, 94089-0703, us phone (408) 349 3300fax (408) 349 3301 ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Self-referencing relationships
In my case I wasn't looking to retrace a specific user's path, but rather trying to identify popular paths. It was 'quick and easy' to do with a graph model (except for some confusion about counting self referencing relationships). I was, in fact, adding user nodes so I could see the types of things certain groups of users did (within my data sample), but that was simply leveraging the graph to answer two classes of questions at the same time, rather than directly relevant to the popular path problem. I think I also created event 1, event 2, nodes and linked them to the button nodes. These didn't really tell me if someone was likely to jump from button B to button E (since they could get to button B at any event number) but they did tell me whether certain buttons were more likely to be selected early in the user experience or later. There were lots of graph based explorations possible in that quick study. I barely cracked the surface in the time I had to work on it... I've wanted to do similar tracking of paths within a graph, but am not clear about your approach. Were you creating new relationships between each node directly to represent an event? I suppose you'd have to add the user id and a sequence number into each relationship to keep the tracking distinct and preserver order. Which would work, except for repeats to the same node. Instead of sequence numbers in the relationships, you could just use a sequence of events. I tend to try to keep distinct concepts within the graph separate. Like possible paths (a graph of possibilities) vs actual paths (which are trees because they are a sequence of events). With buttons, I would first create the graph of buttons with possible paths: A - B - C - {wherever} Then track each user traversal by referencing those nodes in sequence: User1 -- event1 event1 -clicked- A event1 -next- event2 event2 -clicked- B event2 -next- event 3 event3 -clicked- B event3 -next- event4 event4 -clicked- C etc... Subsequent users would either increment counts along that path or create new branches when they diverge. Cheers, Andreas On Apr 26, 2011, at 12:57 PM, Rick Otten wrote: Where I've wanted self referencing nodes is when mapping a sequence of user actions: user clicks button A - [then clicks] - button B - [then clicks] - button B (again) - [then clicks] - button C - [then ... Run this over a few 10's of thousands of users (incrementing counts), and a few dozen buttons, and you can start to find things like: This sequence of button presses is the most common path for users through our prouduct. If a user is on button B, it is pretty likely they'll click it again. The group of users who are based in California tend to click buttons on the left side of the screen, while the ones in Massachusetts tend to click buttons on the right side of the screen. There may have been other ways to do this modeling, but the way I implemented it really needed self referencing relationships to count all the [then clicks] relationships, not just the ones that move to new buttons. Hi Shaunak, As you've noticed, self-referencing nodes have been considered before, and I remember being perplexed by the lack when I first became a Neo4j user. Changing the support is simple enough, but there was obviously a conscious design decision. Why? Anecdotally (and wiser, longer memoried minds should correct me), self-referencing nodes lead to more trouble than they're worth. So they're considered an error because there is more value in being alerted that you just related a node to itself, then there is value in the few cases where you absolutely must have them. Being a database, the decision has been to err on the side of avoiding problems, even at the cost of some convenience. An approach that could allow for intentional self-referencing, while still protecting against accidental self-references, would be implement an explicit Node.relateToSelfAs(RelationshipType type). What does you model look like, that you expect to require self-referencing? Best, Andreas On Apr 26, 2011, at 11:15 AM, Shaunak Kashyap wrote: I know this topic has been discussed before[1] and that a trac issue was also created[2]. I see that a patch was submitted as part of the issue but from browsing the source code[3] it appears that self-referencing relationships are still a no-go in Neo4J. Are there any plans to apply the patch submitted by tobias OR, in general, to provide for self-referencing relationships in Neo4J? We are evaluating Neo4J against OrientDB for an internal tool at Yahoo. While Neo4J looks like a far more mature product overall, the lack of self-referencing relationships might become a sticking point (yes, I understand they can be worked around with a middle node but that requires the application to handle special cases which we would like to avoid). References: [1] http://www.mail-archive.com/user
Re: [Neo4j] REST results pagination
Client side sorting makes sense if you know the domain well enough to know, for example, you will receive a small enough result set to 'fit' in the client, and want to give the user multiple interactive sort options without hitting the database again. But I agree that in general it makes sense to get the database to do the sort. I'll concede this point. In general it should be better to do the sorts on the database server, which is typically by design a hefty backend system that is optimized for that sort of processing. In my experience with regular SQL databases, unfortunately they typically only scale vertically, and are usually running on expensive enterprise-grade hardware. Most of the ones I've worked either run on minimally sized hardware or have quickly outgrown their hardware. So they are always either: 1) Currently suffering from a capacity problem. 2) Just recovering from a capacity problem. 3) Heading rapidly towards a new capacity problem. The next problem I run into is a political, rather than technical one. The database administration team is often a different group of people from the appserver/front end development team. The guys writing the queries are usually closer to the appserver than the database. In other words, it is easier for them to manage a problem in the appserver, than it is to manage a problem in the database. So, instead of having a deep well of data processing power to draw on, and then using a wide layer of thin commodity hardware presentation layer servers, we end up transferring data processing power out of the data server and into the presentation layer. As we evolve into building data processing systems which can scale horizontally on commodity hardware, the perpetual capacity problems the legacy vertical databases suffer from may wane, finally freeing the other layers from having to pick up some of the slack. -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] REST results pagination
Half-baked thoughts from a neo4j newbie hacker type on this topic: 1) I think it is very important, even with modern infrastructures, for the client to be able to optionally throttle the result set it generates with a query as it sees fit, and not just because of client memory and bandwidth limitations. With regular old SQL databases if you send a careless large query, you can chew up significant system resources, for significant amounts of time while it is being processed. At a minimum, a rowcount/pagination option allows you to build something into your client which can minimize accidental denial of service queries. I'm not sure if it is possible to construct a query against a large Neo4j database that would temporarily cripple it, but it wouldn't surprise me if you could. 2) Sometimes with regular old SQL databases I'll run a sanity check count() function with the query to just return the size of the expected result set before I try to pull it back into my data structure. Many times count() is all I needed anyhow. Does Neo4j have a result set size function? Perhaps a client that really could only handle small result sets could run a count(), and then filter the search somehow, if necessary, until the count() was smaller? (I guess it would depend on the problem domain...) In other words it may be possible, when it is really important, to implement pagination logic on the client side, if you don't mind running multiple queries for each set of data you get back. 3) If the result set was broken into pages, you could organize the pages in the server with a set of [temporary] graph nodes with relationships to the results in the database -- one node for each page, and a parent node for the result set. If order of the pages is important, you could add directed relationships between the page nodes. If the order within the pages is important you could either apply a sequence numbering to the page-result relationship, or add directed temporary result set directed relationships too. Subsequent page retrievals would be new traversals based on the search result set graph. In a sense you would be building a temporary graph-index I suppose. And advantage to organizing search result sets this way is that you could then union and intersect result sets (and do other set operations) without a huge memory overhead. (Which means you could probably store millions of search results at one time, and you could persist them through restarts.) 4) In some HA architectures you may have multiple database copies behind a load balancer. Would the search result pages be stored equally on all of them? Would the client require a sticky flag, to always go back to the same specific server instance for more pages? Depending on how fast writes get propagated across the cluster (compared to requests for the next page), if you were creating nodes as described in (3) would that work? 5) As for sorting: In my experience, if I need a result set sorted from a regular SQL database, I will usually sort it myself. Most databases I've ever worked with routinely have performance problems. You can minimize finger pointing and the risk of complicating those other performance problems by just directing the database to get me what I need, I'll do the rest of it back in the client. On the other hand, sometimes it is quicker and easier to let the database do the work. (Usually when I can only handle the data in small chunks on the client.) What I'm trying to say, is that I think sorting is going to be more important to clients who want paginated results (ie, using resource limited clients), than to clients who are grabbing large chunks of data at a time (and will want to own any post-query processing steps anyhow). -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Graph visualization in the web admin tool
Another javascript based tool, which is very new, is D3 (Data Driven Documents). D3 is built by the same guys who came up with Protovis a couple of years ago. [ http://vis.stanford.edu/protovis/ ] Protovis was much more limited in terms of flexible data inputs and scalability to large data sets. The only caveat, is that D3, like Protovis, generates SVG's. This means that you may have to jump through some tricky hoops to get it to work in legacy Internet Explorer browsers. (IE9 is ok.) Here is their forced layout: http://mbostock.github.com/d3/ex/force.html Since it is hot off the presses, the D3 documentation and example sets are still evolving daily. I think it is worth watching. I've been experimenting with D3 for a few weeks now and am really liking it. Thanks for the update. For my part, I think I'll give a try to Javascript Infovis Toolkit (http://thejit.org). I think you should take a look at it. The API seems very complete and the project is well documented (and activ). The objects are very customizable, edge should be oriented or not, you can add events on nodes or edges, change styles... and I like the RGrpah visualization ^^ (but ForceDirected is maybe more what you need). Kind regards 2011/3/30 Jacob Hansson jacob.hans...@neotechnology.com We opted to change from graphdracula to arbor.js though (today, actually), because the dracula lib was buggy. My initial reaction to arbor.js is very positive, although it wasn't quite as straight-forward as dracula to use. I'd recommend downloading arbor.js and tweaking their example apps to get a feel for how the lib works. It's been fairly unpainful to work this into the webadmin app, together with neo4js you can rather quickly get up to speed visualizing data from a neo4j server on the web :) /Jacob On Mon, Mar 28, 2011 at 3:50 PM, Clement Honore honor...@gmail.comwrote: Thanks for your answer Peter. I will take a look at dracula. I've already check this link http://wiki.neo4j.org/content/Visualization_options_for_graphs# (this is the on this page on my first post but I forget the link... ^^) and there is so many solutions that I don't know which to choose... 2011/3/28 Peter Neubauer peter.neuba...@neotechnology.com Clement, the current iteration is building on http://www.graphdracula.net/ which is built on top of RaphaelJS I think. There are many others, look at http://wiki.neo4j.org/content/Visualization_options_for_graphs# and pick your choice. Let us know your experiences and feel free to contribute to the webadmin! Cheers, /peter neubauer GTalk: neubauer.peter Skype peter.neubauer Phone +46 704 106975 LinkedIn http://www.linkedin.com/in/neubauer Twitter http://twitter.com/peterneubauer http://www.neo4j.org - Your high performance graph database. http://startupbootcamp.org/- Öresund - Innovation happens HERE. http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party. On Mon, Mar 28, 2011 at 1:54 PM, Clement Honore honor...@gmail.com wrote: Hi! Since the 1.0 M5 release, it's possible to get a visual representation of the graph within the web administration tool. I've almost the same kind of representation to do in a web application and I wonder which library did you use. Is it something referenced on this page or something completely written by yourselves ? Thanks for the tips! Clément. ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Jacob Hansson Phone: +46 (0) 763503395 Twitter: @jakewins ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Graph visualization in the web admin tool
good point. I've been using it to populate HTML tables. (Mostly in conjunction with user actions on a related chart.) I'm hoping to post an example to the d3-js list of what I've been doing later this week. +1 for D3, but also, it doesn't *have* to generate SVG. That's the way it has been implemented thus far, but it could pretty easily be tweaked to conditionally generate VML for older IE browsers. -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Rick Otten Sent: Monday, April 04, 2011 10:31 AM To: Neo4j user discussions Subject: Re: [Neo4j] Graph visualization in the web admin tool Another javascript based tool, which is very new, is D3 (Data Driven Documents). D3 is built by the same guys who came up with Protovis a couple of years ago. [ http://vis.stanford.edu/protovis/ ] Protovis was much more limited in terms of flexible data inputs and scalability to large data sets. The only caveat, is that D3, like Protovis, generates SVG's. This means that you may have to jump through some tricky hoops to get it to work in legacy Internet Explorer browsers. (IE9 is ok.) Here is their forced layout: http://mbostock.github.com/d3/ex/force.html Since it is hot off the presses, the D3 documentation and example sets are still evolving daily. I think it is worth watching. I've been experimenting with D3 for a few weeks now and am really liking it. Thanks for the update. For my part, I think I'll give a try to Javascript Infovis Toolkit (http://thejit.org). I think you should take a look at it. The API seems very complete and the project is well documented (and activ). The objects are very customizable, edge should be oriented or not, you can add events on nodes or edges, change styles... and I like the RGrpah visualization ^^ (but ForceDirected is maybe more what you need). Kind regards 2011/3/30 Jacob Hansson jacob.hans...@neotechnology.com We opted to change from graphdracula to arbor.js though (today, actually), because the dracula lib was buggy. My initial reaction to arbor.js is very positive, although it wasn't quite as straight-forward as dracula to use. I'd recommend downloading arbor.js and tweaking their example apps to get a feel for how the lib works. It's been fairly unpainful to work this into the webadmin app, together with neo4js you can rather quickly get up to speed visualizing data from a neo4j server on the web :) /Jacob On Mon, Mar 28, 2011 at 3:50 PM, Clement Honore honor...@gmail.comwrote: Thanks for your answer Peter. I will take a look at dracula. I've already check this link http://wiki.neo4j.org/content/Visualization_options_for_graphs# (this is the on this page on my first post but I forget the link... ^^) and there is so many solutions that I don't know which to choose... 2011/3/28 Peter Neubauer peter.neuba...@neotechnology.com Clement, the current iteration is building on http://www.graphdracula.net/ which is built on top of RaphaelJS I think. There are many others, look at http://wiki.neo4j.org/content/Visualization_options_for_graphs# and pick your choice. Let us know your experiences and feel free to contribute to the webadmin! Cheers, /peter neubauer GTalk: neubauer.peter Skype peter.neubauer Phone +46 704 106975 LinkedIn http://www.linkedin.com/in/neubauer Twitter http://twitter.com/peterneubauer http://www.neo4j.org - Your high performance graph database. http://startupbootcamp.org/- Öresund - Innovation happens HERE. http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party. On Mon, Mar 28, 2011 at 1:54 PM, Clement Honore honor...@gmail.com wrote: Hi! Since the 1.0 M5 release, it's possible to get a visual representation of the graph within the web administration tool. I've almost the same kind of representation to do in a web application and I wonder which library did you use. Is it something referenced on this page or something completely written by yourselves ? Thanks for the tips! Clément. ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Jacob Hansson Phone: +46 (0) 763503395 Twitter: @jakewins ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https
Re: [Neo4j] authentication on neo4j standalone server
If I were architecting an authentication and authorization mechanism for Neo4j REST I would probably look at building an OpenSAML based Service Provider plugin for the Neo4j webserver. ( In the Identity Management world the Service Provider (SP) takes a look at your identity, and then grants access to specific resources based on it. ) Shibboleth is an example of an open source, OpenSAML SP that already has plugins for Apache HTTPD and iPlanet. http://shibboleth.internet2.edu/ I would not worry about implementing an IDP (Identity Provider) as part of Neo4j at all, and instead make sure my SP had the capability to talk to standard IDP's. The Kantara Initiative [ http://www.kantarainitiative.org ] seems to be the main organization developing the standards for configuring SP rule management systems and communications to IDP's. I would advocate against building custom authentication and authorization infrastructure in Neo4j at this time. As we move forward with horizontal and cloud infrastructures we will all become increasing familiar with configuring SP's and then wiring them to existing IDP's. Anything that has a custom solution will really stick out and be operationally challenged. I think we'll see this model for Identity Management get plugged into practically everything within a few years. My applications for Neo4j do not have requirements for resource control yet, so I haven't explored it beyond merely thinking about it a little. right now either use a proxy in front or pull the server project and a simple, two line auth filter in front. perhaps we should add request-filters as an extension mechanism much like the unmanaged extensions to the server. M Sent from my iBrick4 Am 16.03.2011 um 05:28 schrieb Scott Farrar sofar...@gmail.com: HI, I'm having a little trouble finding information on how authentication is handled using neo4j. From what I understand, a standalone implementation doesn't have this feature. With an embedded solution, I understand that you can use, for instance, authentication in Rails. Here's what I'd like to do: -set up a stand alone server for my graph db -use the REST api -connect to the server using various methods (Android, Rails, etc) My question concerns the best approach for this, assuming that I don't want to just anyone writing to the graph. thanks --Scott ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] authentication on neo4j standalone server
Good question. I think what I was primarily advocating was implementing an authorization plugin without implementing an authentication mechanism. Although I've never worked with it, my read on it is that an OAuth authorization mechanism would allow you to use OpenID authentication. It looks like the OAuth folks are participating in the Kantara Initiative (or at least they are familiar with each other) so at least to some extent the technologies appear to be converging. Most of the SQL databases I'm familiar with each implement their own authentication and authorization technology. No two are alike, and it is hard to jump from one brand of SQL database to another in a heterogeneous environment with the same credentials. I think that era is quickly coming to a close. I've seen several discussions on this list about hybrid database solutions of which Neo4j is just one piece. What direction are the other databases commonly paired with Neo4j moving? Hi Rick, You'd not advocate OAuth? Jim ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Forums ?
An advantage of forums is that messages can be more easily organized by general topic. eg. building and configuration, REST, Spatial, graph algorithms, visualizations, etc... You could create a separate mailing list for each general topic, but the organization would not be as obvious nor as easy to navigate. As much as some folks are interested in every aspect of neo4j, some of us have strong interests in specific topics, and only a vague interest in the others. With a forum the more interesting topics could be more easily 'surfed first' when time crunched. -- A disadvantage of forums is that it is easier for my employer (via 'Websense') to block it. Thus far they don't filter email, but the certainly block more than half the web. They especially like to block any websites that support collaboration and interaction with people outside the company. -- WRT formatting text. I've been subscribed to mailing lists since the late '80's. Only in the past year have I relented and started using HTML email for many of my communications. Surprisingly, for technical email, it is really nice to be able to easily visually differentiate text and commentary and code and code-changes. -- FWIW, he nicest forum software I've seen is whatever it is the 'hangout' series of musical instrument forums uses (I think they wrote it themselves): http://www.banjohangout.org http://www.fiddlehangout.org etc... (there are a bunch of them now) -- I agree that putting all ones eggs in the Google basket makes me nervous for any emerging business or technology. They are, first and foremost, a very large, for profit, company. They can and should be expected to always operate in their own best interest which may not align with anyone else's. I wouldn't expect to see any sort of Public Utility style regulation any time in the forseeable future - at least in the current US political climate. -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Social Networks And Graph Databases
Ok, I'm following this discussion, and now I'm confused. My understanding was that the (potentially very large) database is replicated across all instances. If someone needed to traverse to something that wasn't cached, they'd take a performance hit, but still be able to get to it. I had understood the idea behind the load balancing is to minimize traversals out of cache by grouping similar sets of users on a particular server. (That way you don't need a ton of RAM to stash everything in the database, just the most frequently accessed nodes and relationships associated with a subset of the users.) Hello JT, One thing, when you say route requests to specific instances .. does that imply that node relationships can't span instances ? Yes that's right. What I'm suggesting here is that each instance is a full replica that works on a subset of requests which are likely to keep the caches warm. So if you can split your requests (e.g all customers beginning with A go to instance 1 ... all customers beginning with Z go to instance 26), they will benefit from having warm caches for reading, while the HA infrastructure deals with updates across instances transactionally. Jim ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] 1.2 server
FWIW, something I use frequently... An easy way to capture everything you are sending is to use netcat. In one window: $ netcat -p 7474 -l Tells netcat to listen on port 7474. In another window, run your tool which is sending the data. In your first window you'll see everything you sent. You can use netcat in other, fancier ways too, but for a quick inspection of what you are sending to a server somewhere, IMHO, it beats tcpdump any day. [ You can do something similar using openssl to see the decrypted traffic for an https connection, but that is trickier to set up. If that is a requirement and seems to hard to figure out on your own ping me offline and I'll send you some tips for getting it to work. ] I hope this helps! I had a hard time trying to catch the network traffic :) This is the TCP content of the package sent to the server: GET / HTTP/1.1 Content-type: application/json Accept: application/json User-Agent: Java/1.6.0_22 Host: 192.168.57.110:7474 Connection: keep-alive And in hex format: 08 00 27 15 e0 4e 00 1f d0 55 8f 99 08 00 45 00 ..'..N...UE. 0010 00 c2 38 70 40 00 80 06 cd 66 c0 a8 39 a0 c0 a8 @f..9... 0020 39 6e d7 bb 1d 32 cf 3c c5 0f 2a 2e 49 91 50 18 9n...2...*.I.P. 0030 40 29 07 ad 00 00 47 45 54 20 2f 20 48 54 54 50 @)GET / HTTP 0040 2f 31 2e 31 0d 0a 43 6f 6e 74 65 6e 74 2d 74 79 /1.1..Content-ty 0050 70 65 3a 20 61 70 70 6c 69 63 61 74 69 6f 6e 2f pe: application/ 0060 6a 73 6f 6e 0d 0a 41 63 63 65 70 74 3a 20 61 70 json..Accept: ap 0070 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 0d 0a plication/json.. 0080 55 73 65 72 2d 41 67 65 6e 74 3a 20 4a 61 76 61 User-Agent: Java 0090 2f 31 2e 36 2e 30 5f 32 32 0d 0a 48 6f 73 74 3a /1.6.0_22..Host: 00a0 20 31 39 32 2e 31 36 38 2e 35 37 2e 31 31 30 3a 192.168.57.110: 00b0 37 34 37 34 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 7474..Connection 00c0 3a 20 6b 65 65 70 2d 61 6c 69 76 65 0d 0a 0d 0a : keep-alive Does this help? Thanks, Miklós Kiss 2011.01.06. 14:54 keltezéssel, Jim Webber írta: Hi again Miklós, Oops, I misread your email. You say that you are setting the Accept header to the correct media type. Can you create a TCP dump for me to take a look at? Many thanks, Jim ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Neo4j Spatial question
to say thanks again. Axel ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] neo4j 1.2 python
Thanks Tobias. Copying the jars into 'dependencies' didn't help. I still get the same exception when I try to run --help (or any other setup.py command). I'm pretty happy with the REST interface. It is much simpler for me to manipulate the graph (using python) that way. Neo4j 1.2 and the REST interface seem to be much faster than neo4j-python (1.1) was. Also they work on an NFS disk. (The older neo4j-python configuration I was using would not work over NFS -- too slow. And since I didn't have local disk at my disposal I was using /tmp, with periodic tar/bzip backups to my NFS disk. It was a less than optimal, and never destined to be a production solution. The new architecture has significantly more promise.) I think I'll stick with the REST interface for the near future. The Python drivers for Neo4j are in dire need of some attention. They will get that long overdue attention starting end of January. Until then, if all you want to do is use Neo4j 1.2 with the python drivers I believe if you create a directory called dependencies (next to the setup.py file) and put the neo4j jar-files there (the ones from the lib directory of the Neo4j download) it should work after applying the attached patch (it omits downloading dependencies). Cheers, Tobias On Tue, Jan 4, 2011 at 9:32 PM, Rick Otten rot...@windfish.net wrote: My older 1.1 neo4j python install got wiped out, unfortunately. So I thought I'd take advantage of the opportunity to set up the latest neo4j python for 1.2. I don't recall how I did it last time, but I had to jump through a lot of hoops this time around to find a system with an svn client attached to the Internet, or rather to a system where I had enough authority to be able to install an svn client... (And then once I got the distribution downloaded, there were more hoops and hops to get it back to where I could work with it.) Is there any way in the future this package could be bundled up made available via oldie-fashioned http? Anyway, now that I have it, I can't get it to install. I think it is blowing up when it tries to connect to the Internet to download the jars. I have the neo4j jars already downloaded. How do I tell it to use my local copy instead of some remote set? Should I edit lines 95-99 in the setup.py to put a file: url in the pom.xml? I tried putting them in my CLASSPATH, but that didn't seem to change anything. Do I have to put them under an internal webserver to be able to get at them? It would be nice if at least --help worked without the apparent download requirement. $ python ./setup.py --help Traceback (most recent call last): File ./setup.py, line 146, in module main() File ./setup.py, line 134, in main args[attr] = pom[attr] File /projects/n145/src/solaris/neo4j-python/pom.py, line 58, in __getitem__ element) File /projects/n145/src/solaris/neo4j-python/pom.py, line 57, in lambda return self.pattern.sub(lambda match:self[match.groupdict()['var']], File /projects/n145/src/solaris/neo4j-python/pom.py, line 54, in __getitem__ element = self.parent[path] File /projects/n145/src/solaris/neo4j-python/pom.py, line 91, in __getitem__ return replacement.get(path, lambda s,x:x)(self, self.__pom[path]) File /projects/n145/src/solaris/neo4j-python/pom.py, line 56, in __getitem__ raise KeyError(path) KeyError: 'project.artifactId' I'll probably give up on the more integrated neo4j-python approach for now and try REST client calls from (plain old) Python instead. Eventually I'd like to be able to leverage my old scripts though, so any tips you can give me for getting this latest version to install would be most appreciated. Thanks! -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Tobias Ivarsson tobias.ivars...@neotechnology.com Hacker, Neo Technology www.neotechnology.com Cellphone: +46 706 534857 ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
[Neo4j] neo4j 1.2 python
My older 1.1 neo4j python install got wiped out, unfortunately. So I thought I'd take advantage of the opportunity to set up the latest neo4j python for 1.2. I don't recall how I did it last time, but I had to jump through a lot of hoops this time around to find a system with an svn client attached to the Internet, or rather to a system where I had enough authority to be able to install an svn client... (And then once I got the distribution downloaded, there were more hoops and hops to get it back to where I could work with it.) Is there any way in the future this package could be bundled up made available via oldie-fashioned http? Anyway, now that I have it, I can't get it to install. I think it is blowing up when it tries to connect to the Internet to download the jars. I have the neo4j jars already downloaded. How do I tell it to use my local copy instead of some remote set? Should I edit lines 95-99 in the setup.py to put a file: url in the pom.xml? I tried putting them in my CLASSPATH, but that didn't seem to change anything. Do I have to put them under an internal webserver to be able to get at them? It would be nice if at least --help worked without the apparent download requirement. $ python ./setup.py --help Traceback (most recent call last): File ./setup.py, line 146, in module main() File ./setup.py, line 134, in main args[attr] = pom[attr] File /projects/n145/src/solaris/neo4j-python/pom.py, line 58, in __getitem__ element) File /projects/n145/src/solaris/neo4j-python/pom.py, line 57, in lambda return self.pattern.sub(lambda match:self[match.groupdict()['var']], File /projects/n145/src/solaris/neo4j-python/pom.py, line 54, in __getitem__ element = self.parent[path] File /projects/n145/src/solaris/neo4j-python/pom.py, line 91, in __getitem__ return replacement.get(path, lambda s,x:x)(self, self.__pom[path]) File /projects/n145/src/solaris/neo4j-python/pom.py, line 56, in __getitem__ raise KeyError(path) KeyError: 'project.artifactId' I'll probably give up on the more integrated neo4j-python approach for now and try REST client calls from (plain old) Python instead. Eventually I'd like to be able to leverage my old scripts though, so any tips you can give me for getting this latest version to install would be most appreciated. Thanks! -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Reference node pains.
I vote for it being optional. Hi Marko, On Fri, Dec 10, 2010 at 7:35 PM, Marko Rodriguez okramma...@gmail.com wrote: Hello. I have one question and a comment: QUESTION: Is the reference node always id 0 on a newly created graph? Yes. COMMENT: By chance, will you guys remove the concept of a reference node into the future. I've noticed this to be a pain in the side for people moving between various graph systems. Going from Neo4j to iGraph to TinkerPop to etc. The reference node, if the user is not conscious, begins to build as data is migrated into and from Neo4j graphs. And what ensues is a data bug. Perhaps a GraphDatabaseServer = new GraphDatabaseService(String directory, boolean createReferenceNode). ...? The reference node is very helpful in certain use-cases. The current implementation could however be improved. Would having the option to create a graph without the reference node solve the problems you are experiencing? -Johan Thanks, Marko. http://markorodriguez.com http://tinkerpop.com ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Status of visualization options
I've had pretty good luck loading my neo4j graphs into Gephi using the new neo4j plugin. Gephi is a rapidly evolving tool (like neo4j). It keeps getting better and more stable all the time. Hello all, I have successfully imported a large part of my data set into neo4j and have done some basic traversals. I want to start visualizing a portion of the graph or of a traversal and was overwhelmed by the amount of options listed at http://wiki.neo4j.org/content/Visualization_options_for_graphs It is unclear to me which products have actually been successfully integrated with neo4j or which was still have ongoing development. My preference is for simplicity over flexibility and to work at the code level via a library for the generation portion. The actual viewer can be a separate standalone application. The visualizations themselves will be very simple. I am not an Eclipse user so I have not looked into Neoclipse. I have worked with Graphviz files before, so to generate a basic .dot file seems ideal. There was some discussion about JUNG lately, so perhaps that is a better alternative. Unfortunately I do not have the time to explore all of the options. Cheers, Ivan ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Good Linux/Windows/OS X install procedure?
Since I don't have Administrator privileges on my PC at work, if I wanted to try the Windows version of this package I would have to have a way to install and configure it without those privileges. On Ubunto I would love to see an apt-get install procedure. I am almost ready to decide on our DB and this would makie it easy to get up and running and trial the technology rather than learn how it fits together. Cheers Rich On Thu, Oct 28, 2010 at 11:27 PM, Peter Neubauer peter.neuba...@neotechnology.com wrote: Hi folks, while thinking about getting a first Neo4j server package out, is there anyone who has good experience with installers? Basically, the question is if we should just zip together the distribution, so you can run the startup scripts etc yourself, or do an installer that will let you choose where to put the files, maybe install a few daemon scripts etc. Any hints and opinions on what tools to use and how this should look like? Have you seen any other project that you think has a great installing experience? Cheers, /peter neubauer GTalk: neubauer.peter Skype peter.neubauer Phone +46 704 106975 LinkedIn http://www.linkedin.com/in/neubauer Twitter http://twitter.com/peterneubauer http://www.neo4j.org - Your high performance graph database. http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party. ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Good Linux/Windows/OS X install procedure?
://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Graph visualization
The first thing that comes to mind as a possibly useful 3D graph visualization is to lay the graph on a (non-planar) surface, rather than just in free space. Ie, over some sort of topography. The topography could represent a geographical landscape of mountains, hills, canyons, and valleys... perhaps most relevant when the graph represents some sort of geographical data set where terrain is significant. Or it could represent some other sort of underlying multivariate data. (Temperature?) The force algorithm might be adapted to include a Z dimension gravity, pulling nodes downhill into valleys. This sort of 3D graph might remain intuitive, and add value to the data. I agree though, simply scattering nodes hither and thither in free space seems like it would be disorienting to those of us who evolved on a surface. Kei, you mean the answer (...point, ...insight) is mostly 'no'? I hope that it depends on the type of data you want to show. Although it is an issue to create layouts in a 3D space that adds some visual value (we are only used to use 2D presentations). Maybe the possibility to rotate, fly through and live highlight (by changing colors etc.) of nodes and assocs can bring this value. Christopher On Tuesday, October 12, 2010, Keiichiro Ono kei...@gmail.com wrote: Hi. Except small and sparse graph, 3D force-directed/spring model automatic layouts creates big hairball and it is very hard to browse. I've tried igraph and it creates nice 3D visualizations, but in many cases, our users (mostly scientists) say, it's cool...but what's the point? Does it give us new insights by extra dimension? Are there any people working on this fundamental problem? Thanks, Kei 2010/10/12 Alex Averbuch alex.averb...@gmail.com: Hey, igraph already supports 3D layouts and makes the vertex coordinates programmatically accessible. Maybe Jung or something similar (and Java based) would offer the same functionality? igraph is written in Python so not the idea solution, but for a proof of concept you could hardcode the coodinates that igraph gives you. Then once the actual visualizations are working, work on your own (or integrate with another library) layout algorithms. On Tue, Oct 12, 2010 at 11:34 AM, Christopher Schmidt fakod...@googlemail.com wrote: I think that the most tricky thing will be the algorithm, that places the nodes and associations in a 3D space. Christopher Am 2010 10 12 11:08 schrieb Andreas Kollegger andreas.kolleg...@neotechnology.com: That would be super cool. 3D could be beautiful, and possibly allow more interesting visualizations of a graph. In addition to an overview of the scene, it would be fun to play with 1st person and 3rd person views of the current node. What would be an easy proof-of-concept? /Andreas On Oct 12, 2010, at 1:19 AM, Andrew Andkjar wrote: I have not seen one in my Internet travels, h... ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Keiichiro Ono http://www.keiono.net/ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Christopher twitter: @fakod blog: http://blog.fakod.eu ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Versioning :)
Or, you could build a graph database. :-) Each of the nodes would be a specific component version. Dependencies could be mapped with relationships. If you want to use some particular component version, traverse the graph to find everything else you need to go with it. You can test to see if components are disconnected too. You could use a force algorithm to visualize components that are closely related and dependent on each other, and components that are leaf nodes. You could also identify central, core components in a graph model. Rather than naming the entire graph with a particular version number, you could include all dependencies and components going back to Neo4j 0.0.0. Well, you could let the component versions diverge if you put some soft rules behind it like: Format A.B.C (major, minor, micro). You could then baseline them on minor version level. Micro releases are independent. - to make it convenient for the module maintainer. He can release that on his own. Everything above are streamlined releases that also have (lets say) a packaged assembly with all of them together. - to make it simple for the enduser. Just an idea. About (2): definitely let maven versions be in-sync. (why make a difference? Aren't they just maven built assemblies too?) Toni On Wed, Oct 6, 2010 at 3:45 PM, Mattias Persson matt...@neotechnology.com wrote: (2) I'd definately go with synced version for maven/non-maven stuff. (1) is a bit harder since component doesn't mature in the same rate as others, but maybe that doesn't matter... having synced versions for the components is rather good. 2010/10/6 Andreas Kollegger andreas.kolleg...@neotechnology.com Hello fellow graphytes, Today I offer for your consideration one of the classic unsolved problems of computer science: proper versioning. Neo4j is a available as individual library components and also pre-packaged collections of components. The obvious challenge is to maintain a coherent set of tested, known-good and compatible components. As we move towards regular milestone releases, what's the best way to control and inform about the various versions that are included? Use cases include: 1. I'm a maven developer, and want coherent dependencies 2. I develop offline, and want to know what combination of libs to download 3. I deploy neo4j as a server, and want to upgrade a component without breaking things Assuming that zip files (or similar) will always use the corresponding release version, the versioning of the included components could vary. For a milestone release with an overall group version of 1.2-M1, permutations of an individual component (the fictional neo4j-foo) version could be: Opt. | mvn version | download version --- 1 | foo-0.7 | foo-0.7 2 | foo-0.7 | foo-1.2-M1 3 | foo-1.2-M1 | foo-1.2-M1 4 | foo-0.7-1.2-M1 | foo-0.7-1.2-M1 5 | foo-0.7 | foo-0.7-1.2-M1 Questions include: 1. Should individual components keep their own versions, or defer to the grouped release version? 2. Should the maven version keep in sync with the non-maven version? Opinions? Cheers, Andreas ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Mattias Persson, [matt...@neotechnology.com] Hacker, Neo Technology www.neotechnology.com ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Toni Menzel || http://okidokiteam.com ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] How to check if a relation already exists in neo4j
Kassis francois_kas...@hotmail.comwrote: Hi all, I am using the python version of neo4j. if i have n1, n2 as two nodes and KNOWS a relation between n1 and n2 in a graph. n2.KNOWS(n1): How to check if there is a relation KNOWS between n1 and n2?n2.MAILED(n1, on=123456789) and n2.MAILED(n1, on=987654321): How to check that MAILED already inserted between n1 and n2 with a proprety on=987654321? THX in advance. ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- And when the night is cloudy, There is still a light that shines on me, Shine on until tomorrow, let it be. -- Message: 4 Date: Wed, 29 Sep 2010 12:35:11 +0300 From: Francois Kassis francois_kas...@hotmail.com Subject: Re: [Neo4j] How to check if a relation already exists in neo4j To: user@lists.neo4j.org Message-ID: snt117-ds69a90bd037fc62559b1bc8d...@phx.gbl Content-Type: text/plain; format=flowed; charset=iso-8859-1; reply-type=original Hi again, Just to clear my request. Please I would like to know how to check if a relationship already exists using the python version of neo4j. EX: n2.CALLED(n1, on=123456789) n2.CALLED(n1, on=987654321) How to check that n2 already CALLED n1 on=123456789. THX in advence. Message: 3 Date: Tue, 28 Sep 2010 11:53:00 +0300 From: Francois Kassis francois_kas...@hotmail.com Subject: [Neo4j] How to check if a relation already exists in neo4j graph To: user@lists.neo4j.org user@lists.neo4j.org Message-ID: snt117-w4930c216010495edd5bf4f8d...@phx.gbl Content-Type: text/plain; charset=iso-8859-1 Hi all, I am using the python version of neo4j. if i have n1, n2 as two nodes and KNOWS a relation between n1 and n2 in a graph. n2.KNOWS(n1): How to check if there is a relation KNOWS between n1 and n2?n2.MAILED(n1, on=123456789) and n2.MAILED(n1, on=987654321): How to check that MAILED already inserted between n1 and n2 with a proprety on=987654321? THX in advance. -- -- ___ User mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user End of User Digest, Vol 42, Issue 56 ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Mattias Persson, [matt...@neotechnology.com] Hacker, Neo Technology www.neotechnology.com ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] neo4j.py relationship exists
Thanks Peter, I'm still too much of a Neo4j Newbie to suggest an implementation, sorry. As a database user, I imagine a boolean method like this: edgeExists(startNode, EndNode, relationshipType , property=value, property=value) Mmh Rick, have no immediate input here beside that the problem och deciding if a relationship exists between two nodes is a reoccurring one. Would love to hear suggestions on how to fix that. Maybe have indexes on interesting relationships in certain useful cases? It is not exposed to python yet but the new indexing framework might help there, https://svn.neo4j.org/laboratory/components/lucene-index/trunk/ if you care to check it out? Cheers, /peter neubauer COO and Sales, Neo Technology GTalk: neubauer.peter Skype peter.neubauer Phone +46 704 106975 LinkedIn http://www.linkedin.com/in/neubauer Twitter http://twitter.com/peterneubauer http://www.neo4j.org - Your high performance graph database. http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party. -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] neo4j.py relationship exists
Changing this bit of code from my earlier example at least increments the 'count' property on the relationships. I keep a list of all the ones I've created and check them each time I'm requested to create a new one. It is probably not the most memory or processor efficient way to do it. I'd love to hear other ideas for doing this in the neo4j python. ### RelationshipList = [] ## Either create a relationship or increment the count on an existing one: def create_activity_relationship(previousNode, currentNode): NodeList = [] for Node in isFollowedBy(previousNode): NodeList.append(Node) # If we don't already have a relationship, create one: if currentNode not in NodeList: RelationshipList.append(previousNode.FollowedBy(currentNode, count=1)) # Otherwise, increment the count on the relationship: else: for relationship in RelationshipList: if (relationship.start == previousNode) and (relationship.end == currentNode): relationship['count'] = relationship['count'].intValue() + 1 ### Hello, I've been exploring the capabilities and possibilities of neo4j.py recently. It is pretty cool! Thanks! One thing I'm trying to avoid when building my new graph is duplicate relationships. Instead of creating the same relationship twice, I'd like to increment a 'count' property on the existing one. While it was pretty straightforward to to this for nodes by using an Index, I'm struggling to figure out how to do it efficiently for a relationship. I can tell if a relationship between the nodes exists by using a depth(1) traversal. Unfortunately this approach seems to be really slow when I'm adding even just a few thousand nodes and relationships. Because the traversal I'm using returns the nodes, I haven't been able to figure out how to get the existing relationship in a way that lets me increment the count property. Here is what I tried to do: ### neo4j_db = neo4j.GraphDatabase( options.neo4jDB, classpath=[myClassPath], jvm=myJVM, heap_size=128) myNodeIndex = neo4j_db.index(mynodes, create=True) ## Either create a new node, or increment the count on the existing node: def create_my_node(nodeName): my_node = myNodeIndex[nodeName] if not my_node: my_node = neo4j_db.node(name=nodeName, count=0) myNodeIndex[nodeName] = my_node my_node['count'] = my_node['count'].intValue() + 1 return my_node ## Traversal class used to check if a relationship already exists: class isFollowedBy(neo4j.Traversal): types = [ neo4j.Outgoing.FollowedBy ] order = neo4j.DEPTH_FIRST stop = neo4j.StopAtDepth(1) def isReturnable(self, position): return (not position.is_start and position.last_relationship.type == 'FollowedBy') ## Either create a new relationship, or increment the count on the existing one: # ** (This is really slow, and the increment doesn't work.)** def create_my_relationship(previousNode, currentNode): NodeList = [] for Node in isFollowedBy(previousNode): NodeList.append(Node) # If we don't already have a relationship, create one: if currentNode not in NodeList: previousNode.FollowedBy(currentNode, count=1) # Otherwise, increment the count on the relationship: else: for relationship in previousNode.relationships('OUTGOING'): if relationship.getOtherNode(previousNode) == currentNode: relationship['count'] = relationship['count'].intValue() + 1 -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
[Neo4j] neo4j.py relationship exists
Hello, I've been exploring the capabilities and possibilities of neo4j.py recently. It is pretty cool! Thanks! One thing I'm trying to avoid when building my new graph is duplicate relationships. Instead of creating the same relationship twice, I'd like to increment a 'count' property on the existing one. While it was pretty straightforward to to this for nodes by using an Index, I'm struggling to figure out how to do it efficiently for a relationship. I can tell if a relationship between the nodes exists by using a depth(1) traversal. Unfortunately this approach seems to be really slow when I'm adding even just a few thousand nodes and relationships. Because the traversal I'm using returns the nodes, I haven't been able to figure out how to get the existing relationship in a way that lets me increment the count property. Here is what I tried to do: ### neo4j_db = neo4j.GraphDatabase( options.neo4jDB, classpath=[myClassPath], jvm=myJVM, heap_size=128) myNodeIndex = neo4j_db.index(mynodes, create=True) ## Either create a new node, or increment the count on the existing node: def create_my_node(nodeName): my_node = myNodeIndex[nodeName] if not my_node: my_node = neo4j_db.node(name=nodeName, count=0) myNodeIndex[nodeName] = my_node my_node['count'] = my_node['count'].intValue() + 1 return my_node ## Traversal class used to check if a relationship already exists: class isFollowedBy(neo4j.Traversal): types = [ neo4j.Outgoing.FollowedBy ] order = neo4j.DEPTH_FIRST stop = neo4j.StopAtDepth(1) def isReturnable(self, position): return (not position.is_start and position.last_relationship.type == 'FollowedBy') ## Either create a new relationship, or increment the count on the existing one: # ** (This is really slow, and the increment doesn't work.)** def create_my_relationship(previousNode, currentNode): NodeList = [] for Node in isFollowedBy(previousNode): NodeList.append(Node) # If we don't already have a relationship, create one: if currentNode not in NodeList: previousNode.FollowedBy(currentNode, count=1) # Otherwise, increment the count on the relationship: else: for relationship in previousNode.relationships('OUTGOING'): if relationship.getOtherNode(previousNode) == currentNode: relationship['count'] = relationship['count'].intValue() + 1 -- Rick Otten rot...@windfish.net O=='=+ ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user