Presentacion sobre cassandra

Preview:

DESCRIPTION

Rapida presentación sobre cassandra

Citation preview

Cassandra[Parte práctica]

Base de Datos NoSQL clave/valor___________________________________________________________________________

Jesús Rodríguez Pérez

Modelo de datos de Cassandra

Antes de empezar con el diseño de una base datos en cassandra debemos al menos repasar los conceptos básicos de su modelo de datos.● Cluster: nodos que ejecutan una instancia de Cassandra, estos pueden

contener varios keyspaces.● Keyspace: un espacio de nombres que permite agrupar varias

ColumnFamilies. Sería el equivalente a una BBDD en el modelo relacional.● ColumnFamily: puede contener varias columns. Sería equivalente a una

tabla en el modelo relacional. No todas las filas de una ColumnFamily tienen el porque tener el mismo número de columnas. Cada fila se identifica por su row key

● Column: unidad básica de almacenamiento. Están compuestas por name, value y timestamp.

● SuperColumn: son columnas que pueden almacenar otras columnas. No se suelen utilizar.

Será necesario también conocer cómo funcionan los índices ya que estos nos permiten hacer consultas más complejas.

Diseño de una BD NoSQL

Creando estructuras

create keyspace Comercio with placement_strategy= 'org.apache.cassandra.locator.SimpleStrategy' and strategy_options={replication_factor:1};

Crear el keyspace

Una vez creado la indicamos que vamos a trabajar con dicho keyspace.

use Comercio;

Creando estructuras(2)

create column family usuario with comparator=UTF8Type andkey_validation_class=IntegerType anddefault_validation_class=UTF8Type andcolumn_metadata =[ {column_name: nombre, validation_class: UTF8Type}, {column_name: mail, validation_class: UTF8Type}, {column_name: pais, validation_class: UTF8Type, index_type: KEYS}, {column_name: fechaIngreso, validation_class: DateType}];

Una familia de columnas

Consultando datos

get usuario[1][mail];

get usuario[1];

list usuario;

get venta where pagada=false;

list producto limit 3;

Solo si hemos creado el índice.

ColumnFamilyRow key

Column

Insertando datos

set usuario[1][nombre] = 'Jesus';set usuario[1][mail] = 'jesus@mail.net';set usuario[1][fechaIngreso]='2012-05-12';

set usuario[1][trololo]='yes';

set IdPorMail['jesus@mail.net'][keyUsuario]=1;

INCR login_counter[1][login] BY 0;

set producto['product1'][nombre]='aceite oliva';

set venta[1][keyUsuario]=1;set venta[1][pagada]=false;set venta[1]['product1']=5;set venta[1][pagada]=false;

Un usuario

Un producto

Una venta

Borrando

del usuario[3][mail];

del usuario[3];

drop index on usuario.pais;

drop column family usuario;

drop keyspace comercio;

Introducción a CQL

Creación de estructurasCREATE KEYSPACE tpv WITH strategy_class = 'NetworkTopologyStrategy'AND strategy_options:DC1 = 2 AND strategy_options:DC2 = 2;

CREATE COLUMNFAMILY usuarios( ID uuid PRIMARY KEY, nombre varchar, password varchar, mail varchar ) WITH replicate_on_write=true AND default_validation=varchar AND comparator=varchar;

Introducción a CQL(2)

Inserción y consultaINSERT INTO usuarios (ID, nombre, mail) VALUES (1, 'jesus', 'jesus@mail.net') USING CONSISTENCY LOCAL_QUORUM AND TTL 600;

SELECT nombre, mail FROM usuarios;

SELECT * FROM usuarios;

SELECT * FROM producto WHERE referencia in ('product1', 'product2');

Introducción a phpcassa

Después de instalar Cassandra(la distribución de Datastax Community Edition), apache2 y PHP5 ahora toca phpcassa.Simplemente nos descargamos phpcassa y lo descomprimimos en un directorio accesible por apache.Para cargarla solo tenemos que poner:require_once(__DIR__.'/../lib/autoload.php');

Introducción a phpcassa(2)

Y un poco más de código para usarla

use phpcassa\Connection\ConnectionPool;use phpcassa\SystemManager;

$sys = new SystemManager('127.0.0.1');$pool = new ConnectionPool('Comercio', array('127.0.0.1'));

// ...// ...

$pool->close();$sys->close();

Conexión

Introducción a phpcassa(2)

Consultas simples

use phpcassa\ColumnFamily;

$usuario = new ColumnFamily($pool, 'usuario');$IdPorMail = new ColumnFamily($pool, 'IdPorMail');

$user1 = $usuario->get(1);$nombre = $user1["nombre"];echo "Usuario $nombre";

$id=$IdPorMail->get($user1["mail"]);echo $id["keyUsuario"];

Introducción a phpcassa(3)

Consultas algo más complejasuse phpcassa\ColumnSlice;use phpcassa\Index\IndexExpression;use phpcassa\Index\IndexClause;

$venta = new ColumnFamily($pool, 'venta');$producto = new ColumnFamily($pool, 'producto');

$n=$venta->get_count('1');echo $n;

$index_KeyUser = new IndexExpression('keyUsuario', 1);$index_pay = new IndexExpression('pagada', false);$index_clause = new IndexClause(array($index_KeyUser ,$index_pay));$rows = $venta->get_indexed_slices($index_clause);

foreach($rows as $key => $columns) {Print_r($columns);

}

Thrift y otros clientes

Thrift es un conjunto de herramientas y librerías que permite crear interfaces genéricas con las que podemos generar todo el código necesario para utilizarlo en otros lenguajes.

thrift --gen <language> <Thrift filename>

Herramientas de administracióngráficas

● Cassandra-Cluster-AdminEl equivalente a phpMyAdminhttps://github.com/sebgiroux/Cassandra-Cluster-Admin

● OpsCenterViene en con Datastax Comunity Edition. Es el más completo, muestra estadísticas de rendimiento de los nodos...http://www.datastax.com/products/opscenter

● Cassandra-guiDe forma bastante simple permite administrar Cassandra.http://code.google.com/a/apache-extras.org/p/cassandra-gui/

¿PREGUNTAS?

Bonus Track: Supercolumnas

Creacióncreate column family pruebaSuperwith comparator=UTF8Type andkey_validation_class=UTF8Type anddefault_validation_class=UTF8Type andcolumn_type = 'Super' andsubcomparator = 'UTF8Type' andcolumn_metadata =[ {column_name: supercol, validation_class: UTF8Type}];

Bonus Track: Super columnas

Inserciónset pruebasuper[1][supercol1][col]='1-1-1';

set pruebasuper[1][supercol1][col2]='1-1-2';

set pruebasuper[key][supercol2][col2]='2-2';

set pruebasuper[esto][es][free]='style';

Bonus Track: Super columnas

Consultasget pruebasuper[1];

list pruebasuper;

Listar las filas