Noviembre 20th, 2008 Posted in Php | 1 Comment »
Primer post tecnológico. Un clásico: los buscadores.
No conozco muchos, pero sí unos cuantos.
No pretendo analizar en detalle los pros y contras sino explicar mi experiencia con cada uno de ellos. Siempre desde el punto de vista de un programador PHP:
1ª Premisa. En tiempos de crisis más vale que te espabiles a saber/poder hacer cuantas más cosas mejor. Los programadores de PHP ya estamos acostumbrados a hacer un poco de todo (administrar Mysql, programar lógica, maquetación, javascript, diseño), así que no nos viene de nuevo. En Php las reglas son bastante laxas y anima a tomarse las cosas con alegría. Digo esto porque uno de los puntos que considero más importantes para el equipo /bajo es la capacidad de autogestión de toda su plataforma. Esto llevará a que quizas la decisión final no parezca la más adecuada, si no se mira desde ese prisma.
2ª Premisa. Mi conocimiento no es profundo en ninguno de ellos. No contribuyo al desarrollo de ninguno. No he modificado ni revisado (al menos no en serio) como funciona por dentro ninguno.
Contendientes:
1- FullText search:
- Sólo mysql. Necesitas tablas myIsam.
- Buscador muy fácil de montar (crear un índice).
- Escala mal.
- Más carga sobre la BDD.
- Busquedas no siempre de mucha calidad.
- Problemas al intentar aplicar cualquier cosa avanzada.
- Está muy a huevo el hacer joins, y entonces todo el tinglado se viene abajo.
- Ordenación traumática
Conclusión: Sólo para el principio. Solución rápida, fácil y temporal
2- Lucene (Versión Zend Framework)
- Implementación de juguete del papa Lucene (versión java)
- Compatible a nivel de formato de índices
- Port de un software excelente en un lenguaje que simplemente no se ha pensado para esto
- A la que intentas combinar 2 criterios de búsqueda la consulta se puede ir a los 30 segundos en un índice de 100 Mb (no excagero).
- El proceso en la versión que miré (la 0.9) era: Levantar todo en memoria (prepara un límite de mejoría enorme) y aplicar un sort a pelo.
Conclusión: Nunca debería haber salido a la luz. No usar NUNCA (En caso de que en la última versión de Zend Framework haya cambiado muchísimo retiro mis palabras, pero lo dudo muchísimo)
3- Lucene (Versión Java).
- Desarrollo impecable
- Gran comunidad
- Documentación exahustiva
- Muy probado
- Muy buen rendimiento (casi siempre por debajo de 200ms en nuestro caso. Siento no poner datos de carga ni tamaño de índice)
- Integra muy bien con Java , obviamente. Con el resto integración fácil vía Web Services (hay más cosas, pero bueno)
- Necesitas gente que sepa de Java para tocarlo (cambia con cosas como Solar, gracias Jordi por enseñarnos)
- Necesitas ejecutar un Tomcat o algo así para poder correrlo.
- Consume una cantidad de recursos razonable
Conclusión. Solución para entornos estables, proyectos tirando a consolidados o donde haya un programador Java y tengais dinero para ponerle una o 2 máquinas (por el tema de alta disponibilidad)
4- Sphinx:
- Hecho en C++
- Un único desarrollador, eso sí es muy listo, pero esperemos que no le caiga un ladrillo en la cabeza.
- Comunidad muy dévil.
- Integra muy muy bien con Php, Ruby, Phyton & CO.
- Integrable incluso con el Mysql. Acceso a través de SQL (me huele mal, pero no lo he probado)
- Gestión de peticiones en Batch
- Opciones limitadas
- Extremadamente rápido
- Configuración muy simple en un sólo fichero
- Ordenación por fórmulas, steamming, agrupación, attributos multivalor.
- Baja demanda de recursos. Muy eficiente.
En mi proyecto http://grupos.emagister.com usamos Sphinx. Los motivos son tan simples como que :
- No necesito servidores dedicados
- Lo puedo modificar yo mismo sin depender de nadie
- La puesta en marcha es muy muy rápida
- Probado en Web con índices enormes y carga enorme (fácilmente escalable)
Ale, espero que os haya gustado (y de regalo un link para el tío de Sphinx, que me cae bien)
Grego