Presentacion sobre cassandra

21
Cassandra [Parte práctica] Base de Datos NoSQL clave/valor ___________________________________________________________________________ Jesús Rodríguez Pérez

description

Rapida presentación sobre cassandra

Transcript of Presentacion sobre cassandra

Page 1: Presentacion sobre cassandra

Cassandra[Parte práctica]

Base de Datos NoSQL clave/valor___________________________________________________________________________

Jesús Rodríguez Pérez

Page 2: Presentacion sobre cassandra

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.

Page 3: Presentacion sobre cassandra

Diseño de una BD NoSQL

Page 4: Presentacion sobre cassandra

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;

Page 5: Presentacion sobre cassandra

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

Page 6: Presentacion sobre cassandra

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

Page 7: Presentacion sobre cassandra

Insertando datos

set usuario[1][nombre] = 'Jesus';set usuario[1][mail] = '[email protected]';set usuario[1][fechaIngreso]='2012-05-12';

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

set IdPorMail['[email protected]'][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

Page 8: Presentacion sobre cassandra

Borrando

del usuario[3][mail];

del usuario[3];

drop index on usuario.pais;

drop column family usuario;

drop keyspace comercio;

Page 9: Presentacion sobre cassandra

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;

Page 10: Presentacion sobre cassandra

Introducción a CQL(2)

Inserción y consultaINSERT INTO usuarios (ID, nombre, mail) VALUES (1, 'jesus', '[email protected]') USING CONSISTENCY LOCAL_QUORUM AND TTL 600;

SELECT nombre, mail FROM usuarios;

SELECT * FROM usuarios;

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

Page 11: Presentacion sobre cassandra

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');

Page 12: Presentacion sobre cassandra

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

Page 13: Presentacion sobre cassandra

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"];

Page 14: Presentacion sobre cassandra

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);

}

Page 15: Presentacion sobre cassandra

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>

Page 16: Presentacion sobre cassandra

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/

Page 18: Presentacion sobre cassandra

¿PREGUNTAS?

Page 19: Presentacion sobre cassandra

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}];

Page 20: Presentacion sobre cassandra

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';

Page 21: Presentacion sobre cassandra

Bonus Track: Super columnas

Consultasget pruebasuper[1];

list pruebasuper;

Listar las filas