|

MemcacheQ: cola de mensajes mediante Memcached

MemcacheQ es una interesante implementación de Memcache que permite realizar una cola de mensajes que luego podremos utilizar en nuestras aplicaciones de formas variadas, por ejemplo, si tenemos un proceso largo que queremos dividir y realizar partes en background, podemos crear una cola de mensajes e ir añadiendo distintas tareas para luego ir recuperándolas una a una.

MemcacheQ permite crear distintas colas y cuando se recupera un valor de la cola se borrará de esta. Imaginemos que tenemos un blog en el que cuando se publica un post se deben realizar una serie de tareas complejas, y no queremos tener a WordPress o Drupal o lo que usemos esperando para dar el OK de post publicado, lo que haríamos sería añadir un mensaje en la cola y luego con una tarea usando el cron, ir ejecutándolas una a una:

/* Método de publicación */
// Conectamos al servidor 
$memcache_obj = memcache_connect('memcacheq_host', 21201);
// Añadimos el mensaje a la cola
memcache_set($memcache_obj, /* id_cola */ 'tareas_del_blog', /* mensaje */ $id_post, 0, 0);
memcache_close($memcache_obj);
/* Método del cron */
// Conectamos al servidor 
$memcache_obj = memcache_connect('memcacheq_host', 21201);
$id_post = memcache_get($memcache_obj, 'tareas_del_blog');
tarea_enorme($id_post);
memcache_close($memcache_obj);

MemcacheQ

Vía / PDPDeveloper.org

|

Neo4j Gets Geo Support

I guess that’s what kept the Neo Technology — the guys behind Neo4j — busy lately: The Neo4j Spatial project supports the use of geographic data by providing utilities that simplify and support advanced capabilities like: Storage of geographic features like points, lines and polygons as graphs Indexing and querying based on location with R-trees, Q …

Post original

|

NoSQL databases: 10 Things you Should Know About Them

NoSQL databases: 10 Things you Should Know About Them: 5 pros and 5 cons by Guy Harrison: Five advantages of NoSQL Elastic scaling Big data Goodbye DBAs (see you later?) Economics Flexible data models Five challenges of NoSQL Maturity Support Analytics and business intelligence Administration Expertise A few amendments though: Elastic scaling: part …

Post original

|

NoSQL Guide for Beginners

NoSQL Guide for Beginners: Alexandre Porcelli has a great post for NoSQL beginners: one of the most frequent question that people use to ask me about nosql is: what is the best nosql tool that enables me start with using my programming language (java, .net, php, python, etc..)? its almost impossible to have a quick answer ‘cos it involves many thin …

Post original

|

What is HyperGraphDB?

Recently we’ve seen a lot of activity in the graph database world. Better understanding the space will help us make smarter decisions, so I’ve decided to reach out to the main players in the market and run a series of interviews about their projects …

Post original

|

NoSQL Databases and Security

NoSQL Databases and Security: Jeff Darcy writes about NoSQL systems’ security (actually the lack of): Most NoSQL stores have no concept of security. […] Mostly it falls into two categories: encryption and authentication/authorization (collectively “a …

Post original

|

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