Apache Cassandra Learning Step by Step (2): Core Concepts

====15 Feb 2012, by Bright Zheng (IT进行时)====

3. Core Concepts

3.1. Keyspace

3.1.1.  Intro

A keyspace is the first dimension of the Cassandrahash, and is the container for the ColumnFamilies. Keyspaces are of roughly thesame granularity as a schema or database (i.e. a logical collection of tables)in the RDBMS world. They are the configuration and management point for columnfamilies, and is also the structure on which batch inserts are applied. In mostcases you will have one Keyspace for an application.

3.1.2. CLI

[default@unknown] drop keyspace Tutorial;

876ee520-571f-11e1-0000-242d50cf1ffd

Waiting for schema agreement...

... schemas agree across the cluster

[default@unknown] create keyspace Tutorial

...  with strategy_options = [{replication_factor:1}]

...  and placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy';

WARNING: [{}] strategy_options syntax is deprecated, please use {}

8daea060-571f-11e1-0000-242d50cf1ffd

Waiting for schema agreement...

... schemas agree across the cluster

[default@unknown] use Tutorial;

Authenticated to keyspace: Tutorial

[default@Tutorial]

3.2. Column Family

3.2.1. Intro

A column family is a container for columns, somethinglike the TABLE in a relational system.

Model representation:

ColumnFamily

key

list

binary

1 .. * Columns

Data representation:

ColumnFamily

key

Columns

1

name

value

timestamp

 

"firstname"

"Ronald"

1270073054

 

"lastname"

"Mathies"

1270073054

 

"birthday"

"01/01/1978"

1270073054

2

name

value

timestamp

 

"firstname"

"John"

1270084021

 

"lastname"

"Steward"

1270084021

 

"birthday"

"01/01/1982"

1270084021

3.2.2. CLI

[default@Tutorial] drop column family StateCity;

StateCity not found in current keyspace.

[default@Tutorial] create column family StateCity

...         with comparator = LongType

...         and default_validation_class = 'UTF8Type'

...         and key_validation_class = 'UTF8Type';

d3cfa8f0-571f-11e1-0000-242d50cf1ffd

Waiting for schema agreement...

... schemas agree across the cluster

[default@Tutorial]

Where:

1. Comparatoris used to validate and compare/sort Column names in the CF. It has followingsupported types:

Type

Description

BytesType

Simple non-validating byte comparison (Default)

AsciiType

Similar to BytesType, but validates that input is US-ASCII

UTF8Type

UTF-8 encoded string comparison

LongType

Compares values as 64 bit longs

LexicalUUIDType

128 bit UUID compared by byte value

TimeUUIDType

Timestamp compared 128 bit version 1 UUID

Note:

  1. The above types are changeable subject to different versions.
  2. It is also valid to specify the fully-qualified class name to a customized class that extends org.apache.Cassandra.db.marshal.AbstractType.

3.3. Column

3.3.1. Intro

A Column consists of a name, value and a timestamp.

Model representation:

Column

name

Binary

value

Binary

timestamp

i64

Data representation:

Column

name

value

timestamp

"firstname"

"Ronald"

1270073054

3.3.2. CLI

N/A

3.4. SuperColumn

3.4.1. Intro

A SuperColumn is very similar to a ColumnFamily, itconsists of a key and a list of Columns.

Model representation:

SuperColumn

key

list

binary

1 .. * Columns

Data representation:

SuperColumn

key

Columns

1

name

value

timestamp

 

"firstname"

"Ronald"

1270073054

 

"lastname"

"Mathies"

1270073054

 

"birthday"

"01/01/1978"

1270073054

2

name

value

timestamp

 

"firstname"

"John"

1270084021

 

"lastname"

"Steward"

1270084021

 

"birthday"

"01/01/1982"

1270084021

The only difference to ColumnFamily is the usage. ASuperColumn is used within a ColumnFamily. So it adds an extra layer in yourdata structure, instead of having only a row which consists of a key and a listof columns. We can now have a row which consists of a key and a list of supercolumns which by itself has keys and per key a list of columns.

Once the ColumnFamily uses SuperColumn, the columntype must be “Super”. By default the column type is “Standard” which meanscommon Column.

3.4.2. CLI (TODO)

To be added here!

3.5. Others?

Please refer to http://wiki.apache.org/cassandra/APIfor more.