Tag Archives: neo4j

Work Order Management with Neo4j

I look terrible in a bikini (take my word for it) but I’d love me a Lamborghini. However, in order to afford nice things, we need to do as the song says and get to work…and we need to manage and prioritize that work somehow. Today, I’m going to show you how to build part of a work order management system with Neo4j.

I’m going to build an evented work order model. So let’s say our Order gets created, then based on what it is, pieces of Work need to happen. This work is performed by some Provider (whether internal or external) and that work can be broken down into Tasks that have dependencies on Events that have occurred. How would this look like in the graph? Glad you asked:
Continue reading

Tagged , , , , , , , , , , ,

Building a Boolean Logic Rules Engine in Neo4j

A boolean logic rules engine was the first project I did for Neo4j before I joined the company some 5 years ago. I was working for some start-up at the time but took a week off to play consultant. I had never built a rules engine before, but as far as I know ignorance has never stopped anyone from trying. Neo4j shipped me to the client site, and put me in a room with a projector and a white board where I live coded with an audience of developers staring at me, analyzing every keystroke and cringing at every typo and failed unit test. I forgot what sleep was, but managed to figure it out and I lost all sense of fear after that experience.

The data model chained together fact nodes with criss crossing relationships each chain containing the same path id property we followed until reaching an end node which triggered a rule. There were a few complications along the way and more complexity near the end for ordering and partial matches. The traversal ended up being some 40 lines of the craziest Gremlin code I ever wrote, but it worked. After the proof of concept, the project was rewritten using the Neo4j Java API because at the time only a handful of people could look at a 40 line Gremlin script and not shudder in horror. I think we’re up to two handfuls now.
Continue reading

Tagged , , , , , , , , , ,

Finding Triplets with Neo4j

A user had an interesting Neo4j question on Stack Overflow the other day:

I have two types of nodes in my graph. One type is Testplan and the other is Tag. Testplans are tagged to Tags. I want most common pairs of Tags that share the same Testplans with a Tag having a specific name. I have been able to achieve the most common Tags sharing the same Testplan with one Tag, but getting confused when trying to do it for pairs of Tags.

Continue reading

Tagged , , , , , , , ,

Using a Cuckoo Filter for Unique Relationships

We often see a pattern in Neo4j applications where a user wants to create one and only one relationship between two nodes. For example a User follows another User on a social network. We don’t want to accidentally create a second follows relationship because that may create errors such as duplicate entries on their feed, or errors unfollowing or blocking them, or even skew recommendation algorithms. Also it is just plain wasteful, and while an occasional duplicate relationship won’t be a big deal, millions of them could.

So how do we deal with this?
Continue reading

Tagged , , , , , , , , , , , , ,

Flight Search with Neo4j

I think I am going to take the opportunity to explain why I love graphs in this blog post. I’m going to try to explain why looking at problems from the graph point of view opens you up to creative solutions and makes back-end development fun again. The context of our post is flight search, but our true mission is to figure out how to traverse a graph quickly and efficiently so we can apply our knowledge to other problems.

A long while back, I showed you different ways to model airline flight data. When it comes to modeling in graphs, the lesson to take away is that there is no right way. The optimal model is heavily dependent on the queries you want to ask. Just to prove the point, I’m going to show you yet another way to model the airline flight data that is truly optimized for flight search. If you recall, our last model looked like:
Continue reading

Tagged , , , , , , , , , , ,

Building a Twitter Clone with Neo4j – Part Eight

In our last post we started the front end of our Twitter Clone application and managed to register and login a user. Now we need to build the actual functionality of our application. We’re going to need a screen to display the timeline of the logged in user. A screen to display a single users posts, and a screen to display the followers of a user and the users being followed. All of these should fit within the same main template, so maybe we can start with that.

Continue reading

Tagged , , , , , , , , , ,

Building a Twitter Clone with Neo4j – Part Seven

Alright, we’ve had enough back-end work on our Twitter Clone. Let’s switch gears and get to work on the front end. I’ve decided I’m going to use a Java micro framework for my front end, but if your language of choice is Ruby, Python, Go, or whatever, find an alternative library and follow along.

Continue reading

Tagged , , , , , , , , , , ,

Building a Twitter Clone with Neo4j – Part Six

We are getting close to wrapping up the back-end API for our Twitter clone, so thank you for sticking with this awfully long series since the beginning. One of the big community features of Twitter is the Trending Hashtags. It lets users know what is being talked about even if the people a user follows aren’t talking about it. It’s kind of weird in that way since part of the point of Twitter is following just a few hundred or thousand people to reduce the noise, and here we are bringing noise back in to our feed. Regardless, this is actually pretty easy to implement, so let’s have a crack at it.
Continue reading

Tagged , , , , , , ,

Building a Twitter Clone with Neo4j – Part Five

In part four, we continued cloning Twitter by adding hashtag and mentions functionality. Then we went beyond it by adding the ability to edit a post. So we have a social network where people can follow each other and post stuff. Today we’re adding the ability to say a user likes a post, reposts a post and the most important query of all, being finally able to see our feed or timeline.
Continue reading

Tagged , , , , , , ,

Building a Twitter Clone with Neo4j – Part Four

We left off last time having just added the ability to follow people, see who we’ve followed and has followed us, block and unblock people and finally see whom we have put on our naughty list of blocked users. So we have a social network where people can create relationships, but they have nothing to say because we haven’t implemented that yet!
Continue reading

Tagged , , , , , , , ,