cassy-0.2.0.3: A high level driver for the Cassandra datastore

Database.Cassandra.Basic

Contents

Synopsis

Basic Types

data Column Source

A Column is either a single key-value pair or a SuperColumn with an arbitrary number of key-value pairs

Constructors

SuperColumn ColumnName [Column] 
Column 

Fields

colKey :: ColumnName
 
colVal :: Value
 
colTS :: Maybe Int64

Last update timestamp; will be overridden during write/update ops

colTTL :: Maybe Int32

A TTL after which Cassandra will erase the column

col :: ByteString -> ByteString -> ColumnSource

A short-hand for creating key-value Column values

type Row = [Column]Source

A full row is simply a sequence of columns

Filtering

data Selector Source

A column selector/filter statement for queries.

Remember that SuperColumns are always fully deserialized, so we don't offer a way to filter columns within a SuperColumn.

Constructors

All

Return everything in Row

ColNames [ColumnName]

Return specific columns or super-columns depending on the ColumnFamily

SupNames ColumnName [ColumnName]

When deleting specific columns in a super column

Range (Maybe ColumnName) (Maybe ColumnName) Order Int32

Return a range of columns or super-columns

Instances

data Order Source

Order in a range query

Constructors

Regular 
Reversed 

Instances

data KeySelector Source

A Key range selector to use with getMulti.

Constructors

Keys [Key]

Just a list of keys to get

KeyRange KeyRangeType Key Key Int32

A range of keys to get. Remember that RandomPartitioner ranges may not mean much as keys are randomly assigned to nodes.

Instances

data KeyRangeType Source

Encodes the Key vs. Token options in the thrift API.

InclusiveRange ranges are just plain intuitive range queries. WrapAround ranges are also inclusive, but they wrap around the ring.

Constructors

InclusiveRange 
WrapAround 

Instances

Exceptions

Connection

type CPool = Pool Cassandra ServerSource

A round-robin pool of cassandra connections

defServer :: ServerSource

A localhost server with default configuration

defServers :: [Server]Source

A single localhost server with default configuration

createCassandraPoolSource

Arguments

:: [Server]

List of servers to connect to

-> Int

Max connections per server (n)

-> NominalDiffTime

Kill each connection after this many seconds

-> KeySpace

Each pool operates on a single KeySpace

-> IO CPool 

Create a pool of connections to a cluster of Cassandra boxes

Each box in the cluster will get up to n connections. The pool will send queries in round-robin fashion to balance load on each box in the cluster.

Cassandra Operations

getColSource

Arguments

:: CPool 
-> ColumnFamily 
-> Key

Row key

-> ColumnName

Column/SuperColumn name

-> ConsistencyLevel

Read quorum

-> IO (Either CassandraException Column) 

Get a single key-column value

getSource

Arguments

:: CPool 
-> ColumnFamily

in ColumnFamily

-> Key

Row key to get

-> Selector

Slice columns with selector

-> ConsistencyLevel 
-> IO (Either CassandraException Row) 

An arbitrary get operation - slice with Selector

getMultiSource

Arguments

:: CPool 
-> ColumnFamily 
-> KeySelector

A selection of rows to fetch in one hit

-> Selector

Subject to column selector conditions

-> ConsistencyLevel 
-> IO (Either CassandraException (Map ByteString Row))

A Map from Row keys to Rows is returned

Do multiple gets in one DB hit

insert :: CPool -> ColumnFamily -> Key -> ConsistencyLevel -> Row -> IO (Either CassandraException ())Source

Insert an entire row into the db.

This will do as many round-trips as necessary to insert the full row.

deleteSource

Arguments

:: CPool 
-> ColumnFamily

In ColumnFamily

-> Key

Key to be deleted

-> Selector

Columns to be deleted

-> ConsistencyLevel 
-> IO (Either CassandraException ()) 

Delete an entire row, specific columns or a specific sub-set of columns within a SuperColumn.

Utility

getTime :: IO Int64Source

Cassandra is VERY sensitive to its timestamp values. As a convention, timestamps are always in microseconds

throwing :: IO (Either CassandraException a) -> IO aSource

Make exceptions implicit