= Cassandra =
The Apache Cassandra Project develops a
highly scalable second-generation distributed database,
bringing together Dynamo's fully distributed design and
Bigtable's ColumnFamily-based data model.

== Slackbuild ==
 * cd /tmp
 * wget  http://slackbuilds.org/slackbuilds/14.1/system/apache-cassandra.tar.gz
 * tar xvzf apache-cassandra.tar.gz
 * wget http://archive.apache.org/dist/cassandra/2.0.7/apache-cassandra-2.0.7-bin.tar.gz
 * ./apache-cassandra.SlackBuild 
 * installpkg /tmp/apache-cassandra-2.0.7-noarch-1_SBo.tgz

== Node up ==
 * useradd cassandra
 * mkdir /home/cassandra
 * cd /home/cassandra
 * chown cassandra . -R
 * mkdir /var/lib/cassandra
 * cd /var/lib/cassandra
 * chown cassandra . -R
 * mkdir /var/log/cassandra
 * cd /var/log/cassandra
 * chown cassandra . -R
 * JAVA_HOME=/opt/java /opt/apache-cassandra/bin/cassandra -f

== cqlsh ==
http://wiki.apache.org/cassandra/GettingStarted

 * bin/cqlsh

{{{#! sql
CREATE KEYSPACE mykeyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
describe keyspaces;
USE mykeyspace;
CREATE TABLE users (  user_id int PRIMARY KEY,  fname text,  lname text );
INSERT INTO users (user_id,  fname, lname)  VALUES (1745, 'john', 'smith');
INSERT INTO users (user_id,  fname, lname)  VALUES (1744, 'john', 'doe');
INSERT INTO users (user_id,  fname, lname)  VALUES (1746, 'john', 'smith');
describe tables;
SELECT * FROM users;
desc table users;
CREATE INDEX ON users (lname);
desc table users;
SELECT * FROM users WHERE lname = 'smith';
}}}

== Python sample app ==
http://datastax.github.io/python-driver/getting_started.html

 * cd /tmp/
 * wget http://slackbuilds.org/slackbuilds/14.1/libraries/libev.tar.gz
 * tar xvzf libev.tar.gz 
 * cd libev
 * wget http://dist.schmorp.de/libev/Attic/libev-4.15.tar.gz
 * ./libev.SlackBuild 
 * installpkg /tmp/libev-4.15-i486-2_SBo.tgz
 * easy_install pip # if not installed
 * pip install cassandra-driver
 * pip install blist

=== python3 cass.py ===
{{{#!highlight python
from cassandra.cluster import Cluster

cluster = Cluster(['127.0.0.1'])
session = cluster.connect('mykeyspace')
rows = session.execute('SELECT  user_id , fname , lname FROM users')
for user_row in rows:
    print('%d %s %s'%( user_row.user_id, user_row.fname, user_row.lname) )
}}}

python3 asyncCass.py 
{{{#!highlight python
import time
from cassandra.cluster import Cluster

def sucessHandler(rows):
    print('Received data !')
    try:
        for user_row in rows:
            print('>>> %d %s %s'%( user_row.user_id, user_row.fname, user_row.lname) )
    except Exception as ex:
        print(ex) 

def errorHandler(exception):
    print(exception) 

if __name__=='__main__':
    cluster = Cluster(['127.0.0.1'])
    session = cluster.connect('mykeyspace')
    futurex = session.execute_async('SELECT  user_id , fname , lname FROM users')
    futurex.add_callbacks(sucessHandler,errorHandler)
    print('Wait 3 seconds ...')
    time.sleep(3)
}}}

== Python types conversion ==
http://datastax.github.io/python-driver/getting_started.html

||'''Python Type''' ||'''CQL Literal Type'''||
||None	|| NULL ||
||bool	|| boolean||
||float   || float  double||
||int     || int||
||long   || bigint varint counter||
||decimal.Decimal ||	decimal||
||str unicode  || ascii  varchar text||
|| buffer bytearray || blob||
||date datetime || timestamp||
||list tuple generator || list||
||set frozenset  || set||
||dict  OrderedDict || map||
||uuid.UUID || timeuuid uuid ||

== Java types conversion ==
http://www.datastax.com/documentation/developer/java-driver/2.0/java-driver/reference/javaClass2Cql3Datatypes_r.html

||'''CQL3 data type'''||'''Java type'''||
||ascii||java.lang.String||
||bigint||long||
||blob||java.nio.ByteBuffer||
||boolean||boolean||
||counter||long||
||decimal||java.math.BigDecimal||
||double||double||
||float||float||
||inet||java.net.InetAddress||
||int||	int||
||list||java.util.List<T>||
||map||java.util.Map<K, V>||
||set||java.util.Set<T>||
||text||java.lang.String||
||timestamp||java.util.Date||
||timeuuid||java.util.UUID||
||uuid	||java.util.UUID||
||varchar||java.lang.String||
||varint||java.math.BigInteger||

== Export and import schema ==
 * echo -e "use schema;\nDESCRIBE KEYSPACE;\n" | cqlsh  CassandraHost > mySchema.cdl
 * cqlsh  CassandraNEWhost -f mySchema.cdl