Diapositiva 1

Toda la magia de Ruby para trabajar con el modelo de datos. Minimizar el número de líneas y maximizar la productividad.
492KB Größe 9 Downloads 8 Ansichten
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('como­optimizar­active­record')   # SELECT * from posts WHERE       nicetitle='como­optimizar­active­record' 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