Cachear querys ActiveRecord? cual es es la mejor opción?


#1

Hola a todos,

estoy en un proyecto de desarrollo con Rails , donde la aplicacion hace
un
uso intensivo de consultas activeRecord, me refiero a una aplicacion que
consulta sin parar la base de datos (uf…), ya que una de sus
funcionalidades es mostrar una serie de datos de forma recursiva.

dado eso , me preocupa que esta funcionalidad pueda afectar la
performance
de la aplicacion ya que es justamente esta una de las funcionalidades
publicas que serán accesibles por los usuarios.

haciendo un shopping de plugins , encontré estos que podrian ajustarse a
mi
necesidad:

https://github.com/nkallen/cache-money/tree , en este encontré algunas
limitancias , como el soporte para joins ,y de operadores como IN , != ,
etc…

https://github.com/ferblape/query_memcached/tree, quizas este sea la
mejor
opción , tengo entendido que guarda los resultados en memcache en lugar
de
guardarlos en memoria cada vez que se consultan.

alguien ya está utilizando este plugin en producción?
si es asi, puede cachear cualquier tipo de consulta, el expire cache es
automagico?

gracias de antemano

saludos cordiales

Atte.
Miguel Michelson Martinez


#2

Blat, te llaman

(Perdón por la sintaxis, escrito desde el móvil)

Fernando Guillén
Desarrollador Web Freelance
http://fernandoguillen.info

El 19/12/2008, a las 3:25, “Miguel M.”
<removed_email_address@domain.invalid

escribió:


#3

Blat, te llaman???

Se que escribes desde el movil. Pero para un novato eso que has
escrito no es una respuesta que aporte mucho al hilo ¿no crees?

El día 19 de diciembre de 2008 9:19, Fernando G.
removed_email_address@domain.invalid
escribió:> Blat, te llaman


#4

2008/12/19 Andrés gutiérrez removed_email_address@domain.invalid

Blat, te llaman???

Se que escribes desde el movil. Pero para un novato eso que has
escrito no es una respuesta que aporte mucho al hilo ¿no crees?

No, pero al encender la Blatseñal y reclamar la atención del insigne
Fernando B., autor del segundo plugin mencionado, ha hecho lo posible
para
que éste conteste a Michael personalmente, lo cuál sí es una
contribución :wink:


#5

Joder!!! lo que me queda para pillaros (si algún dia soy capaz).
Una pregunta, Fernando: ¿podrías exponer tu punto de vista en este hilo?

Y manuel, de verás has de entender que no todos conocemos a todos y
mucho menos quien ha hecho que. He de decir que a Fernando ya le
conocia, pero no he caido.

Saludos

El día 19 de diciembre de 2008 10:22, Manuel González Noriega
removed_email_address@domain.invalid
escribió:> 2008/12/19 Andrés gutiérrez removed_email_address@domain.invalid


#6

Hola, sólo comentar que en domestika.org usamos el query_memcached de
Fernando y estamos más que contentos: tiene una instalación trivial
(bueno, necesitas memcached) y la mejora del rendimiento ha sido muy
notable. Lo recomendaría especialmente en aquellos sites en los que se
repiten consultas de lectura en distintas requests y se hace difícil
usar cacheo en las acciones.

En fin, otra demostración de que Blat es un crack :slight_smile:


#7

Hola,

cómo bien dice Raúl el querymemcached es completamente transparente de
instalar y te da bastante recorrido, aunque tiene algunos problemas en
cuanto a la finura de la expiración: cualquier modificación sobre
cualquier registro de una tabla expira la caché de esa tabla, lo cuál
no es muy óptimo.

Por otro lado la de twitter permite ser mucho más detallista y cachear
sólo aquello que quieres. Es decir, requiere más trabajo por tu parte.

No creo que sea descabellado utilizar los dos. Nosotros no lo
descartamos en La Coctelera.

2008/12/19 Andrés gutiérrez removed_email_address@domain.invalid:


#8

Hola a todos,

muchas gracias por la ayuda,

voy a hacer las pruebas con el query_memcached y les cuento como me va

muchas gracias

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2008/12/19 Fernando B. removed_email_address@domain.invalid


#9

¿Blat es un crak?
No le conozco y no tengo el nivel suficiente como para saber si su
codigo es estupendo, pero por los comentarios de la lista. YO apuesto
a que lo es :expressionless:

Saludos

Nota:
Los viernes, los temas de la lista siempre son un poco mas terrenales
y raileros :slight_smile:

El día 19 de diciembre de 2008 11:16, Raul M.
removed_email_address@domain.invalid
escribió:> Hola, sólo comentar que en domestika.org usamos el query_memcached de


#10

Hola

al parecer no he podido hacer que funcione query_memcached, pues ya lo
he
instalado,
estoy en OSX leopard y tengo memcache iniciado: memcached -d -m 24 -p
11212,

y mi configuracion en environment/s pueden verla aqui:

http://pastie.org/343327

pero en la consola el log de las querys mysql aparece como que siempre
se
consultara a la BD, no me dice nada de CACHE 0.0000 o algo asi

¿me falta algo para que funcione?

Saludos

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2008/12/19 Miguel M. removed_email_address@domain.invalid


#11

Cuidado, si el memcached lo lanzas en el puerto 11212 y en el
environment indicas que está en el 11211 no puede funcionar.

¿Es por eso?

Por otro lado sólo funciona si tienes indicado perform_caching = true
en el entorno correspondiente.

2008/12/19 Miguel M. removed_email_address@domain.invalid:


#12

Hola Fernando,

tengo dos instancias de memcache iniciadas y una esta en el 11211, al
parecer hice el cut&paste incorrecto

#ps -aux | grep memcached

miguelmichelson 40098 0.0 0.0 601844 308 ?? Ss 1:39PM
0:00.10 memcached -d -m 24 -p 11212
miguelmichelson 40090 0.0 0.0 601844 312 ?? Ss 1:38PM
0:00.10 memcached -d -m 24 -p 11211

estoy iniciando el server como

#script/server -e dev_with_caching

la configuracíon que tengo hasta ahora la puedes revisar aqui

http://pastie.org/343327

me parece que esta todo en orden, pero al parecer no funciona

saludos y gracias!

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2008/12/19 Fernando B. removed_email_address@domain.invalid


#13

Pues no se me ocurre… ¿Qué versión de Rails es?

De todas formas, lo que tienes en el environment.rb y en el
dev_with_cache.rb es redundante, porque estás inicializando dos veces
el objeto CACHE.

De hecho, en Rails 2.2 ya no hay un objeto CACHE, sino que se utiliza
Rails.cache, que Rails asigna automágicamente cuando ejecuta esta
línea:

config.cache_store = :mem_cache_store, ‘localhost:11211’,
memcache_options

Así que puedes borrar esas líneas del environment tranquilamente, que
quizá sea eso.

2008/12/19 Miguel M. removed_email_address@domain.invalid:


#14

Hola,

acabo de darme cuenta de un bug en la última versión que commiteé.

Por favor, vuelve a bajarte el plugin e inténtalo de nuevo que ahora
sí que te funcionará :slight_smile:

2008/12/20 Fernando B. removed_email_address@domain.invalid:


#15

a há, perfecto Fernando,

muchas gracias por dar el aviso.

la aplicacion la tengo en la oficina, por lo que la probaré el mismo
lunes.

ya les contaré como me fue con esto.

Saludos!

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2008/12/20 Fernando B. removed_email_address@domain.invalid


#16

Échale un vistazo a esto, porque ha habido algunos cambios más:

http://www.inwebwetrust.net/post/2008/12/21/updating-query-memcached

2008/12/20 Miguel M. removed_email_address@domain.invalid:


#17

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2008/12/22 Miguel M. removed_email_address@domain.invalid

Cache read: 0_108c6f71aac8f781cac6f5fe2d32c453 (600 seconds)
MemCacheError (unexpected response “ERROR\r\n”): unexpected response
“ERROR\r\n”

y aca esta el log de memcached:

http://pastie.org/344863


#18

Hola Fernando como estas,

he actualizado el plugin y he seguido las instrucciones del readme

pero estoy recibiendo esto en la consola

Tag Load (0.002060) SELECT tags.* FROM tags INNER JOIN taggings
ON
tags.id = taggings.tag_id WHERE ((taggings.taggable_type = ‘Phrase’)
AND
(taggings.taggable_id = 2857))
Cache write: 0_4f6765bf92eba4878ae57b5df901f1cc (600 seconds)
Cache read: 0_108c6f71aac8f781cac6f5fe2d32c453 (600 seconds)
MemCacheError (unexpected response “ERROR\r\n”): unexpected response
“ERROR\r\n”

me parece que hay un error ahi.

una pregunta:

,¿ el plugin al haber cambiado , ahora solo se actualiza el cache por
periodos de tiempo? y no por si las tablas relacionadas cambian( se
eliminan, actualizan etc …), que era lo que antes hacia ?

muchas gracias

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2008/12/22 Fernando B. removed_email_address@domain.invalid


#19

Perfecto,

muchas gracias

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2008/12/22 Fernando B. removed_email_address@domain.invalid


#20

Hola Miguel,

el cambio de ahora sí que implica que la caché se expira cada cuanto
tú le digas, o 90 minutos si no indicas otro rango de tiempo. Mírate
en el README la sintaxis exacta…

El error que me comentas me gustaría mirarlo más a fondo. SI no te
importa, mándame los datos a mi dirección de email y dejamos ya de
molestar en la lista.

2008/12/22 Miguel M. removed_email_address@domain.invalid: