In: artículos
14 Feb 2009Me he pasado toda la tarde leyendo artículos sobre distintas bases de datos, esquemas relacionales vs key/value, normalización vs desnormalización, etc. Soy un novato pero me gustaría compartir algunos enlaces y conclusiones que he sacado, por si a alguien le interesa o puede aportar algo más al asunto.
El esquema más usado sin duda alguna es el relacional. En mi ejemplo, tendría países, regiones, ciudades y lugares de interés. Cada lugar tendría un campo country_id, region_id, town_id. Es un esquema ordenado (normalizado), bien claro y que funciona perfectamente con la mayoría de frameworks. El punto negativo es que para saber el nombre de la ciudad debemos unir (join) dos tablas (la de places y la de towns). Si tenemos pocas entradas y pocas visitas no hay problema. Sin embargo si tenemos éxito se puede convertir en una pesadilla (sobre todo si tenemos que usar varios servidores). Se puede cachear está claro, pero aquí estoy hablando de la base de datos en concreto.
Por eso, para webs que necesitan escalar sí o sí, se usa más un esquema key/value. En mi ejemplo, una sola tabla con la información del lugar, nombre de la ciudad, region y país. No hay que unir tablas ya que está todo en el value. Este esquema también se puede llamar document-oriented. El punto positivo es la escalabilidad, que las consultas a la BD son mucho más rápidas. Lo negativo es que te cambia el modelo al que estamos acostumbrados y tienes que rehacer muchos de los frameworks MVC.
Lo que recomiendan es empezar usando el modelo relacional (more tables). Si ves que tu tráfico crece, romper este esquema normalizado e incluir en la tabla de lugares, los campos que necesitamos al unir las tablas. En mi caso, meter country_id, country_name, region_id, region_name, town_id, town_name dentro de la tabla places; manteniendo las otras tablas (sólo que no las usaríamos ya tanto). Tendríamos información duplicada (los nombres) por lo que tendríamos que reformar nuestra lógica interna para actualizar esa información si cambiamos los nombres. Otra opción es crear tablas de las vistas (al estilo key/value). Y si tu tráfico crece demasiado, quizás te conviene rehacer de nuevo el modelo de la base de datos e ir enteramente al modelo key/value.
Y esta recomendación es sobre todo porque las bases de datos no relacionales, no están tan avanzadas porque las relacionales (MySQL y similares). Sin embargo hay algunas que hay que ver su evolución:
No todas las webs funcionarían mejor con bases de datos no relacionales, pero muchísimos servicios web sí que lo harían. Por eso tras haber leído un poco intuyo que un breve futuro veremos muchos cambios en este terreno. Ya dije hace tiempo que me gustaba el enfoque de BigTable de Google y hoy lo repito. Ellos por supuesto, juegan en otro liga; pero hay conceptos que se pueden aplicar a menor escala para estar preparados.
Otros artículos y discusiones interesantes:
Soy fesja. Tras teleco y un máster en USA, soy el confundador de Tourist Eye, la guía de viajes para tu móvil que desearás utilizar en tus viajes. Comentando las innovaciones digitales desde hace más de 4 años. Ahora es el momento de desarrollar mis ideas!
3 Responses to El futuro de las bases de datos
Luis
Marzo 4th, 2009 at 10:36 pm
Ya entiendo lo que me contaste el otro día. Pero a mi me van más los átomos de Si que las tablas
fesja
Marzo 4th, 2009 at 11:17 pm
jejeje, sí, ya lo sé, tu guías los átomos y yo las tablas
3wstudio» Aplicando seguridad en las sesiones de php (II)
Junio 9th, 2009 at 3:44 am
[...] algún tipo de sistema de bases de datos Key-value (que es como funciona internamente memcache) (link 1) (link [...]