Optimización y Desnormalización del Modelo de Datos
Fernando Blat
[email protected] http://www.inwebwetrust.net 1
Índice Índice
2
¿Qué es ActiveRecord?
Modelo de datos de ejemplo
Normalización / Desnormalización del modelo
Tags en La Coctelera
Observers
Conclusiones
Introducción a ActiveRecord
3
Introducción a ActiveRecord ¿Qué es ActiveRecord? Librería de Rails encargada de mapear los objetos de negocio en las la base de datos
Crear un sistema de clases que podemos utilizar en nuestra aplicación
Implementa el patrón Object Relational Mapping (ORM)
Lo extiende proponiendo dos nuevos conceptos: relaciones y herencia
4
Introducción a ActiveRecord Filosofía
Olvida la base de datos
Toda la magia de Ruby para trabajar con el modelo de datos
Minimizar el número de líneas y maximizar la productividad
5
Independiente de Rails
Introducción a ActiveRecord ¿Qué se puede hacer? Post.find(:all, :conditions => "status='publish') # SELECT * from posts WHERE status='publish' Post.find_by_nicetitle('comooptimizaractiverecord') # SELECT * from posts WHERE nicetitle='comooptimizaractiverecord' LIMIT 1 post.categories # SELECT * from categories WHERE post_id='3' post.author # SELECT * from people WHERE id='10'
6
Introducción a ActiveRecord Características Mapeo automático entre clases y tablas: tabla posts corresponde a la clase Post Asociacies entre clases Validación de atributos acts_as_(list|tree) Callbacks Observers Herencia Transacciones Manipulación directa de objetos Abstracción de la base datos Soporte para logging
7
Introducción a ActiveRecord Usando AR fuera de Rails require 'rubygems' requiregem 'activerecord' ActiveRecord::Base.establish_connection({ :adapter => "sqlite3", :dbfile => "db/db.posts.sqlite3" }) class Post { "name" => "citas frases"} }, {'user' => User.find(1000) } assert_response :redirect
43
observer Tests: después
cine_after = Ttag.find_by_name('citas') assert cine_after.count, 3
terror_after = Ttag.find_by_name('frases') assert_not_nil terror_after assert terror_after.count, 1
44
observers Tests
Testear todos los modelos desnormalizados
Testear todos los callbacks que utilicemos
Testear cada posibilidad dentro de cada callback No tiene porqué haber inconsistencia en los datos
45
Conclusiones
46
Conclusiones Ten cuidado con ActiveRecord y conoce a fondo en qué consultas se traduce
Analiza logs y estudia comportamientos anormales: dispatch de cienes de megas, demasiadas consultas por petición, etcétera
¿Vale la pena empezar directamente con un modelo desnormalizado?
Si tienes cuidado no tiene porqué llegar a darse una situación de inconsistencia
47
Testea lo que haces
¿Preguntas?
48
Salamanca 17 Madrid – 28020 España tel. +34 91 567 0605 www.the-cocktail.com
49