I'm happy to announce that the team at MyPost (https://*digitalmailbox*
.com.au/) has decided to release a library that we have been working on for 
the past couple of months.

https://github.com/MyPost/cassius

Apparently its `also only the second release of open source software by a 
public sector organisation in Australia`
 (http://www.andykelk.net/tech/open-sourcing-our-work-why-were-doing-it)


Overview

Cassius is a clojure wrapper around cassandra's thrift interface. It treats 
cassandra as a big mutable nested hashmap and provides the following 
abstractions:

   - cassandra data and schema can be represented as values and clojure 
   maps.
   - keyspaces, column families, rows and columns can be abstracted as 
   nested map layers
   - supercolumns are just one extra level of nesting

The library has been used for both mocking and for higher level 
abstractions on top of cassandra. An ORM has been built and used internally 
at MyPost 
<https://github.com/MyPost/cassius/blob/master/digitalmailbox.com.au> to 
deal with legacy cassandra data.
Motivation

The library was motivated by an inability to reason about what changes the 
existing monolithic system was doing to the underlying database. In order 
to move away from the existing system into more agile architecture, the 
team had to be careful about reworking features without breaking 
functionality. The typical work of code migration would end up looking 
something like this:

   1. Get the current state of the DB
   2. Run some legacy code (java)
   3. See what has changed in the DB
   4. Rewrite that change in clojure

cassius was designed as a tool for developers to reason about and test 
changes to cassandra. It also has the following features:

   - Written in thrift in order to support supercolumns in the legacy 
   system.
   - Abstracts the database in such a way that tests are easy to write and 
   easy to read.
   - Uses of conditional restarts for more control of error states.
   - Option to use the component/Lifecycle framework. Mock DB is included 
   for testing purposes.
   - Uses the Hashmap as a protocol, defined in cassius.protocols/IMap.
      - Methods: put-in, peek-in, keys-in, drop-in, set-in, select-in and 
      mutate-in
   
<https://github.com/MyPost/cassius#usage>

The repo is here: https://github.com/MyPost/cassius

Please have a play!

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to