Migrar de SQL Server a MySQL

Al final hemos decidido migrar a MySQL la base de datos de TopMadrid. La razón principal ha sido el precio: Una base de datos de 500 Mb en un servidor SQL Server compartido son 200 €/mes, el doble que en un servidor MySQL compartido (precios de Arsys).

Además MySQL puedes instalártelo en local, lo cual además de ser algo muy útil para hacer pruebas, puede ser interesante para mantener un backup en local automático. Evidentemente esto también lo puedes hacer con SQL Server pero para ello necesitas comprar una licencia… que no la regalan precisamente.

La migración ha sido muy rápida, gracias en parte a SQLyog el mejor GUI para manejar MySQL que yo he conocido, especialmente util para migraciones pues te permite importar datos de varias fuentes ODBC.

Algunas consejos para la migración

  • Para pasar correctamente tus tablas de SQL Server a MySQL es imprescindible dominar los tipos de campo de las dos bases de datos, puesto que en ocasiones la conversión automática que te sugiere SQLyog no es la más correcta.
  • A parte de importar los datos es necesario hacer algunos cambios en el código de tus páginas, concretamente en las sentencias SQL que incluyan fechas ya que la estructura de fechas de MySQL es distinta a la de SQL Server. Es bastante sencillo y puedes crear una función que te transforme las fechas automáticamente.
  • Otro problema que nos trajo de cabeza fue debido no a MySQL sino al Sistema Operativo sobre el que está instalado. El Servidor SQL Server que compartíamos estaba instalado en Windows y por tanto no había problemas con las mayúsculas y las minúsculas, pero como probablemente el nuevo servidor MySQL esté instalado en Linux / Unix si que importa (case sensitive), y si a tus tablas no las llamas exactamente igual no las encuentra, porque cada tabla es un archivo en el servidor.

A parte del precio, MySQL tiene otras muchas ventajas, algunas de las cuales necesitabamos utilizar para el sistema estadístico a medida que estamos desarrollando. Una de ellas es la cláusula LIMIT en el enunciado SELECT del lenguaje SQL, que no existe en SQL Server y es muy útil para la paginación de resultados. Otra que a mi me gusta mucho es EXPLAIN SELECT vital para optimizar tus índices, tipos de indexación y consultas de la base de datos.

En total el proceso nos ha llevado unas 8 horas (intensas), aunque evidentemente todo depende de la complejidad tu aplicación y la experiencia que tengas en migraciones de este tipo.

Gráfico de Calidad sin robots


Así es como queda nuestro gráfico una vez eliminados los robots, como podéis observar las proporciones son muy estables a lo largo de varios días. Creo que el resultado final no va a variar excesivamente de éste, aunque podríamos seguir afinando, si bien para ello tendríamos que añadir una nuevo campo a nuestra tabla de calidad: HTTP Referer, es decir, de dónde vino el usuario.


El Referer nos puede servir para saber qué es lo que ha pasado con visitantes como los de la imagen superior. ¿Cómo puede ser que hayan hecho «Click» en una recomendación sin haber previamente entrado en ninguna página (que es donde aparecen los enlaces)?. Nuestra teoría es que se trata de usuarios que vieron nuestra web a través de la cache de Google y otros buscadores, y que posteriormente hicieron «click» en un enlace, momento en el cual ya fueron registrados.

Con lo cual el siguiente paso sera añadir ese nuevo dato y ver como su consideración afecta a nuestro gráfico.

Geoposicionamiento de Visitantes con Google Map API


¿De dónde me visitan? Todo webmaster tiene acceso a esta información desde las estadísticas de su web, pero… ¿Por qué no ver a tus visitantes en un mapa mundial de Google Maps? Pues no es algo excesivamente complicado de conseguir, aquí os decimos cómo hacerlo y también os mostramos un resultado con los visitantes de TopMadrid.

¿Cómo se hace? Pasos a seguir:

1) Obtener las IP de tus visitantes. Ya sea de tus logs, estadísticas o a través de un sistema como el que nosotros estamos desarrollando para TopMadrid con base de datos.
2) IP Address Look Up de esas IP para saber su situación. Para ésto utilizamos la API de www.hostip.info, que nos viene estupendamente porque además te facilita la latitud y la longitud.
3) Generar el mapa con la API de Google Maps. Geoposicionando todas esas direcciones dentro del mapa.

Afinando…

Para no cargar excesivamente el servidor de HostIP lo suyo es consultar los datos una vez, volcarlos automáticamente en una base de datos y luego generar el mapa desde esa tabla con los datos almacenados. Además así es todo más rápido.

Con respecto a las IPs lo suyo es que éstas sean las IP reales, las que están detrás de los proxies. También dependiendo de lo que nos interese deberemos decidir si excluimos o no los visitantes robots de nuestro mapa.

No tiene sentido crear un punto (gMarker) por cada visitante (se solaparían). Lo suyo es acumular visitantes de una misma procedencia e incluir esa información dentro del globo (ver imagen).

HostIP está muy bien, pero su información no es excesivamente completa: muchas IP no quedan localizadas y de algunas ciudades no disponen de la latitud y la longitud (con lo que hay que excluirlas y no se pueden situar en el mapa).

¿Quieres hacer algo parecido?

Seguro que a los que no se os había ocurrido todavía esta posibilidad le estáis dando ahora un montón de «vueltas al coco»…

Si te atrancas en alguno de los pasos, escribe tus preguntas en los comentarios y te ayudaremos en todo lo posible. Y si se te ocurre algo para mejorar el resultado, por favor escríbenos tus ideas también en los comentarios.

Gracias

A Furiousity por la idea original que pudimos leer en el Grupo de Discusión de Google Maps API.

Control de calidad de un sitio web (cont)

En un post muy reciente: Verificando la utilidad de tu web… hablaba de algo que me parece muy interesante ¿Cómo sabes si tu web gusta o es util?. Nosotros habíamos decidido implementar un sistema propio (aunque lo utilicen mucho los de Microsoft no estoy seguro de que «implementar» sea una palabra), que básicamente va acumulando una resumen de lo que cada usuario ha hecho en su visita al web.

Aquí ponemos un fragmento de una de las tablas que contienen este «resumen» en el que estamos trabajando:

Explicamos cada uno de los campos de la tabla (utilizamos nombres en inglés muchas veces porque son más cortos):

  • ID es el número de sesión que almacenamos en una cookie del explorador del visitante para poder seguirle durante toda su visita.
  • Alta es la fecha y hora en la que el usuario ha entrado.
  • First es el código único de la página en la que el usuario ha entrado.
  • Last (al final) es el código único de la última página que ha visto el visitante.

Y aquí vienen los contadores:

  • Pag es el número de páginas que ha visto el visitante.
  • Click es el número de veces que el usuario ha pinchado en un enlace recomendado.
  • Seek es el número de búsquedas que ha hecho el usuario.
  • Sat es el número de Fotos desde Satélite que ha visto el visitante.

Interpretación del Extracto

Bueno según la clasificación que hicimos en el anterior post en esta tabla que contiene lo que han hecho 14 visitantes, podemos ver distintos comportamientos de los que podemos deducir (con muchos matices) cómo han encontrado nuestro web con sobre Madrid:

Usuarios para los que el web no ha sido util

Estos usuarios han entrado, han visto y se han ido. Esto lo deducimos de:

  • Pag sólo marca 1. Es decir sólo han visto una página.
  • Fist y Last son iguales evidentemente, porque si sólo has visto una página, esa página es tu primera y tu última.
  • No se han ido haciendo click en ninguna recomendación.

Matizamos:

  • Hay recomendaciones compuestas en su mayoría de recomendaciones sin enlace: Por ejemplo, casi ninguna de las cafeterías en Madrid recomendadas dispone de web. Con lo cual sobre este aspecto habría que trabajar más…
  • Puede que no hayan hecho click en una recomendación pero sí en un anuncio de AdSense. Si bien dado que esto anuncios los gestiona Google no vamos a poder saber qué usuarios pinchan sobre ellos (aunque sería interesante).

Usuarios para los que el web ha sido relativamente util

Estos usuarios consideramos que están relativamente satisfechos porque al menos han hecho click en un enlace. Realmente puede que estén muy satisfechos porque han encontrado de un golpe exactamente lo que querían… con la información de la que disponemos no podemos saberlo, pero… ¿podríamos? Qué necesitariamos saber, para empezar:

  • Referer- ¿De qué pagina venía este usuario? ¿Si venía de un buscador (como en la mayoría de los casos) qué es lo que buscaba?.
  • Donde ha hecho click– Exáctamente en qué recomendación ha hecho click.
  • Relación entre el Referer y el Click– Si hay una relación muy estrecha podemos considerar que el usuario debe estar muy satisfecho. Aunque creo que se entiende me explico con un ejemplo:

Si un usuario busca en Google, «Madrilia» (excelente restaurante italiano en el centro de Madrid) y encuentra nuestra página de restaurantes italianos en Madrid, y hace click sobre el enlace a la web de Madrilia by Café Oliver… entonces yo creo que usuario debe estar muy contento con TopMadrid porque gracias a él ha encontrado lo que quería.

En cualquier caso despejar todas estas incógnitas de manera automáticas va a ser dificil…

Usuarios para los que el web ha sido util

Estos tres ultimos usuarios han debido encontrar el web muy util porque han visitado varios enlaces (click>1). El primero de todos por ejemplo ha visitado siete webs de las recomendadas en la categoría 62 (guarderías en Madrid), con lo que podemos pensar que se trata de un usuario que está buscando una guardería para su hijo y utiliza nuestro web para informarse de lo que hay en el mercado… ¡Perfecto!

Claro que de nuevo hay más interpretaciones, ya que puede que haya hecho muchos clicks porque no encontraba lo que quería (no creo, pero bueno…). El caso es que sería interesante saber ¿cuanto tiempo ha estado el visitante en la página? Ya que si ha estado un tiempo considerable, es que definitivamente el web le ha resultado útil (aunque también esto se podría matizar).

Evidentemente, tal y como dijimos en nuestro anterior post, muchos de estos datos te los ofrecen las estadísticas de tu web, pero este tipo de sistemas nos ofrecen las posibilidad de clasificar a los usuarios en tiempo real y adaptar el comportamiento del web al tipo de usuarios que son.

Otras aplicaciones prácticas interesantes:

  • Sabremos que categorías gustan más
  • Sabremos que categorías no están gustando y se deben mejorar.

[Este post continúa en Estadisticas de Utilidad de un Web]

Google Maps en TopMadrid

Muy recientemente nos enteramos, gracias a Google Dirson y OJO!Buscador, de que Google había hecho pública su API para Google Maps, con lo que ahora es muy sencillo integrar los mapas de Google en tu web. Y nosotros nos hemos puesto las pilas y hemos creado una categoría llamada Madrid desde el Cielo en TopMadrid desde donde podréis ver algunas imágenes interesantes, como ésta de la Plaza de Toros de las Ventas:

Actualmente en España sólo esta disponible la vista desde satélite (en EEUU se puede ver también el callejero) y no con tanto detalle como en otras partes del mundo. No obstante, dentro de muy poco van a llegar muchas novedades…