Skip to content

@jexp /gist:3559295
Created

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Cypher Webinar Chat
  • 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.