Monday, October 31, 2011

The Aftermath of SpringONE

What a whirlwind!

After a LOT of hard work, I came out of Chicago extremely happy to have met some great people within Neo and in the Spring community.

The week got kicked off with an All Hands meeting, where all 25 of us got together to discuss different departments and strategy. The highlight, of course, was the segway tour!! So fun. And the weather was fantastic, which was lucky.

We then had the After Party following the opening keynote for SpringONE. We handed out "Follow the White Rabbit" t-shirts, and plasma balls. We hosted a trivia game, and Team RockPaperScissors all won iPads (congrats guys!). Other prizes were iPod Touches, and portable speaker systems.

We held a raffle to win another iPad, and we're announcing the winner this WEEK! So watch out for an email.

It was great to have the whole team at the conference, because whenever anyone stopped by the booth, they were able to talk to one of our great teammates. If you haven't met the people from Neo4j, be sure you do. All are able to talk to your background, relate it to graphs, and discuss solutions that fit. It was also fun to see the staff shirts pop throughout the crowd.

Some pics from the week, aanndd back to reality on Monday!


Thursday, October 20, 2011

Neo4j @SpringONE

Hi all,

So I thought it would be worthwhile to let you all know what is going on with SpringONE. So much is happening, I've barely had any time to gather my thoughts to communicate our efforts to the most important part of Neo4j: our community.

So what the eff is going on next week in Chicago?

First off
, we are proud to announce that we are Platinum Sponsors for SpringONE 2GX. After announcing Rod Johnson as our new Chairman of the Board, we thought it a great idea to hang out to the Spring community, and support the SpringONE conference.

Neo4j (with a huge shout out to Michael) is about to release Spring Data Neo4j 2.0. Surrounding this super exciting work, there is also a book being published, and a movie website that demonstrates SDN. If you're going to SpringONE, Michael will be presenting. So If you're not going to SpringONE, attend our Intro to Spring Data Neo4j webinar.

, we are hosting a rad after party, with a trivia game created by Andreas. Come participate, and you can win fun Apple stuff. Oh and there is free beer. Score!

, on a more personal note, the entire Neo4j team will be coming to Chicago from all over the world to participate in an All-Hands meeting. There are some people that I've only seen through Skype sessions, so I'm super excited to put faces to the jokes thrown over the internets.

If you are in Chicago for the conference, or just based in Chi-town, please let us know. We would love to meet you, grab a drink with you, and chat graphs.


Tuesday, October 11, 2011

Announcing Neo4j 1.5 “Boden Bord” Milestone 2 - the Autumnal Fruits of our Labor

As the last of the summer sunshine leaves us and the northern winter approaches, at Neo HQ we've been hunkered around our laptops for warmth and been busy packing in all manner of new functionality for the forthcoming Neo4j 1.5 release. In our last milestone release before our GA, we're opening the floodgates and letting out a feature-complete stack. And there's a lot in here too!

Safety First!

In the 1.5 M02 release, the format of the data store has significantly changed. This means you need to be careful when upgrading from previous versions of Neo4j, and you'll have to have plenty of disk space available for the conversion process.
Before using this milestone, you need to cleanly shutdown and backup before upgrading. Similarly, Neo4j HA clusters must be shutdown, and their stores must be upgraded one at a time before being brought back up. As always, think very carefully before using a milestone build for production use.
And a final notice that online backup will default to full backups if instructed to perform an incremental backup on an old store version, while storing out of harm’s way your existing backup.
With all that in mind, let’s break open the new features!

Store size and IO reduction

Now you’ve read the safety card, we can see the reason for the changed store layout: to substantially reduce our on-disk footprint. In typical cases we've seen stores reduced by 30% but in some cases the store size is even smaller still.
To shrink the store format on disk, we've had to change how we inline some data (much like our short-string optimization) so that many properties are now stored in-line with their respective nodes/relationships rather than being in a separate store.
As a Neo4j user you won't notice any changes to the API, but you’ll see performance improve because our new store results in fewer IO operations for the same functionality. This is especially valuable in virtualized severs where IO latency can be unpredictable and expensive.

Cypher enhancements

The team behind the Cypher query language continues to innovate at a ferocious pace which has meant some powerful upgrades to the syntax. Some existing queries might have to be migrated. In this release Cypher’s been extended and refined so that:
  • Relationships can be made optional
  • Added new predicates for iterables: ALL/ANY/NONE/SINGLE to refine filtering on returned subgraphs
  • New path functions: NODES/RELATIONSHIPS/LENGTH return respectively the nodes, relationships or length of a path
  • Parameters for literals, index queries and node/relationship id
  • Shortest path support has been added
  • The Pattern matcher implementation will, if possible, eliminate subgraphs early, by using the predicates from the WHERE clause providing faster response times
  • Relationships can be bound
  • Added IS NULL for painless null checking
  • Added new aggregate function COLLECT which combines multiple result rows into a single list of values
Cypher’s capabilities and expressiveness continue to improve, and they’re fueled by your feedback so take these features for a test drive.

HA improvements

Like our ongoing kernel work, HA is part of our stack that isn’t readily visible to users but it’s something we obsess over. In this release we’ve focused attention on performance and robustness, particularly for cloud deployments. The upshot is that running and operating a Neo4j HA cluster - even in unpredictable environments and multi-region clusters like on Amazon - is solid and more refined than in previous releases.


Our wonderful Webadmin dashboard for Neo4j server is getting slicker by the release. This time around our Web team has pulled out the stops to deliver some fantastic new visualization tooling. And we think you’ll agree the new eye candy is rather nice too.

As you can see the tool looks more sophisticated and slick than previous versions. But this beauty isn’t just skin-deep, there’s some real substance in what you can do with this release. In particular, we’re fond of:
  • Rule-based visualization style and icons in the visualization so that rich and compelling domain models can be easily shared with domain experts
  • Visualization profiles sot that you can inspect data from different perspectives

Community features

Our 1.5 releases marked the beginning of a dedicated community team at Neo HQ who have championed a plethora of new features (and squished a few bugs) in the 1.5 M02 release, based on feedback from our fabulous open source community.
In the Neo4j server, there have been some subtle changes to the REST index API which make the API clearer. For example, now to create an index you POST an indexable payload to the URI of the index, rather than encoding that payload as part of the URI itself. Functionality hasn't changed, but don't forget to check that your client library supports the change.
Also added is support for HTTP authentication and authorization in the server. By implementing the interface (and adding a line of configuration) developers can easily intercept each HTTP request and check whether it's permitted for the targeted URI. A simple scheme might simply check an access token against a third-party directory service, while more sophisticated schemes might implement node-by-node level authorization policies. Either way, the API is short and neat and allows you to plumb Neo4j into your existing security infrastructure.
In 1.5.M02, we also upgraded to Gremlin 1.3 as the Groovy-based scripting language to be accessed via the Gremlin Plugin. Enjoy all the performance and syntax improvements from the Tinkerpop community!
For a full list of community issues fixed, see and thank you all for participating.


If all this seems like something you might like, then the Neo4j 1.5 M02 release is now available from our download site. Developer dependencies are also available from the Maven repository.
Since this is our last milestone before the 1.5 GA release we really need your feedback. If you find things you like, things you detest, things that are puzzling, things that are wrong or even bugs please get involved in the community and let us know.

Wednesday, October 5, 2011

From neo4j import GraphDatabase

First of all, we’re really sorry. We have been saying that Python support for the embedded database is coming in “a few weeks” or “next month" for over half a year now, and so far, you have waited patiently, and you have waited in vain.

We promise to not give promises we can’t keep again, and we hope ya’ll know that we love Python just as much as the next guy.

Now, finally, the absolutely latest and greatest version of the embedded Neo4j database works in Python, and we’ve put a bunch of effort into ensuring it stays that way. The new bindings are constantly tested against each new build of the database, and are set up to deploy to PyPi as often as we all like them to.

The API is very similar to the original API. We also borrowed some of the API methods introduced in neo4j-rest-client, to make switching between the two as easy as possible.

This is a first release, so there may still be bugs lurking - please make sure to report any that you encounter and ideas for improvements to the project issue tracker!

Quick look
Here is a quick look at how you use neo4j-embedded.
from neo4j import GraphDatabase

db = GraphDatabase(‘/my/db/location’)

with db.transaction:
    oscar = db.node(name=’Oscar Wilde’)
    jacob = db.node(name=’Jacob’)

    # Create a relationship

The new bindings are tested on CPython 2.7.2 on Windows and Linux, but should work on Python 2.6 branches as well. 

You’ll need JPype installed to bridge the gap to Java land, details about how to set that up can be found in the installation instructions.

Jython support is on the todo list, but because Neo4j uses Java’s ServiceLoader API (which does not currently work in Jython) it will have to wait until we find a good workaround.

Getting started

Full instructions for how to install and get started can be found in the Neo4j Manual. For feedback, hints and contributions, don’t hesitate to ask on the Neo4j Forums.

Happy Hacking!

Heart symbol from