The Quest To Improve
ClojureWerkz projects are mostly known for our data store clients. Data processing is a sweet spot for Clojure and that’s what we primarily use it for.
Over time we’ve developed and released a number of data store clients:
and a few others.
Some of them work very well and we will likely be happy with them for years to come. However, with some projects we keep thinking there is a limit to their usefullness or application. Sometimes the limitations are completely outside of our control, for example, licensing or implementation details of dependencies.
Standing On The Shoulders of Giants
Fortunately, the open source community is moving fast and new data stores are being released every year. Last year folks from Aurelius released Titan, a new powerful graph library that has pluggable storage backends and nails a few problems we’ve been having with other graph data stores.
Titan is primarily used as a JVM library which is significantly more efficient than issuing HTTP requests all the time when you are busy populating or updating the graph from an ongoing flow of events in the same JVM (e.g. a Web crawler activity). In addition, it can use Cassandra or HBase for durable storage, largely eliminating operations-related limitations (backup tools, HA) in some other popular open source graph data stores.
As Titan was getting more and more mature, we kept evaluating it and discussing what a good Clojure library on top of it would look like.
Today we are happy to release some results of that thinking.
- BerkeleyDB, Cassandra or HBase for storage
- Powerful features of the Tinkerpop graph technologies stack
- Linear scalability, large number of concurrent users
- Good performance (throughput, latency) baseline
- Transaction support
- Apache Public License 2.0
Today we release a very early version, 1.0.0-alpha1.
What’s In The Box
1.0.0-alpha1, with Titanium you can
- Populate the graph (add vertices, edges)
- Manipulate properties of vertices and edges
- Define indexes for graph elements
- Query the graph using key/value lookups
- Query and traverse the graph via a (semi-complete) DSL powered by Gremlin and Pipes
- Configure Titan graphs
all via easy to use, Clojuric API.
Documentation & Examples
Because this is a ClojureWerkz project, we could not make this release public without at least one complete documentation guide.
Titanium’s test suite can be used to get more code examples.
Development, Issue Tracking, Supported Clojure Versions
Titanium targets Clojure 1.3+ and tested against 3 Clojure versions (
1.5-master-SNAPSHOT) x 3 JDKs (OpenJDK 7, Oracle JDK 7, OpenJDK 6).
We definitely want Titanium to be feature complete and get more powerful as Titan itself gets more powerful and mature. The Tinkerpop stack has a lot to offer and a lot of potential to grow into the industry standard graph technologies stack (at least on the JVM). Titanium will take full advantage of that.
We also think Titanium can grow to offer useful features of its own. There is a lot of work ahead even to catch up with Titan, but we already have a few ideas. Our short term goal is to make Titanium reach rough feature parity with Neocons and expose all the good parts of Titan.
Needless to say, documentation guides will only get better.
News and Updates
Titanium is a ClojureWerkz Project
Titanium is part of the group of libraries known as ClojureWerkz, together with
- Welle, a Riak client with batteries included
- Monger, a Clojure MongoDB client for a more civilized age
- Elastisch, a minimalistic Clojure client for ElasticSearch
- Neocons, a Clojure client for the Neo4J REST API
- Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
- Quartzite, a powerful scheduling library
and several others. If you like Titanium, you may also like our other projects.