https://github.com/edwardcapriolo/casbase
What is it? There are many great articles about building secondary Cassandra indexes such as http://www.anuff.com/2011/02/indexing-in-cassandra.html. In a nutshell, index building boils down to turning a single insert into multiple inserts to support different types of searches. Casbase attempts to make this 'friendly' and reusable. It is made friendly by allowing the user to define Tables and Indexes, then when the insert method is called, Casbase takes care of updating all the indexes. String tablename="ncars"; Table t = new Table(); t.name = tablename; t.columns.add(new Col("vin".getBytes(),Col.ColType.LONG,false)); Index i = new Index(); i.columns.add("vin".getBytes()); i.it= Index.IndexType.ORDERED_BUCKETS; i.indexOptions="3"; i.name = "vinidx"; t.key = new Col("key".getBytes(),Col.ColType.BYTES,false); db.create(t); for (int k=0;k<7;k++){ Map<byte [],byte[]> cols = new HashMap<byte[],byte[]>(); cols.put("make".getBytes(),"honda".getBytes()); cols.put("model".getBytes(),"civic".getBytes()); cols.put("vin".getBytes(),CasBaseUtil.longToBytes(k)); db.insert(tablename, ("car"+k).getBytes(), cols); } Casbase is related to/a hybrid of: https://github.com/edanuff/CassandraIndexedCollections https://github.com/riptano/Cassandra-EZ-Client https://github.com/rantav/hector/wiki/Hector-Object-Mapper-%28HOM%29 There are currently two secondary index implementations HASH and ORDERED_BUCKETS. The ORDERED_BUCKETS implementation uses composite columns and sharding to allow !distributed ranged queries! on a index (ie something like. 'where column > 5 and column < 7' ). Dragons: Yes, distributed secondary via ORDERED_BUCKETS involves get_slice on N buckets on read path (you can also multi_getslice as well). Yes, distributed indexes are not "fast" like local indexes are, but they are what they are. Status: Code is still in an academic phase. It started in the last week and as evidenced by my 50 commits this holiday it is not stable either. Have fun. Stay tuned.