Hector is a Java Cassandra client. It’s a nice abstraction over making raw Thrift calls. Hector’s features include:
- an object-oriented way to interface with Cassandra
- serialization helpers
- failover support
- connection pooling
- jmx support
There is already a Ruby cassandra gem, but it uses the Ruby Thrift bindings which do not work well for JRuby. In any case, I want to be able to seamlessly serialize Java objects and store them in Cassandra.
Thus hector.rb was born. hector.rb is a JRuby Cassandra client that wraps Hector. The interface is based on clj-hector. Eventually, I’d like the interface to be API compatible with the cassandra gem.
Example Usage
require 'java'
require 'hector'
cluster = Hector.cluster("Hector", "127.0.0.1:9160")
ks_name = java.util.UUID.randomUUID.to_s.gsub("-","")
client = Hector.new(nil, cluster, :retries => 2, :exception_classes => [])
column_families = [{:name =>"a"}, {:name => "b", :type => :super}]
client.add_keyspace({:name => ks_name, :strategy => :local, :replication => 1, :column_families => column_families})
client.keyspace = ks_name
sopts = {:n_serializer => :string, :v_serializer => :string, :s_serializer => :string}
client.put_row("a", "row-key", {"k" => "v"})
client.get_rows("a", ["row-key"], sopts) # => {"row-key" => {'k' => 'v'}}
client.get_columns("a", "row-key", ["k"], sopts) # => {'k' => 'v'}
client.put_row("b", "row-key",
{ "SuperCol" => {"k" => "v", "k2" => "v2"},
"SuperCol2" => {"k" => "v", "k2" => "v2"} })
client.get_super_columns("b", "row-key", "SuperCol", ["k2"], sopts) # => {"k2" => "v2"}
For more examples, see the tests.
Installation
gem install --source http://gems.xcombinator.com hector
or
Get the source here.
Future Work
Now that we can easily deal with [super]rows and columns in Cassandra, the next step is to put an ActiveModel abstraction over it. I’m currently working on modifying cassandra_object to work on JRuby with hector.rb. If you’d like to follow development the branch is here.
hector.rb: the pleasant JRuby Cassandra client (wraps Hector)
There is already a Ruby cassandra gem, but it uses the Ruby Thrift bindings which do not work well for JRuby. In any case, I want to be able to seamlessly serialize Java objects and store them in Cassandra.
Thus hector.rb was born. hector.rb is a JRuby Cassandra client that wraps Hector. The interface is based on clj-hector. Eventually, I’d like the interface to be API compatible with the cassandra gem.
Example Usage
For more examples, see the tests.
Installation
gem install --source http://gems.xcombinator.com hector
or
Get the source here.
Future Work
Now that we can easily deal with [super]rows and columns in Cassandra, the next step is to put an ActiveModel abstraction over it. I’m currently working on modifying cassandra_object to work on JRuby with hector.rb. If you’d like to follow development the branch is here.