Optimizaciones para MySQL

Ya el otro día hablábamos sobre las optimizaciones que podríamos realizar en nuestro entorno LAMP referente a Apache y PHP. Ahora, la gente de IBM nos vuelve a ofrecer otro artículo en el que nos indican cosas que hacer para mejorar el rendimiento de nuestra base de datos MySQL.
Las mejoras que se pueden realizar se dividen en tres conceptos: optimizar la máquina, configurar el proceso de MySQL y optimizar las querys. El servidor de base de datos nos puede dar problemas ya que una base de datos consume muchos recursos, lo cual se puede solucionar en muchos casos mejorando la CPU y la velocidad de disco duro, y si no, aumentar la RAM, cosas lógicas y normales.
Para la optimización de MySQL y el tratamiento de las querys lentas, se pueden realizar varias acciones. La primera de ella sería tener un log de qué querys emplean mucho tiempo en ejecutarse, para lo cual deberemos cambiar en la configuración de MySQL el parámetro log-slow-queries para que se guarden qué querys tardan más de cierto tiempo.
Otro tema importante es cachear las querys que se realizan, para ello hay dos formas, la que nos cuentan en el artículo, que es mediante configuración, y la otra que es mediante código, porque si lo realizamos mediante código podemos controlar mejor que querys cacheamos.
Al igual que ocurre en Apache, en MySQL es importante controlar el número máximo de conexiones, el timeout y el número máximo de errores, ya que si configuramos mal estos valores nos podemos encontrar con rendimientos poco deseados.
En total, una serie de recomendaciones muy buenas que debemos tener en cuenta cuando nuestra aplicación web requiere ajustar los recursos al máximo.
Tuning LAMP systems, Part 3: Tuning your MySQL server

links for 2007-06-08

View: herramienta colaborativa

view.pngView es una herramienta basada en web que nos permite conectarnos con otras personas y realizar nuestros proyectos de forma conjunta. Para ello, las herramientas colaborativas que nos ofrece son chat, pizarra y compartir escritorio entre otras.
view2.png
Disponible una versión gratuita y otras dos premium, tan solo es necesario un navegador y el Flash para poder empezar a trabajar. Con funcionalidades parecidas al PowerPoint, podremos subir ficheros, marcar contenidos importantes, invitar a amigos a participar, guarda la sesión automaticamente y muchas otras funcionalidades.
View
Vía / PHPDeveloper.org

Novedades para Drupal 6

drupal.pngDrupal es uno de los mejores CMS que existen en la actualidad, y cada nueva versión incluye novedades bastante importantes, que suelen ir más allá de un cambio estético.

La futura versión 6 nos va a traer interesantes cambios que nos va a ayudar bastante en nuestros desarrollos:

  • Los módulos podrán personalizarse mediante ficheros de plantillas sin necesidad de crear ningúna función. Drupal automáticamente seleccionará la plantilla del directorio en la que se encuentran.
  • Varias mejoras en la internacionalización: las páginas de configuración del idioma se separan de la interfaz de traducción. Posibilidad de indicar prefijos del path o dominios para diferentes lenguajes. Las entradas pueden tener asociado un lenguaje.
  • Mejoras en los logs, dando la posibilidad de personalizar esta funcionalidad directamente en nuestros módulos. Por ejemplo, podrás enviar un email si alguien deja un comentario, siguiendo estado conectado con el sistema de logs.
  • Mejoras de usabilidad, como recordad a usuarios anónimos en los comentarios y muchas otras más.
  • Mejoras en el sistema de menú, es más sencillo de entender y mantener y requiere menos memoria que el actual de Drupal 5.
  • Mejoras en el instalador: posibilidad de importar traducciones para módulos activos de forma automática, configuración de las credenciales de administrador, zona horaria y clean URLs.
  • Asociación de ficheros a usuarios y no a nodos, para poder así ser reutilizados por el usuario en distintos nodos.
  • Rediseño de la abstracción de la base de datos, facilitando la migración a otras bases de datos diferentes a MySQL.
  • Agregador de Javascript, complementando el similar para CSS que hay en Drupal 5.

Más información

Drupal 6: status update

Drupal 6 status update

links for 2007-06-07

Más internacionalización mediante PHP

La internacionalización es un tema del que ya he hablado con anterioridad, pero para mí es algo fundamental, quizás sea por la cantidad de proyectos en los que he trabajado que necesitaban de esta funcionalidad, a veces, para mi gusto, mal tratada.
En el anterior artículo ya hablamos de arrays asociativos, un array con clave el código del texto que deseamos traducir (un buen uso sería el mismo texto en el idioma inicial), y con valor el texto traducido. Debería haber un texto para cada idioma y luego al inicio de la aplicación una asignación del array correspondiente para el idioma.
En el artículo que comentamos nos explican cómo realizarlo mediante el uso de la funciones gettext, una interfaz de programación NLS, y el uso de ficheros PO (un fichero de texto plano que contiene el texto original y el traducido).
Sobre este método me da que pensar sobre su rendimiento. PHP al ser interpretado, todo lo que se meta, se lee y se interpreta. Si no se usa caché para los php, es mejor no introducir código innecesario en nuestros scripts. Según parece, el array asociativo con las traducciones se leerá completo en cada ejecución, cuando en algunos casos no será necesario traducir ni la mitad de las palabras.
En algunos proyectos el diccionario era bastante extenso, por lo que me planteo posibles soluciones para optimizar el código. Una posibilidad es dividir en diccionario por grupos independientes, pero este método hace que gestionar los diccionarios sea una labor más complicada. La otra solución es una carga inicial en cada script de las palabras estrictamente necesarias, habría que evaluar si el tiempo de carga de las palabras necesarias (para lo cual es necesario una operación inicial) es inferior al tiempo de carga completo (tan solo leer e interpretar). ¿Qué pensáis vosotros?
Give your web app international appeal

Novedades en Movable Type

mt4.pngSix Apart ha anunciado la salida de la versión 4 de su gestor de blogs Movable Type, habiendo una gran novedad, que para después del verano saldrá a la luz una versión open source basada en la versión 4 de Movable Type.

El paso a una versión open source es debido a la necesidad de no perder mercado (frente a otros como WordPress) y a la petición de los usuarios de disponer de tal tipo de versión para poder incluir sus mejoras.

Las novedades que incluye la versión 4 son las siguientes:

  • Rediseño de la interfaz
  • Fácil de instalar y de empezar a trabajar.
  • Obtener un resumen de la actividad del blog, ya sea en contenido como en contribuciones.
  • Facilidad para insertar texto, fotos, ficheros y más con el editor WYSIWYG.
  • Gestor de fotos y ficheros.
  • Creación de páginas estáticas que hereden el diseño del blog.
  • Sistema de registro de usuarios para autenticación de lectura y comentarios.
  • Soporte para OpenID
  • Añadir posts de diferentes blogs en un único blog.
  • Opciones extendidas para archivar y mostrar contenido

Movable Type 4 y Movable Type Open Source (MTOS)

Vía / Loogic

links for 2007-06-06

|

Novedades en Javascript 1.8

Mientras se sigue con el desarrollo de la versión 3 de Firefox, podemos ir viendo que novedades traerá la versión 1.8 de Javascript. Las novedades son muy interesantes, pero creo que necesitarán de un cambio de modo de pensar en Javascript, ya que es algo a lo que no estamos acostumbrados.

Notación Lambda

La notación Lambda nos permite declarar funciones que devuelvan datos sin necesidad de llaves ({..}), ni de devolver directamente el resultado con return.

Por ejemplo, la siguiente función:

function(x) { return x * x; }

pasaría a ser:

function(x) x * x

Generador de expresiones

Existente ya en Phyton, nos permite generar expresiones como arrays o matrices de forma rápida y elegante. Para una explicación con un poco de profundidad, el autor del artículo usa un solucionador de Sudokus para explicarnos paso a paso cómo funcionan. Quizás un ejemplo más sencillo sea el siguiente:

// Crea un array de 100 posiciones rellenas con cero
[ 0 for ( i in 100 ) ]
// Crea una matriz identidad de 10x10
[[ i == j ? 1 : 0 for ( i in 10 ) ] for ( j in 10 )] 

También se pueden utilizar para comprimir arrays, por ejemplo quedarnos solo con los valores pares:

[i for (i in lista) if (i % 2 == 0)]

Reducción de arrays

Permite reducir iterativamente un array a un solo valor usando una función llamada de retorno.

La nomenclatura sería de la siguiente forma:

miArray.reduce( fn [, val_inicial] );
// La función sería de la siguiente manera
miArray.reduce(function(ultimo_valor, valor_actual){
return ultimo_valor + valor_actual;
});

Si combinamos los dos puntos anteriores, podemos obtener la suma de los cien primeros números de la siguiente manera:

[x for ( x in 100 )].reduce(function(a,b) a+b);

JavaScript 1.8 Progress

Vía / dzone