Consejos para MySQL

Una serie de consejos bastante útiles para usar en MySQL, algunos ya conocidos y otros no tanto:

  • Optimiza tus queries para la caché: por ejemplo es preferible crear una condición en el WHERE que sea fecha>’$fecha’ que fecha>now(), ya que indicando que fecha exáctamente, si la query se vuelve a ejecutar puede ser rescatada de la cache.
  • Usa mismo tipo de campos para las JOINs: si los campos son de distinto tipo en las tablas, al hacer el join MySQL no es capaz de usar uno de los índices (suponiendo que estén indexados, claro).
  • No uses ORDER BY RAND(): es preferible obtener una lista de ids aleatorios mediante código y luego obtener los registros por esos IDs.
  • Evita SELECT *: cuantos más campos leas, más información recuperas y más lentas serán las queries.
  • Usa ENUM en vez de VARCHAR: cuando uses un campo para un número limitado de strings es preferible usar ENUM ya que internamente se usa un tinyint.
  • Utiliza PROCEDURE ANALYSE(): comprobará tu tabla y te recomendará cambios para mejorar su optimización.
  • Usa campos de longitud fija: hará que la tabla sea más rápida.

Más consejos interesantes en el post original.

Top 20+ MySQL Best Practices

Vía / @jlantunez

Igbinary: serializador avanzado para PHP

Igbinary es una librería (necesita ser instalada) que sustituye el serialize de PHP comprimiendo las estructuras PHP en datos binarios. Tiene ratios de compresión mucho más altos, aunque en tamaños pequeños es más lento que el serialize original.

Permite los mismos tipos de datos que el serializer de PHP: null, bool, int, float, string, array y objetos.

Igbinary

Lecciones sobre escalabilidad de eBay

El eBay Distinguished Architect, Randy Shoup, ofreción una presentación sobre la escalabilidad de eBay que es bastante interesante. Lógicamente, pocos de nosotros nos vamos a encontrar con una décima parte de lo que ellos tienen:

  • 89 millones de usuarios activos en el mundo
  • 190 millones de elementos en 50.000 categorías
  • 8.000 millones de URLs solicitadas cada día
  • 70.000 millones de operaciones de lectura/escritura cada día
  • 50TB de datos nuevos cada día
  • 50PB de datos analizados cada día

Pero las lecciones que nos ofrece son bastante interesantes, de las cuales me gustaría destacar:

  • Particionalo todo: si no puedes dividirlo no puedes escalarlo. Divídelo todo en elementos manejables separados por funcionalidad y tipo de datos.
  • Asincronismo: conecta componentes independientes mediante una cola de eventos.
  • Todo falla: monitorizalo todo, porque seguro que falla
  • Siempre hay cambios: diseña de forma que puedan añadirse nuevas funcionalidades
  • Automatízalo todo: aunque en este caso el autor se refiere a procesos de aprendizaje, yo lo enfocaría a que se eviten procesos manuales

eBay’s Challenges and Lessons: from Growing an eCommerce Platform to Planet Scale

Vía / High Scalability

¿El futuro de Javascript?

El creador de Javascript habla del futuro que tendrá, al menos ECMA. Una de las opciones que indica es la posibilidad de añadir propiedades a objetos e indicar setters y getters (indicar y recuperar el valor).

Object.defineProperty(obj, "length", {  
  get: function() {  
    return this.computeLength();  
  },  
  set: function(value) {  
    this.changeLength(value);  
  }  
}); 

ECMA Harmony and the Future of JavaScript

Simular paquetes en PHP

Interesante script que nos permite cargar paquetes al estilo Java desde PHP. Aunque ya existen los phar, que es un paquete de PHP, esto puede resultar una posibilidad o al menos un método a tener en cuenta para importar varios archivos simultáneamente.

read())) 
        {
            /* Reject parent, current directories and sub directories */
            if(($file == '.')  ||
               ($file == '..') ||
               (is_dir($d->path . "/" . $file)))
            {
                continue;
            }
 
            require_once($basePath . $importFilePath . "/" . $file);
        }
    } else {
        /* If a single file is specified */
        $importFile = str_replace(".", "/", $classPath) . ".php";
    	require_once($basePath . $importFile);
    }
}
 
?>

Simulating Packages in PHP

OQGraph: motor MySQL que permite jerarquías

Open Query Graph (OQGraph) es un plugin para MySQL, MariaDB y Drizzle que permite trabajar con jerarquías o grafos en nuestra BD.

Acaba de ser sacada a la luz, pero puede sernos muy útil para desarrollos de redes sociales: cada nodo del grafo es un usuario. También podríamos utilizarlo para estructuras jerarquizadas: padre, hijos, nietos, …

OQGraph

Vía / PHP Freaks