2011-12-16 22 views
8

En mi aplicación, tengo una identificación única para cada objeto (tablas).Rails asociación polimórfica sin Tipo (ID único)

Ahora, debido a eso, cuando uso ver la identificación, sé qué tipo de objeto es, si es un Usuario o es un Hotel.

Me preguntaba si podría guardar la búsqueda para el item_type en asociaciones polimórficas, parchear la búsqueda con una búsqueda de secuencia de id en la memoria, guardando así el espacio en la base de datos y en el índice.

¿Se puede hacer esto?

estoy trabajando con rieles 3.0.9, Ruby 1.9.2

Respuesta

1

Esto puede no ser la respuesta que está buscando. Estoy seguro de que esto es posible de alguna manera, pero estarías peleando contra la forma en que se diseñó el polimorfismo en ActiveRecord, y eso probablemente causaría una gran cantidad de dolor.

La primera pregunta que me viene es por qué? Estás pidiendo una optimización del rendimiento. ¿Estás viendo un problema de rendimiento? ¿Has verificado con la instrumentación, New Relic, el perfilador de Ruby y otras herramientas que esta segunda búsqueda es realmente lo que está matando tu rendimiento? Si no has hecho nada de esto, entonces probablemente estés perdiendo el tiempo. La predicción de cuellos de botella de rendimiento es una ciencia inexacta y está sujeta a la regla 80-20.

Si realmente tiene este problema y ha analizado a fondo sus registros, sus diagramas New Relic, ha aislado el problema y ejecuta pruebas de rendimiento en su lugar, si ya ha hecho todo eso, y Si ve un problema de rendimiento con este problema, le sugiero que probablemente una solución de desnormalización le proporcione alguna mejora. La desnormalización es una herramienta común para optimizar los problemas de rendimiento de la base de datos. Estará almacenando datos en más de un lugar, pero sus consultas tocarán menos tablas (más rápido), con el costo extra de mantener los múltiples bits sincronizados al actualizar los registros (código de aplicación más complejo).

Si pudiera publicar un poco más de detalle sobre su ejemplo, sería más fácil hacer algunas sugerencias más concretas o dar ejemplos.

+1

Tuvimos una conversación con optimización DB Percona. Una de las primeras cosas que dijeron es que esta asociación polimórfica está matando a nuestro DB. Dado que estamos trabajando con tablas de varios millones de filas, esta es una operación muy costosa tanto para consultar como para indexar. Dado que este es un varchar, es incluso más caro que un número entero. Al excavar y ver lo difícil que puede ser, volví a Percona diciendo qué pasaría si no lo hiciéramos y me dijeron que era absolutamente necesario eliminarlo. Es por eso que ... – KensoDev

+1

Creo que todavía estaría bien si viera algunos datos de rendimiento real. Pero posiblemente, la desnormalización sea la solución. ¿Por qué no publicas algunos ejemplos y podemos discutirlo más? –

+1

Por cierto, si te gustó la respuesta, acéptala (con una gran marca al lado). –

Cuestiones relacionadas