Skip to content

Instantly share code, notes, and snippets.

@jexp
Created August 31, 2012 21:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jexp/3559295 to your computer and use it in GitHub Desktop.
Save jexp/3559295 to your computer and use it in GitHub Desktop.
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