Programación y sistemas

Cassandra 1.x y PHP para desarrolladores SQL: El modelo de datos

Logo Cassandra

Si has trabajado con una base de datos relacional tal vez te resulte algo confuso al principio comprender el modelo de datos que usa Cassandra, intentaré ser lo más claro posible, pero si te surgen preguntas no dudes en dejarlas en los comentarios.

 

Columnas

El elemento más básico de la base de datos Cassandra es la columna, se compone de tres elementos: nombre de la columna, valor y timestamp. Os muestro un ejemplo como un array:

array(
  "nombre" => "email",
  "valor" => "webmaster@localhost.com",
  "timestamp" => time(),
);

 

Super columnas

Es el conjunto de columnas con sus correspondientes valores:

array(
  "nombre_superColumna" => array(
    "usuario1" => array(
      "nombre" => "email",
      "valor" => "webmaster@localhost.com",
      "timestamp" => time()
    ),
    "usuario2" => array(
      "nombre" => "email",
      "valor" => "email@email.com",
      "timestamp" => time()
    ),
    "usuario3" => array(
      "nombre" => "email",
      "valor" => "otroemail@otroemail.com",
      "timestamp" => time()
    ),
  ),
)

 

Familia de columnas

Es el conjunto de columnas o super columnas. Me explico:

Las column Family o  familia de columnas se puede configurar de dos maneras: como Super o como Standard. Si se elige la opción Standard, en la column family solo se podrán guardar columnas no super columnas. En cambio si la column family está configurada como Super podrá guardar, además de las columnas, las super columnas. Esta flexibilidad permite jugar con la base de datos y adaptarla a nuestras necesidades.

Ejemplo:

array(
  "name" => "ColumnFamily",
  array( "name" => "SuperColumn",
    array( "colums" )
  ),
)

Keyspace

El keyspace es nuestra base de datos, donde alojaremos todas las columFamilies que necesitemos.

Ejemplo:

array(
  "name" => "keyspace",
  array("name" => "columnFamily",
    array(
      [...]
    ),
  ),
)

5 Comentarios

  • Jose Santana 07/08/2014

    Esto es muy confuso no esta nada claro lo que explica debes abundar mas al respecto

  • Mikel 08/08/2014

    José, gracias por comentar.

    Sí, tienes razón en que puede ser algo confuso entender el modelo de datos de Cassandra, a mi también me paso; al final lo entendí a base de realizar pruebas y ver que podía o no hacer en él.

    Intentaré explicártelo más claro:

    El keyspace es nuestra base de datos; las column families son nuestras tablas, ¿Bien hasta aquí?. Las column families pueden ser configuradas de dos formas: Standard y Super.

    Si configuramos nuestra column family como Standard, en ella solo podremos guardar columns. Las columns serían como los campos de nuestras tablas en SQL. En las columns tenemos el nombre del campo y su valor, al igual que en SQL, pero además disponemos de otra propiedad: el tiempo; el momento en el que se creó esa column. Esto es necesario porque Cassandra está pensada para almacenar gran cantidad de información en poco tiempo, y con ete valor podemos diferenciar una column de otras. Esta configuración sería la más parecida a una base de datos SQL.

    Ahora lo difícil, las Super Column:

    Si configuramos nuestra column family como Super, nos permitirá guardar Super columns. Las super columns son como arrays bidimensionales, en el que por cada elemento de la primera dimensión del array, hay multitud de elementos en la segunda dimensión.

    Otro ejemplo:

    Vamos a crear un keyspace con el tablero de ajedrez. El keyspace lo llamaremos «Ajedrez», y crearemos una column family llamada «Casillas», y por supuesto la configuraremos como «Super», cada Super column que añadamos tendrá de nombre su correspondiente valor. Como sabrás el tablero de ajedrez se divide en filas que van del uno al ocho, y columnas que van de la «a» a la «h», de esta manera la primera casilla tendrá de nombre «a1» la segunda «b1», la tecera «c1», así hasta completar las 64 casillas que componen el tablero de ajedrez.

    Ahora es necesario añadir columns a las Super columns. Lo que vamos a hacer es que cada conjunto de columns represente a una pieza que esté en esa casilla, y las columns serán las propiedades de cada pieza, por ejemplo: color y movimiento.

    Para ello, el nombre del conjunto de columns será el nombre de la pieza que esté en esa casilla.Por tanto tendríamos algo así:

    «peón» => array (
    «color» => «blancas»,
    «movimiento» => «una casilla adelante»,
    )

    Espero que esto te aclare algo más las cosas. Aun así te recomiendo que sigas con la guía, en dos artículos más llegarás a Cassandra Cluster Admin, y podrás ver el modelo de datos de forma gráfica, donde estoy seguro que lo entenderás mucho mejor.

    Un saludo.

  • Crispo 08/10/2014

    Me parece que queda algo claro, pero me gustaría saber si tienes por ahí algún ejemplo de cassandra con php para aplicarle ingeniería reversa, de esa forma se me hace mas fácil entenderlo.

    Te lo agradecería mucho.

  • Mikel 08/10/2014

    Sí, creo que tengo algunas cosillas sencillas hechas, pero me llevará unos días revisarlas y ver que funcionan correctamente.

  • Mikel 26/10/2014

    Crispo, disculpa el retraso pero he estado bastante liado, y para colmo el blog ha estado dando problemas desde el jueves, al menos esto ya está solucionado.

    Te dejo un enlace con dos archivos en php que utilizo para testear nuevas versiones de cassandra:

    https://www.dropbox.com/s/hobqjfofybnvtm4/prueba_cassandra.zip?dl=0

    Dentro del zip encontrarás una versión de PHPCassa junto con una clase para abstraer la base de datos (cassandra.php), y un archivo de testeo (test.php) con varias pruebas (insertar un registro, actualizarlo, etc.).

    Espero que te sirva.

    Un saludo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Descubre más desde Interadictos

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo