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

|

Escalar aplicaciones web usando HMVC

Hierarchical-Model-View-Controller (HMVC) es una variante del MVC que se forma mediante una colección de estos, siendo cada MVC independiente de los otros, y siendo un aspecto importante la reutilización de código, por lo que la localización física de los MVC no es importante. El HMVC es muy efectivo a la hora de testear módulos de la aplicación independientes, y una buena opción para escalar nuestra aplicación.

El tutorial nos muestra cómo usar Kohana para llevar a cabo una aplicación que implemente HMVC. Está claro que una aplicación así puede ser algo más difícil de diseñar y que no siempre puede que necesitemos este grado de escalabilidad.

Scaling Web Applications with HMVC

Drag & Drop de ficheros en Firefox

Esto puede dar mucho juego, pero tan solo funciona en Firefox 3.6+, por lo que no podemos depender de este script en nuestras aplicaciones. A partir de la versión 3.6, Firefox permite realizar drag&drop de ficheros en nuestra web y mediante Javascript poder obtener los ficheros o textos que se arrastren contra un elemento específico.

Su uso es muy sencillo:

dropzone.addEventListener("drop", function(event) {
  event.preventDefault();
  // Ready to do something with the dropped object
  var allTheFiles = event.dataTransfer.files;
  alert("You've just dropped " + allTheFiles.length + " files");
}, true);

Y dispone de una API tanto para el drag&drop como para los ficheros.

Recomiendo ver el código fuente de este ejemplo para tener una librería que te hace todo el trabajo.

file drag and drop in Firefox 3.6

Enlaces rápidos (16-02-2010)

Unos cuantos enlaces rápidos, con temática centrada en NoSQL

|

HTML 5 Web SQL Database

Está claro que el HTML5 nos ofrece muchas posibilidades, pero una de las opciones que más me ha gustado es la de tener bases de datos locales.

Para abrir una conexión deberíamos ejecutar lo siguiente:

db = openDatabase("ToDo", "0.1", "A list of to do items.", 200000);

Y para la ejecución de sentencias hay que echar mano de transacciones:

db.transaction(
  function(tx) {
     tx.executeSql("SELECT * FROM ToDo", [],
        function(tx, result) {
           for(var i = 0; i < result.rows.length; i++) {
             document.write('' + result.rows.item(i)['label'] + '
'); } }, null); } );

Bastante sencillo y ofrece muchas posibilidades en nuestras aplicaciones

HTML 5 Web SQL Database

Vía / DZone

Librería oEmbed para CodeIgniter

Si el otro día hablaba de oEmbed, hoy voy a hablar de una librería para CodeIgniter que nos puede ser útil para aquellos que desarrollamos usando este framework.

Por ahora detecta los siguientes servicios:

  • YouTube
  • Viddler
  • Qik
  • Revision3
  • Vimeo
  • Hulu

Se echa en falta alguno como Flickr, pero es un principio y nosotros mismos podemos ampliar la librería. Tampoco estaría mal que no fuera necesario indicar el servicio, sino únicamente la URL.

OEmbed-Library

Vía / @xoan

Facebook desarrolla XHP

Si el otro día Facebook nos sorprendía con HipHop, hoy me entero que también han desarrollado una extensión para PHP llamada XHP, la cual permite añadir XML (o HTML) en el código PHP y que sea una expresión válida. ¿Qué quiere decir esto?, pues que no es necesario hacer tratar el HTML como string o usar ?> … <?php para añadir HTML en nuestros scripts.

$href = 'http://www.facebook.com'; 
echo <a href={$href}>Facebook</a>;

Además escapa automáticamente el contenido de las variables para evitar vulnerabilidades:

<?php
echo '<div>Hello '.htmlspecialchars($_GET['name']).'</div>';
<?php
echo <div>Hello {$_GET['name']}</div>

También ofrece la posibilidad de definir elementos XML, sus atributos o su estructura.

Tengo mis dudas sobre su rendimiento, pero pensando en que ellos “compilan” el código PHP, al final no les afectará en rendimiento.

XHP

Vía / PHPDeveloper.org

Diferentes técnicas de cacheado

Otro interesante artículo sobre caché y los distintos modos de poder llevarlo a cabo. Para aquellos que quieran añadir caché a su sistema y ahorrar recursos y no sepan qué hacer, puede venirles muy bien este wiki y el listado de tipos de cache que hay:

  • Caching Proxy Servers
  • Content Delivery Networks
  • Cachear páginas completas
  • Cachear páginas parciales
  • Cabeceras HTTP
  • Memoria compartida (memcache, APC)
  • Cache en la BD

Web application/Caching

Vía / DZone

Memcached y cosas que se pueden hacer con él

Interesante artículo en el que se nos explica qué es memcached (por si alguien no lo conoce), nos ofrece un ejemplo de clase que utiliza memcached, nos muestra una presentación sobre Facebook y memcached, y nos explica qué usos se le pueden dar a memcached:

  • Restringir el acceso a spammers
  • Detectar usuarios activos/inactivos conectados
  • Crear webs escalables
  • Evitar cacheado de contenido erróneo
  • Almacenar datos triviales sin usar DB

Memcache

También recomiendo leer su post: MySQL Query Cache, WP-Cache, APC, Memcache – What to choose

Memcached and “N” things you can do with it – Part 1

Vía / PHPDeveloper.org

PHP-FPM: alternativa a FastCGI

PHP-FPM (FastCGI Process Manager) es una alternativa a PHP FastCGI que incluye algunas características adicionales como:

  • Administración de procesos, pudiendo pararlos y arrancarlos
  • Posibilidad de empezar procesos con diferente uid, gid, chroot, entorno o php.ini
  • Logs
  • Reinicio de emergencia
  • Soporte para upload acelerado
  • Slowlog
  • fastcgi_finish_request(), una función especia que ternima la petición, envía los datos al cliente (flush) y continúa realizando otra función (codificación de vídeo, proceso de estadísticas, …)

PHP-FPM

Gracias David por el aviso