Skip to content
Neo Technology: hey everyone, feel free to chat here amongst your peers
Neo Technology: Michael was just testing the sound
Mylène: We noticed :P
fabio: hi guys
Andreas Kollegger: key clicks are coming through perfectly :)
Michael Nero: Hello everyone!
Michael Nero: Ha. It's just turned noon here. I'm in Austin, TX.
Mylène: In the Netherlands it's now 7 PM...
Chris Bolton: Hi everyone.
Alex Guerrieri: afternoon (1PM here in Boca Raton, FL)
Chris Bolton: I'm in Southern California and it's about 10:00 am
Oleg Okun: It is 7 PM in Sweden, good evening.
Charlie: Seattle, WA, 10AM :D
Michael Nero: <-- Jealous of Chris Bolton's weather
aileen: G'day from Seattle - me too , actually Bainbridge Is
IvanTraveso: 7 PM in Spain
Chris Bolton: What's even better is I work in Newport Beach so when I'm having a rough problem I go sit out on the sand and mull it over.
fabio: @micheal: is '<-- Jealous of ' a query?
Chris Bolton: fabio - nice.
Abhishek: Hello everyone. I'm connected from India, it's 10:30 PM here
Michael Nero: Ha!
Luis Malave: Good morning from Costa Rica
Andreas Kollegger: hello from Baltimore, MD in the USA
Charlie: Now I'm really jealous if I tried that, I'd just get rained on.
aileen: [:jealous_of] relationship
Test: Good evening from Brussels, Belgium
aileen: pura vida!
Wes: Fairfax, VA here
Chris Skardon: evening from Cornewa
Hassan: Washington DC here
Chris Skardon: evening from Cornwall, UK
Matt Taylor: hello from Chicago
ASHISH M: wow! looks like we have an internnational crowd on today!! Anyone from Australia?
MilanSK: eveninig from Humenne, Slovakia
Harald: Frankfurt, Germany
Martin: Hi from Spain (and Gibraltar)
Gary Rockell: evening from High Wycombe UK
Michael Nero: I'm curious: what programming stack do you guys use? I'm a .NET developer myself.
Ron Clabo: Hello from Chapel Hill, NC. USA
Lisa Buckley: Hi from Sunnyvale CA
Deb Cooper: Hello from Boston
IvanTraveso: Java J2EE right here
Chris Bolton: Ruby on Rails here.
MilanSK: PHP, Michael
Chris Skardon: .net
Aki Ristkari: rails/ruby
Robert: hello from Romania
Abhishek: We recently used Node JS with PHP
fabio: [:jealous_of] http://www.youtube.com/watch?v=DzhyKn1ThpU
Mylène: Java, Java EE, Clojure, Scala, Groovy ...
Charlie: Ruby not on Rails
Wes: JVM languages + a bit of node.js
Pierre De Wilde: node.js
Andreas Kollegger: Let's chat more!
Alex Guerrieri: Java here
Shaun: hello from Cambridge (UK)
Andreas Kollegger: Has anyone had a chance to do any cypher before?
MilanSK: i do
Andreas Kollegger: Thanks Allison!
Shaun: Not me
Chris Bolton: I use Cypher extensively on the social app I work on.
Martin: not used in production, but currently evaluation ig
Erik Taylor: I've done a little
Pierre De Wilde: Node = Vertex and Relationship = Edge
Andreas Kollegger: @Pierre yes, that's right
Andreas Kollegger: "relationships" because that was the more natural way to talk about data, and edge was a little too mathy (though shorter to type)
Andreas Kollegger: "this" is related to "that"
Andreas Kollegger: instead of "this" has a directed edge to "that"
Ajinkya: .. was this terminology adopted cause initial target for social network data ?
Andreas Kollegger: the initial use case (some 10 years ago) was actually content management
Andreas Kollegger: but the devs found themselves using relationship when discussing things
Andreas Kollegger: asking questions like, "what's the relationship of this document to that folder"
MilanSK: Andreas, was the graph database only one DB in your content management system?
MilanSK: or you have used some relational DB also ?
Andreas Kollegger: yes, it was. back then, the first draft was a simple abstraction of graph queries
Andreas Kollegger: so queries were easier to write, but then they were still slow
Andreas Kollegger: so then a full DB down to the bare metal was created
Andreas Kollegger: pretty
Andreas Kollegger: balloons at a carnival
Peter: Can cypher add and delete nodes and edges?
Andreas Kollegger: yes, it can create
Andreas Kollegger: and delete
Andreas Kollegger: I think Michael will get to that
Erik Taylor: Can it create indexes?
Andreas Kollegger: we've been arguing about the right way to handle indexes
Andreas Kollegger: so, not yet
Andreas Kollegger: must use the REST api for managing indexes at the moment
Erik Taylor: got it, thx
Robert: maybe long topic: what are the advantages/disadvatages of using embedded vs server?
Andreas Kollegger: haha, yes that's a bit of a long "well, it depends..." discussion
Andreas Kollegger: there's another webinar related to that
Robert: thanks., i'll search for it
Wes: needed to make that question about OSes have checkboxes
Andreas Kollegger: oversimplification: equal abilities, really depends on your preferred deployment model
Andreas Kollegger: @wes good point
nabukabu: Anyone had a problem with DB corruption after an out of memory error that was caused by a difficult cypher query?
Andreas Kollegger: hm, unrecoverable after a restart?
Jose: Anybody from Mexico City? Connect with me at @joseigalvez
Andreas Kollegger: OOME could ruin a transaction, though I'd expect the db to recover
Alexandre Meynaud: Is the console part of web admin in 1.8?
Andreas Kollegger: the console is a standalone project
Andreas Kollegger: we had looked at integrating some of its features
Alexandre Meynaud: ok thx, nice JS animations
Andreas Kollegger: but it has slightly different goals
Wes: How does the auto index work? Do you have to explicitly create it, or is that the point (that you don't need to)?
DL: What is the ":PERSON" in the query on the slide for?
Andre: Hello from Sao Paulo, Brazil
Andreas Kollegger: the auto-index does have to be created. it adds quite a bit of overhead, so you have to be explicit
Andreas Kollegger: @DL the ":PERSON" indicates the name of an index to use for a lookup
Neo Technology: sweet!
Wes: So how does the auto index on name get created in that console example?
IvanTraveso: The queries are pretty descriptive and straightforward
Andreas Kollegger: aw, Morpheus
Alex Guerrieri: this is really neat!
Wes: The console is awesome, by the way. Especially being able to link your sample graphs to share with people.
Chris Bolton: Wes, totally agree.
Aki Ristkari: What I really love in Neo4J and cypher is the descriptive nature. Very easy to discuss with people about the potential datamodel
Andreas Kollegger: :) nice to hear
Hisao Motoyama: Can we write query in other query? like start n=(start * return *) return n
IvanTraveso: any drawbacks regarding performance with big loads of data?
Alexandre Meynaud: Yes, the great thing about Cypher is that you express what you want to retreive from the graph, and not how
Aki Ristkari: It's easy to visualize and you don't have to explain any table-row-kill_me_now-hibernate stuff to people. That marketing term 'Whiteboard friendly' is actually very accurate
Andreas Kollegger: @Hisao you can't do sub-queries, but you can "chain" queries using a "WITH" clause to sort-of pipe the results to another query instead of returning them
Amit: is there a way to indicate in cypher to prune conditionally like we can using the traverser API
Hisao Motoyama: ok, thanks
Andreas Kollegger: @Ivan the query performance is not affected by the database size, though it is affected by an increase in "local" data
Alex Guerrieri: I love how intuitive it is
Matt Taylor: can edges have a numeric value such as distance, and can queries do math on those values?
Andreas Kollegger: so, going from 1,000 to 1,000,000,000 people is no big deal, but going from 10 friends to 10,000,000 can impact a query
Andreas Kollegger: at which point you'd want to consider slightly restructuring the relationships
Andreas Kollegger: @Matt yes the relationships can have any properties, just like the nodes
IvanTraveso: Oh I see
Andreas Kollegger: you can do simple math in the query
Matt Taylor: something like, find all nodes where the path has total distance less than x?
Andreas Kollegger: see http://docs.neo4j.org/chunked/milestone/query-function.html
Alex Guerrieri: can you do logical operators on relationships? e.g. "A knows and loves B"?
Andreas Kollegger: and http://docs.neo4j.org/chunked/milestone/query-aggregation.html
Amit: how to deal with date values in neo4j, we can use long representation but that is not very helpful
Amit: is there a way around it
Andreas Kollegger: not yet. there has been discussion about a native datetime value type
Andreas Kollegger: but no agreement
Andreas Kollegger: so to/from a long is the current practice
Amit: i see
Amit: is there a way to prune in cypher conditionally like we can do using the traverser API
Andreas Kollegger: generally, you use the WHERE clause to constrain paths
Andreas Kollegger: a little different than the java api approach
Amit: but where is executed after the traversal is done, i think
Amit: is that performant
Andreas Kollegger: depends
Andreas Kollegger: sometimes the WHERE constraint is filtering a result set
Andreas Kollegger: sometimes it is constraining the match
Amit: i see like constraining a pattern in where
Andreas Kollegger: start n=node(0) match n-[r]-m where r.since = 2010 return m
Andreas Kollegger: yes, exactly
Amit: is this exactly same as pruning
Shaun: is there a limit to the number of items we can place in the "IN" clause?
Amit: and how about controlling uniqueness like node global or relationship global
Andreas Kollegger: not quite. with pruning you can of course call arbitrary java code, so the possibilities are much broader
Amit: i see
Andreas Kollegger: could, for instance, call to some natural language library or other service
Andreas Kollegger: @Shaun there are only "practical" limits. I'm not sure off-hand what they are, though
Andreas Kollegger: uniqueness is implied by path matches, though we're thinking about adding explicit control
Shaun: @Andreas, thanks,can you explain further what you mean by practical?
Andreas Kollegger: I mean related to string-buffer handling in the console, mostly
David: Can you give guidance or point to tech notes on estimating tremporary space needed during query execution
Shaun: ahh, ok thanks
Andreas Kollegger: @David the working space for queries is all in memory, so that has to do with jvm heap sizing and cache configuration
David: @andreas, how would I estimate needs?
Andreas Kollegger: see http://docs.neo4j.org/chunked/milestone/configuration-caches.html
Andreas Kollegger: also some videos (and webinar) from David Montag
Andreas Kollegger: looking..
Amit: we have a very complicated traversal implemented using traverser api called over rest on a HA neo4j setup. we need to make it more performant. Is having it as a neo4j extension the right approach
Andreas Kollegger: https://vimeo.com/41111155
Andreas Kollegger: ^^ video of David Montag giving hardware sizing webinar
Martin: can I use unique also to create unique nodes or s it for rel's only?
David: excellent, thanks
Andreas Kollegger: @Martin that depends on how you've specified the node. if it is not bound then each time you call the create it will be created again
Martin: bound menas what?
Andreas Kollegger: @Amit well, the reality is that an extension is much more performant because you're basically talking straight to the engine
Andreas Kollegger: there is/will-be the classic "compiler optimization" point where cypher execution engine will do better than hand-coded
nabukabu: Does the search in create unique use some indexing or is it just linear?
Andreas Kollegger: @Martin I mean that if in the START or MATCH clause before creating, you have used a "term" for a node that is then bound to a specific node
Amit: will server extension be covered in this session
Amit: i did not find a very good tutorial for it
Chris Skardon: Is there anything the REST interface can't do in terms of Cypher that the Embedded one can?
Martin: alright, thanks
Andreas Kollegger: server extensions will not be covered here. that's mostly pure java
Timur Medjitov: Can Cypher be used in Java code?
Amit: can you please point me to some tutorial for it the neo4j documentation is very breif about server extension
Andreas Kollegger: @Chris cypher, because it is declarative, is not as good at writing algorithmic searches. in the roadmap, writing stored-procedures, or user-defined functions will address that
Andreas Kollegger: @Timur yes, you can call cypher from java code
Andreas Kollegger: actually, these days I always start by writing Cypher queries from java, then going to traversal descriptions only when I'm doing something unusual
Timur Medjitov: that is very good, thanks.
Ajinkya: will Michael be covering the reasons behind implementing cypher in scala ?
Alexandre Meynaud: Could we place part of the where clause directly in the pattern for nodes() or --> for fitering nodes or rels with certain properties?
Andreas Kollegger: @Amit let me look for a good sample
James Camfield: you dont use spring data then? or u do, but with cypher queries too?
Andreas Kollegger: @Ajinkya that's a great question. please ask him, I'd love to hear his thoughts about that
Andreas Kollegger: Sometimes spring, sometimes not
Andreas Kollegger: I've moved to scala for a lot, so am happier outside of spring
James Camfield: i guess spring just covers the basics?
Andreas Kollegger: spring is crazy powerful. def a good place for larger applications
Andreas Kollegger: neat things like annotating stub methods with cypher queries to have them exeucted
Alexandre Meynaud: Apart from Cypher, will the community use more and more scala in Neo4j?
IvanTraveso: spring annotations huh? that should be handy
James Camfield: i haven't looked at it much for neo, but ive seen examples where you can write a query by just defining a method name in an interface and spring does the rest. if thats not enough, u can use thw annotations to override springs guess at writingf the query
Amit: what is the best way to generate reports out of neo4j using cypher
Andreas Kollegger: BI style reports? there's been some work using JDBC to pipe in cypher queries
Andreas Kollegger: there was a recent blog post about tools that could use that
Amit: can you please provide the links if you have any
Peter: Is there a Groovy DSL yet?
Martin: so cypher seems to be very powerful; why would/should I use the Java API ?
Ajinkya: are the results from the query accessible like a data matrix ? something like what R/matlab does ? that would be handy
Andreas Kollegger: http://blog.neo4j.org/2012/07/cypher-jdbc-tools-testing-results.html
Andreas Kollegger: there is a groovy binding, somewhere..
arieljake: great presentation, tanks
Andreas Kollegger: a grails plugin, I believe
Wes: a native scala embedded/REST API would be cool
Andreas Kollegger: @Martin depends. in many ways Cypher is becoming the surface API for using Neo4j. the java api is very raw
Wes: I was a bit disappointed that the only one I could find was supposedly for 1.7 (and only REST)
Martin: Thanks for the jdbc-link; that's awesome
Andreas Kollegger: for scala, any interest in play or another framework, or just raw like databinder dispatch or something
Alexandre Meynaud: @Wes, you can already use the Java API from scala, not native though, but easy at least
Alexandre Meynaud: @Wes, there are also a few scala bindings on github
Ajinkya: what are the major companies using Cypher in production ? any case studies ?
Abhijit Joshi: Great presentation, by Mike - very informative and a good starting point on Cypher for someone like me. I appreicate the knowledge share
Martin: thanks a lot!
Andreas Kollegger: interesting. use cases that we've created have just looked at use of neo4j, but not specifically cypher
Shaun: many thanks, looking forward to taking it for a spin now
Oleg Okun: Thank you a lot!
IvanTraveso: nice presentation. thanks!
Alexandre Meynaud: Great presentation Michael, thanks a lot
Wes: Thanks a lot guys.
Andreas Kollegger: thanks everyone, thanks Michael!
James Camfield: cheers
Chris Skardon: Thanks!
Mylène: Thanks. this was absolutely cool!
Aki Ristkari: Thanks for the show
Something went wrong with that request. Please try again.