It is almost 2 years over since I published my first ideas and works on graphity which is nowadays a collection of algorithms to support efficient storage and retrieval of more than 10k social activity streams per second. You know the typical application of twitter, facebook and co. Retrieve the most current status updates from your circle of friends.
Today I proudly present the first version of the Graphity News Stream Server. Big thanks to Sebastian Schlicht who worked for me implementing most of the Servlet and did an amazing job! The Graphity Server is a neo4j powered servlet with the following properties:
- Response times for requests are usually less than 10 milliseconds (+network i/o e.g. TCP round trips coming from HTTP)
- The Graphity News Stream Server is a free open source software (GPLv3) and hosted in the metalcon git repository. (Please also use the bug tracker there to submit bugs and feature requests)
- It is running two Graphity algorithms: One is read optimized and the other one is write optimized, if you expect your application to have more write than read requests.
- The server comes with an REST API which makes it easy to hang in the server in whatever application you have.
- The server’s response also follows the activitystrea.ms format so out of the box there are a large amount of clients available to render the response of the server.
- The server ships together with unit tests and extensive documentation especially of the news stream server protocol (NSSP) which specifies how to talk to the server. The server can currently handle about 100 write requests in medium size (about a million nodes) networks. I do not recommend to use this server if you expect your user base to grow beyond 10 Mio. users (though we are working to get the server scaling) This is mostly due to the fact that our data base right now won’t really scale beyond one machine and some internal stuff has to be handled synchronized.
Koding.com is currently thinking to implement Graphity like algorithms to power their activity streams. It was for Richard from their team who pointed out in a very fruitfull discussion how to avoid the neo4j limit of 2^15 = 32768 relationship types by using an overlay network. So his ideas of an overlay network have been implemented in the read optimized graphity algorithm. Big thanks to him!
Now I am relly excited to see what kind of applications you will build when using Graphity.
If you’ll use graphity
Please tell me if you start using Graphity, that would be awesome to know and I will most certainly include you to a list of testimonials.
By they way if you want to help spreading the server (which is also good for you since more developer using it means higher chance to get newer versions) you can vote up my answer in stack overflow:
http://stackoverflow.com/questions/202198/whats-the-best-manner-of-implementing-a-social-activity-stream/13171306#13171306
How to get started
its darn simple!
- You clone the git repository or get hold of the souce code.
- then switch to the repo and type sudo ./install.sh
- copy the war file to your tomcat webapps folder (if you don’t know how to setup tomcat and maven which are needed we have a detailed setup guide)
- and you’re done more configuration details are in our README.md!
- look in the newswidget folder to find a simple html / java script client which can interact with the server.
Get involved
There are plenty ways to get involved:
- Fork the server
- commit some bug report
- Fix a bug
- Subscribe to the mailing list.
Furhter links:
- git repository
- originial graphity blogpost
- graphity paper
- Stack overflow discussion on social activity streams (for voting thanks!)
- issue tracker