

Cassandra is a highly scalable, eventually consistent, distributed, structured 
key-value store. 


Project description
-------------------

Cassandra brings together the distributed systems technologies from Dynamo 
and the data model from Google's BigTable. Like Dynamo, Cassandra is 
eventually consistent. Like BigTable, Cassandra provides a ColumnFamily-based
data model richer than typical key/value systems.

For more information see http://cassandra.apache.org/

Requirements
------------
  * Java >= 1.6 (OpenJDK and Sun have been tested)

Getting started
---------------

This short guide will walk you through getting a basic one node cluster up
and running, and demonstrate some simple reads and writes.

  * tar -zxvf apache-cassandra-$VERSION.tar.gz
  * cd apache-cassandra-$VERSION
  * sudo mkdir -p /var/log/cassandra
  * sudo chown -R `whoami` /var/log/cassandra
  * sudo mkdir -p /var/lib/cassandra
  * sudo chown -R `whoami` /var/lib/cassandra

Note: The sample configuration files in conf/ determine the file-system 
locations Cassandra uses for logging and data storage. You are free to
change these to suit your own environment and adjust the path names
used here accordingly.

Now that we're ready, let's start it up!

  * bin/cassandra -f

Unix: Running the startup script with the -f argument will cause
Cassandra to remain in the foreground and log to standard out.

Windows: bin\cassandra.bat runs in the foreground by default.  To
install Cassandra as a Windows service, download Procrun from
http://commons.apache.org/daemon/procrun.html, set the PRUNSRV
environment variable to the full path of prunsrv (e.g.,
C:\procrun\prunsrv.exe), and run "bin\cassandra.bat install".
Similarly, "uninstall" will remove the service.

Now let's try to read and write some data using the Cassandra Query Language:

  * bin/cqlsh

The command line client is interactive so if everything worked you should
be sitting in front of a prompt...

  Connected to Test Cluster at localhost:9160.
  [cqlsh 2.2.0 | Cassandra 1.2.0 | CQL spec 3.0.0 | Thrift protocol 19.35.0]
  Use HELP for help.
  cqlsh> 


As the banner says, you can use 'help;' or '?' to see what CQL has to
offer, and 'quit;' or 'exit;' when you've had enough fun. But lets try
something slightly more interesting:

  cqlsh> CREATE SCHEMA schema1 
         WITH replication = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
  cqlsh> USE schema1;
  cqlsh:Schema1> CREATE TABLE users (
                   user_id varchar PRIMARY KEY,
                   first varchar,
                   last varchar,
                   age int
                 );
  cqlsh:Schema1> INSERT INTO users (user_id, first, last, age) 
                 VALUES ('jsmith', 'John', 'Smith', 42);
  cqlsh:Schema1> SELECT * FROM users;
   user_id | age | first | last
  ---------+-----+-------+-------
    jsmith |  42 |  john | smith

  cqlsh:Schema1> 

If your session looks similar to what's above, congrats, your single node
cluster is operational! 

For more on what commands are supported by CQL, see
https://github.com/apache/cassandra/blob/trunk/doc/cql3/CQL.textile.  A
reasonable way to think of it is as, "SQL minus joins and subqueries."

Wondering where to go from here? 

  * Getting started: http://wiki.apache.org/cassandra/GettingStarted
  * Join us in #cassandra on irc.freenode.net and ask questions
  * Subscribe to the Users mailing list by sending a mail to
    user-subscribe@cassandra.apache.org
  * Planet Cassandra aggregates Cassandra articles and news:
    http://planetcassandra.org/
