TL;DR
Titanium is a powerful Clojure graph library that is built on top of Aurelius Titan.
It combines a Clojure-friendly API and graph processing DSL with the power of Titan.
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.
Introducing Titanium
Titanium is a powerful Clojure graph library that is built on top of Aurelius Titan.
It combines a Clojure-friendly API and graph processing DSL with the power of Titan:
Today we release a very early version, 1.0.0-alpha1.
What’s In The Box
In 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.4
, 1.3
, 1.5-master-SNAPSHOT
) x 3 JDKs (OpenJDK 7, Oracle JDK 7, OpenJDK 6).
The source is available on
GitHub. We also use GitHub
to track issues. If you want to contribute, there is a section on our
workflow in the
README.
License
Titanium is double-licesned under the Eclipse Public
License (the same as
Clojure) and the Apache Public License
2.0 (the same as
Titan).
What’s Ahead
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
New releases and updates are announced on
Twitter. Titanium also has a
mailing list, feel
free to ask questions and report issues there.
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.
Let us know what you think on Twitter or on the Clojure mailing list.
Michael on behalf of the ClojureWerkz Team.