Programación y sistemas

Cassandra 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 Simple. Si se elige la opción Simple, 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(
[…]
),
),
)

8 Comentarios

  • mobius 27/03/2012

    Hola. Estas haciendo un buen manual esta bien explicado esto es lo que estaba buscando terminalo pronto 🙂 sí puedes una consulta me han dejado desarrollar un sistema de planilla lo estoy haciendo en postgres pero y en mis ratos libres hacerlo en cassandra tú crees que es factible

  • Mikel 27/03/2012

    Muchas gracias mobius. Hacia mediados o finales de abril volveré a escribir sobre Cassandra.

    Sobre tu proyecto: si esperas que tu aplicación vaya a tener un uso muy alto de base de datos, hasta cierto punto si sería interesante usar una BD no-sql. El inconveniente es que Cassandra consume mucha RAM, concretamente viene configurada para utilizar la mitad de la RAM de la que disponga el servidor: si el servidor tiene 4GB, Cassandra usará 2GB. También hay que tener en cuenta que Cassandra funciona con Java y que su recolector de basura requiere también cierta cantidad de RAM.

    Aun así para un sistema de plantillas lo lógico es crearlas como archivos, por ejemplo Smarty funciona así. De esta manera podrás utilizar un sistema de caché para cachear el código html resultante de cada una de las páginas de tu aplicación.

    Espero que te haya sido útil.

    Un saludo.

  • mobius 27/03/2012

    Gracias por responder, pero no se si me exprese bien pero no es plantilla si no sistema de planilla pagos a los trabajadores 🙂 y tiene que hacer calculos reportes estadistica y quiero hacerlo como proyecto personal ojala retomes pronto el tutorial jeje nos vemos saludos

  • Mikel 28/03/2012

    jajajaja, perdoname no había oído nunca la palabra planilla xD. Lo mejor sería utilizar una base de datos relacional, Cassandra te complicaría mucho el proyecto.

    Un saludo.

  • mobius 28/03/2012

    Seria muy complicado? y porque, yo me refiero a esos tipos de proyectos donde se tienen que hacer calulos esdadistica pero con mucho trafico de usuariosy porque complicarme tan dificil es el cassandra gracias por tu respuesta

  • Mikel 29/03/2012

    Cassandra se creó principalmente para guardar grandes cantidades de información, no es una base de datos relacional como MySQL, no podrás relacionar tablas tan fácilmente en Cassandra.

    Además, aunque en la última versión ya han implementado un pequeño SQL (UPDATE, INSERT, etc) este es aun muy básico, con lo que para insertar, actualizar o eliminar registros es necesario crear la clase y los métodos correspondientes. Hay librerías que reducen muchísimo este trabajo y ya ofrecen la mayoría de métodos para trabajar con Cassandra (por ejemplo phpCassa), aun así la creación de una clase con los métodos específicos para trabajar con las Column Families que tu crees, es casi impresncidible.

    En el proyecto en el que estoy trabajando también tenemos que procesar bastantes datos para mostrar gráficas e informes, pero el resultado de los cálculos los guardamos en MySQL (los datos en sí los guardamos en Cassandra).

    El cálculo de estos datos se realiza en un script de php y una sola vez cuando corresponde (no se modifican, ni se vuelven a calcular), tal vez tu necesites realizar cálculos más habitualmente. Con el proyecto que te comento, disponemos de varias opciones para evitar el exceso de carga del servidor, principalmente CPU, una es trasladar el script que calcula las estadísticas a otro servidor, de tal forma que solo haya un servidor exclusivamente para realizar los cálculos. Otra opción es añadirle un sleep(1) al script cada cierto número de registros de tal forma que el servidor no se ralentice a causa del procesamiento de los datos; el único inconveniente de esta opción es que si son muchos datos a procesar, el calculo de los datos puede durar hasta horas.

    Espero no haberte complicado más el asunto xD.

    Un saludo.

  • mobius 13/04/2012

    Hola Man gracias por tus respuestas entonces por ahora va ser muy difícil hacer ese proyecto en cassandra. Nos han dejado otro proyecto esta ves es de rastreo satélital un gps que envía las coordenadas a mi servidor y este tendría que guardar las coordenadas en una base de datos y como te podrás imaginar enviar cada 10 segundos las coordenadas mi base de datos va a a crecer muy rápido tú crees que en este proyecto sí pueda implementarlo con cassandra 🙂

  • Mikel 13/04/2012

    Ambos proyectos puedes hacerlos con Cassandra como DB, por eso no hay problema, pero será como ponerle el motor de un Ferrari a una moto.

    Para tu nuevo proyecto dependerá de la cantidad de información que recibas del gps. Sí son grandes cantidades de información, sí te podría venir bien Cassandra. Si solo envía una coordenada lo más simple es utilizar progres o mysql.

    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