= Cassandra = The [[https://cassandra.apache.org/ | 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. Apache Cassandra is an open source NoSQL distributed database trusted by thousands of companies for scalability and high availability without compromising performance. https://docs.datastax.com/en/cql/3.3/cql/ddl/dataModelingApproach.html Because Cassandra uses this single table-single query approach, queries can perform faster. '''Data in Cassandra is often arranged as one query per table, and data is repeated in many tables, a process known as denormalization.''' == Slackbuild == {{{#!highlight sh 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 == {{{#!highlight sh 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 {{{#!highlight sh 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 {{{#!highlight sh 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|| ||map||java.util.Map|| ||set||java.util.Set|| ||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 == {{{#!highlight sh echo -e "use schema;\nDESCRIBE KEYSPACE;\n" | cqlsh CassandraHost > mySchema.cdl cqlsh CassandraNEWhost -f mySchema.cdl }}}