phpcassa: librería PHP para Cassandra

Aunque (afortunadamente) Cassandra ya no está tan de moda y en boca de todos, sigue siendo una herramienta a tener en cuenta a la hora de desarrollar un proyecto en el que se calcule un elevado nivel de datos. Para los que usamos PHP nos vendrá muy bien esta librería que nos facilitará el trabajo y que además es compatible con TimeUUID y SuperColumnFamily:

insert('1', array('email' => 'email@correo.com', 'password' => 'test'));
// Querying:
$users->get('1'); // array('email' => 'email@correo.com', 'password' => 'test')
$users->multiget(array('1', '2')); // array('1' => array('email' => 'email@correo.com', 'password' => 'test'))
// Removing:
$users->remove('1'); // removes whole object
$users->remove('1', 'password'); // removes 'password' field
// Other:
$users->get_count('1'); // counts the number of columns in user 1 (in this case 2)
$users->get_range('1', '10'); // gets all users between '1' and '10'
?>

phpcassa

Enlaces rápidos (04-06-2010)

Más enlaces rápidos sobre NOSQL, para variar:

Enlaces rápidos (09-04-2010)

Siguendo con el tema NOSQL, entre otras cosas…

Enlaces rápidos (30-03-2010)

Más sobre NoSQL y otras cosillas

|

Pandra: librería PHP para trabajar con Cassandra

Para aquellos que necesiten Cassandra en sus proyectos o quieran trastear con él, les vendrá muy bien esta librería basada en CRUD. Soporta las estructuras de datos ofrecida por Cassandra y sus tipos de datos:

  • Column: clave-valor y el timestamp
  • Column Family: un array asociativo que contiene columnas, el cual sólo debe tener un clave paterna
  • Super Column: practicamente igual que la Column Family, sin embargo tiene una Super Column Family como padre. Puede haber varias Super Columns para una clave
  • Super Column Family: contenedor de Super Column
  • Key ID: clave única
  • Key Space: nivel más alto, sería el equivalente a la base de datos

Un ejemplo de código sería el siguiente:

class Address extends PandraSuperColumn {
    public function init() {
        $this->addColumn('city', 'string');
        $this->addColumn('street', 'string');
        $this->addColumn('zip', 'int');
    }
}

class Addresses extends PandraSuperColumnFamily {
    public function init() {
        $this->setKeySpace('Keyspace1');
        $this->setName('Super1');
        $this->addSuper(new Address('homeAddress'));
        $this->addSuper(new Address('workAddress'));
    }
}

$keyID = 'kenlogin';

$addrs = new Addresses();
$addrs->setKeyID($keyID);

// home address
$homeAddr = $addrs->getColumn('homeAddress');
$homeAddr->setColumn('city', 'san francisco');
$homeAddr->setColumn('street', '1234 x street');
$homeAddr->setColumn('zip', '94107');

// work address
$workAddr = $addrs->getColumn('workAddress');
$workAddr->setColumn('city', 'san jose');
$workAddr->setColumn('street', '9876 y drive');

// custom labelled supercolumn
$customAddr = new Address(''customAddress');
$customAddr->setColumn('city', 'another city');
$addrs->addSuper($customAddr);

// Saving via Column Family
$addrs->save();

// Saving via Super Column,
$customAddr->setColumn('city', 'another city');
$customAddr->save();

Pandra

Instalar Cassandra en Ubuntu

Con tanta noticia de Cassandra y Twitter, me ha dado por instalar Cassandra en local. No soy un experto en Ubuntu, más bien soy un poco torpe en algunas cosas de administración, pero bueno, si yo lo he conseguido ¿por qué no ayudar a aquellos que pueden ser tan torpes como yo?

Lo primero que hay que hacer es bajarse la última versión: http://cassandra.apache.org/#download

Una vez descomprimido y renombrada la carpeta a cassandra, lo muevo al directorio /opt:

sudo mv cassandra /opt/

Luego creamos unos cuantos directorios necesarios para la aplicación:

sudo mkdir -p /var/lib/cassandra/{commitlog,data,callouts,staging}
sudo mkdir /var/log/cassandra
sudo chmod -R 777 /var/lib/cassandra/

Creamos el fichero /var/log/cassandra/system.log y le damos permisos de escritura:

sudo chmod 777 /var/log/cassandra/system.log

Bueno, pues esto ya está instalado, ahora solo falta ejecutar Cassandra y luego probarlo con la aplicación CLI:

/opt/cassandra/bin/cassandra -f &
/opt/cassandra/bin/cassandra-cli -host localhost -port 9160

Podéis hacer pruebas con los ejemplos que salen aquí.

Actualizado: Armonth me indica un truco que simplifica la creación de los directorios, muchas gracias.

Enlaces rápidos (15-03-2010)

Más enlaces rápidos, sobre todo basados en NoSQL (por favor, que no lo conviertan en un término que usen los guays y los gurús…)

Me hizo gracia esta frase: “NoSQL is for very smart people who need a very sharp knife.” espero un día cumplir ambas condiciones 🙂

Enlaces rápidos (05-03-2010)

Voy a tener que cambiar el título de estos posts por “Enlaces rápidos sobre NoSQL”, porque al final es sobre lo que más enlazo.

Comparativa de Data Stores

Entendiendo por Data Stores los sistemas de almacenamiento tanto RDBMS o NoSQL, el PDF que referencio compara los distintos tipos de data stores que hay:

  • Almacenamientos clave-valor
  • Almacenamiento de documentos
  • Similares al BigTable de Google
  • BD relacionales escalables

De cada tipo de data store explica cuales son y que características tiene, y por último hace comparativa entre ellos. También nos dice posibles ejemplos de uso:

  • Sistemas clave-valor: útil cuando los datos almacenados se basan en el acceso de información mediante un ID (sin joins) y que se actualiza pocas veces o se actualiza siempre de la misma manera.
  • Almacenamiento de documentos: cuando la información almacenada depende de varios campos (por ejemplo un stock de vehículos).
  • Sistemas basados en BigTable: se puede tratar de aplicaciones similares a los almacenamientos documentales, pero con la diferencia de que es necesario un elevado número de registros.
  • RDBMS escalables: cuando nuestra aplicación necesita de relaciones entre distintos datos y nuestro servidor se queda corto para aguantar el volumen de datos o de transacciones.

Me gustaría destacar que entre estos data store, se encuentra Cassandra, proyecto open source de Facebook, que ahora es un proyecto de Apache y que Twitter va a usar para sustituir MySQL.

High Performance Scalable Data Stores