¿Cuáles son las implicaciones de rendimiento de los polimodelos versus los modelos normales de Bigtable en Google App Engine?

12

¿Qué produce el mejor rendimiento en el uso regular de Google App Engine, un modelo de polimodo o un modelo normal de "Bigtable"?

El polimodelo, efectivamente, crea una columna en la tabla principal llamada "clase" que proporciona el seguimiento de la herencia. Mientras que una Bigtable normal, heredada de una clase padre, crea una estructura de datos nueva y separada, sin la capacidad de consultar al padre y encontrar todos los hijos de todas las clases subtipadas.

Brian Ballsun-Stanton
fuente

Respuestas:

3

Probablemente haya una diferencia de rendimiento, pero probablemente sea bastante pequeña.

Esto es lo que encontré (todo basado en Google Docs para Python ).

  1. BigTable no admite la información de PolyModel de forma nativa. En cambio, se implementa utilizando una propiedad de 'clase'. Entonces, cuando intente realizar una búsqueda, por ejemplo, para encontrar una clase base, buscará en esta propiedad 'clase'.

  2. Todas las consultas que usan la clase PolyModel tienen un filtro adicional aplicado que filtra por la clase dada (usando la propiedad 'class').

  3. Cualquier índice creado para una clase PolyModel, debe tener en cuenta la columna extra 'clase'.

Esencialmente, la clase PolyModel se encarga de la propiedad 'clase' por sí sola, insertándola en consultas y utilizándola para otras consultas. Aparte de eso, funciona de manera idéntica al uso estándar de BigTable.

Entonces, la diferencia es realmente solo agregar y mantener una columna adicional.

¿Hay alguna diferencia de rendimiento? Sí, probablemente sea así. Cada columna que agregue a cualquier sistema de base de datos tendrá un impacto en el rendimiento. Pero, ¿es significativo? Probablemente no.

Ricardo
fuente