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

Safe HaskellNone

Database.Cassandra.Basic

Contents

Synopsis

Connection

type CPool = Pool CassandraSource

A round-robin pool of cassandra connections

type Server = (HostName, Int)Source

A (ServerName, Port) tuple

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

Number of stripes to maintain

-> Int

Max connections per stripe

-> 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.

MonadCassandra Typeclass

class MonadIO m => MonadCassandra m whereSource

All Cassy operations are designed to run inside MonadCassandra context.

We provide a default concrete Cas datatype, but you can simply make your own application monads an instance of MonadCassandra for conveniently using all operations of this package.

Please keep in mind that all Cassandra operations may raise CassandraExceptions at any point in time.

Instances

newtype Cas a Source

Constructors

Cas 

Fields

unCas :: ReaderT CPool IO a
 

runCas :: Cas a -> CPool -> IO aSource

Main running function when using the ad-hoc Cas monad. Just write your cassandra actions within the Cas monad and supply them with a CPool to execute.

Cassandra Operations

getColSource

Arguments

:: MonadCassandra m 
=> ColumnFamily 
-> Key

Row key

-> ColumnName

Column/SuperColumn name

-> ConsistencyLevel

Read quorum

-> m (Maybe Column) 

Get a single key-column value.

getSource

Arguments

:: MonadCassandra m 
=> ColumnFamily

in ColumnFamily

-> Key

Row key to get

-> Selector

Slice columns with selector

-> ConsistencyLevel 
-> m Row 

An arbitrary get operation - slice with Selector

getMultiSource

Arguments

:: MonadCassandra m 
=> ColumnFamily 
-> KeySelector

A selection of rows to fetch in one hit

-> Selector

Subject to column selector conditions

-> ConsistencyLevel 
-> m (Map ByteString Row)

A Map from Row keys to Rows is returned

Do multiple gets in one DB hit

insert :: MonadCassandra m => ColumnFamily -> Key -> ConsistencyLevel -> Row -> m ()Source

Insert an entire row into the db.

This will do as many round-trips as necessary to insert the full row. Please keep in mind that each column and each column of each super-column is sent to the server one by one.

deleteSource

Arguments

:: MonadCassandra m 
=> ColumnFamily

In ColumnFamily

-> Key

Key to be deleted

-> Selector

Columns to be deleted

-> ConsistencyLevel 
-> m () 

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

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

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.

wrapException :: IO a -> IO aSource

Wrap exceptions of the underlying thrift library into the exception types defined here.

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

Helpers

class CKey a whereSource

A typeclass to enable using any string-like type for row and column keys

packLong :: Integral a => a -> ByteStringSource

Pack any integral value into LongType