- 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!
- fabio: :)
- Andoni: Hello!
- Charlie: Morning
- Mylène: Afternoon...
- Michael Nero: Ha. It's just turned noon here. I'm in Austin, TX.
- Mylène: In the Netherlands it's now 7 PM...
- fabio: evening
- 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.
- Martin: Java
- 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 ...
- Robert: java
- Charlie: Ruby not on Rails
- Hassan: Ruby/Rails/Ubuntu
- Hassan: Nginx
- 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!
- Erik Taylor: javascript/node.js/php
- 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
- Charlie: jruby/goliath/grape
- 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
- Ajinkya: ohk
- 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
- Ajinkya: neat
- 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
- Hassan: =~
- 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
- David: thanks
- 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?
- Martin: *means
- 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
- Amit: thanks
- 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
Cypher Webinar Chat
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment