skip to navigation
skip to content

Not Logged In

CassandraJsonMapper 1.0.1

Simple JSON to Cassandra Python client.

Latest Version: 1.2.1

# CassandraJsonMapper


CassandraJsonMapper is an Apache Cassandra Python driver developed for direct
functionality to store JSON-style objects mapped into Cassandra composite columns.

This is done via the main methods: `save(key)`, `get(key)`, `delete(key)`.

## History

I needed something small, light-weight, and fast enough on reads and writes for
short bursts of data. I was handling JSON returns from REST API calls that
I would later do light-weight analytics over. This fit my use case efficiently,
so I decided to share it.

## Setup

pip install CassandraJsonMapper


## Initialize Database

Since CassandraJsonMapper uses composite columns heavily to do it's nesting,
the schema for the column family that CassandraJsonMapper will use must look
similar to what is provided.

**NOTE:**
Keep in mind that the number of composite columns created must be at
least as deep as the deepest JSON document that will be saved.

```sql
create keyspace json
with placement_strategy = 'SimpleStrategy'
and strategy_options = {replication_factor : 1};

use json;

create column family json
with column_type = 'Standard'
and comparator = 'CompositeType(
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType,
org.apache.cassandra.db.marshal.BytesType,org.apache.cassandra.db.marshal.BytesType)'
and default_validation_class = 'BytesType'
and key_validation_class = 'BytesType';
```


## Example Code

```python
import CassandraJsonMapper

db = CassandraJsonMapper.db(keyspace='json', column_family='json')

document = {
'key2': {
'test': 'okay'
}
}
db.save(document)
assert db.get('key2') == document['key2']

db.delete('key2')
assert db.get('key2') == {}
```


## Multi-threaded Example

```python
db.mt_save(document)
db.mt_finish()

assert db.get('key2') == document['key2']
```


## Limitations

In hopes of keeping this client simple, the following is not supported:

* Cannot append to lists.
* Lists can be replaced by lists of only equal or greater sizes.
Smaller sizes will contain the last elements of the previous array.
* Cannot delete portions of a document.
* Reads may not be returned in full, but paging is supported.


## Methods

This client has a few main methods:

```python
def __init__(self, keyspace, column_family, server_list=['localhost'],
write_consistency=ConsistencyLevel.ONE,
read_consistency=ConsistencyLevel.ONE,
request_size=100, batch_size=6000, thread_count=20)
"""Create the Cassandra connection pool and CF connection."""

def save(self, dictionary_payload, write_consistency=None, batch_size=None)
"""Convert and save dictionary into Cassandra."""

def get(self, key, read_consistency=None,
return_last_row=False, column_start=None, request_size=None)
"""Read and convert Cassandra response into dictionary."""

def delete(self, key, write_consistency=None)
"""Delete dictionary from Cassandra."""

def mt_save(self, dictionary_payload)
"""Save dictionary asynchronously."""

def mt_finish(self)
"""Wait until all pending inserts are performed."""
```  
File Type Py Version Uploaded on Size
CassandraJsonMapper-1.0.1.tar.gz (md5) Source 2012-10-21 5KB
  • Downloads (All Versions):
  • 12 downloads in the last day
  • 91 downloads in the last week
  • 471 downloads in the last month