Qwench: versión opensource de StackOverflow

Qwench es una versión opensource de StackOverflow, para que nos la podamos descargar e instalar en nuestro servidor.

Entre las características que ofrece nos encontramos con:

  • Permite a los usuarios escribir preguntas y respuestas
  • Sistema de puntos similar a StackOverflow
  • Posibilidad de escribir artículos de conocimiento básico
  • Posibilidad de restringir el acceso a usuarios registrados únicamente
  • Layout CSS
  • Funciona en la mayoría de los navegadores

Qwench

Enlaces rápidos (08-12-2009)

Hacía tiempo que no ponía enlaces rápidos, pero siguen siendo interesantes:

Sphinx 0.9.9

Por fin ha salido la versión 0.9.9 de Sphinx, la cual llevaba en RC2 la tira de tiempo. Entre las novedades trae SphinxSE, un motor de MySQL. Además corrige más de 40 bugs. Otro aspecto importante es que Sphinx ha obtenido unos puertos oficiales de la IANA: 9312 para el API nativo y 9306 para SphinxQL.

Sphinx 0.9.9

Vía / MySQL Performance Blog

XHProf: alternativa a XDebug desarrollada por Facebook

XHProf es una librería de PHP desarrollada por Facebook y liberada en marzo de 2009 que nos facilita el debug en nuestras aplicaciones.

Los datos que devuelve son muy interesantes:

  • Número de llamadas de una función a otra
  • Tiempo de ejecución de una función cuando es llamada desde otra
  • Tiempo de CPU de una función cuando es llamada desde otra
  • Diferencia en el uso de memoria de PHP en una función cuando es llamada desde otra

Una alternativa a XDebug muy interesante.

XHProf

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