Vous êtes sur la page 1sur 21

Cassandra

[Parte prctica]

Base de Datos NoSQL clave/valor


___________________________________________________________________________

Jess Rodrguez Prez

Modelo de datos de Cassandra


Antes de empezar con el diseo de una base datos en cassandra debemos al
menos repasar los conceptos bsicos 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. Sera el equivalente a una BBDD en el modelo relacional.
ColumnFamily: puede contener varias columns. Sera equivalente a una
tabla en el modelo relacional. No todas las filas de una ColumnFamily tienen
el porque tener el mismo nmero de columnas. Cada fila se identifica por su
row key
Column: unidad bsica de almacenamiento. Estn compuestas por name,
value y timestamp.
SuperColumn: son columnas que pueden almacenar otras columnas. No se
suelen utilizar.
Ser necesario tambin conocer cmo funcionan los ndices ya que estos nos
permiten hacer consultas ms complejas.

Diseo de una BD NoSQL

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

Una vez creado la indicamos que vamos a


trabajar con dicho keyspace.
use Comercio;

Creando estructuras(2)
Una familia de columnas
create column family usuario with comparator=UTF8Type and
key_validation_class=IntegerType and
default_validation_class=UTF8Type and
column_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}
];

Consultando datos
Row key
ColumnFamily

Column

get usuario[1][mail];
get usuario[1];
list usuario;
get venta where pagada=false;
list producto limit 3;

Solo si hemos
creado el
ndice.

Insertando datos

set usuario[1][nombre] = 'Jesus';


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

Un usuario

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

Un producto

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;

Una venta

Borrando
del usuario[3][mail];
del usuario[3];
drop index on usuario.pais;
drop column family usuario;
drop keyspace comercio;

Introduccin a CQL
Creacin de estructuras
CREATE 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;

Introduccin a CQL(2)
Insercin y consulta
INSERT 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');

Introduccin a phpcassa
Despus de instalar Cassandra(la distribucin
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');

Introduccin a phpcassa(2)
Y un poco ms de cdigo para usarla
Conexin
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();

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

Introduccin a phpcassa(3)
Consultas algo ms complejas
use 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
libreras que permite crear interfaces
genricas con las que podemos
generar todo el cdigo necesario para
utilizarlo en otros lenguajes.
thrift --gen <language> <Thrift filename>

Herramientas de administracin
grficas

Cassandra-Cluster-Admin
El equivalente a phpMyAdmin
https://github.com/sebgiroux/Cassandra-Cluster-Admin

OpsCenter
Viene en con Datastax Comunity Edition.
Es el ms completo, muestra estadsticas de rendimiento de
los nodos...
http://www.datastax.com/products/opscenter

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

Para seguir aprendiendo

Tutorial sobre CQL


Una serie de tutoriales de un blog
Grupo de NoSQL de google
Tutorial sobre Hector
Blog
Post sobre cassandra en C++
Casos prcticos de clientes
NosqlTape (entrevistas)
Videotutoriales de Cassandra

PREGUNTAS?

Bonus Track: Supercolumnas


Creacin
create column family pruebaSuper
with comparator=UTF8Type and
key_validation_class=UTF8Type and
default_validation_class=UTF8Type and
column_type = 'Super' and
subcomparator = 'UTF8Type' and
column_metadata =[
{column_name: supercol,
validation_class: UTF8Type}
];

Bonus Track: Super columnas


Insercin
set 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


Consultas
get pruebasuper[1];

Listar las filas


list pruebasuper;

Vous aimerez peut-être aussi