En Google App Engine, ¿cuál es el modelo de unión de muchos a muchos más efectivo?

9

El diseño de BigTable rechaza muchas de las filosofías de los modelos relacionales estándar, prefiriendo explícitamente la desnormalización a una gran cantidad de pequeñas tablas.

Una de las áreas más grandes donde este es un problema es el modelado de muchas o muchas uniones.

Una forma de modelar estas combinaciones es violar la primera forma normal y poner todos los datos interesantes en un db.ListProperty (). Si bien esto tiene la capacidad de poder buscarse desde una consulta, aún no he explorado las implicaciones de rendimiento de buscar en una lista en lugar de extraer otra tabla.

Como las uniones no son posibles, es posible vincular tablas a través de RelationshipProperties. Por lo tanto, con suficiente esfuerzo, se puede crear la tabla de intersección estándar (una tabla con una clave primaria conjunta que hace referencia a ambas tablas principales). ¿Alguien ha explorado los éxitos de rendimiento de las diversas implementaciones?

-Editar-

Si bien la Lista de claves sugerida en la documentación es de hecho una forma de hacerlo, estoy interesado en el rendimiento y las tasas de anomalías de esa y otras implementaciones. ¿Hay utilidad en la creación de listas mutuas de claves? ¿El esfuerzo involucrado en lo repetido vale el precio? Hay una mejor manera de hacerlo?

Brian Ballsun-Stanton
fuente

Respuestas:

3

También estoy trabajando con el almacén de datos GAE en este momento, debería consultar este artículo si aún no lo ha hecho. Si ha encontrado algo útil, actualice su pregunta.

EDITAR:

Encontré esto hoy, échale un vistazo.

eiefai
fuente
0

En mi experiencia en GAE, debe usar las consultas de tabla con moderación. Agregar una tabla de "unión" simplemente ralentizaría aún más las cosas. Por ejemplo, si tiene tablas A y B que comparten una relación de muchos a muchos, y crea una tabla J de "unión" con campos de RelationshipProperty para A y B, tendrá que consultar J cada vez que desee encontrar registros relacionados (entidades).

Sería mucho más rápido tener la Lista de claves en A o B (o ambas si es necesario) porque se incluirán cuando obtenga ese registro / entidad. Mientras no tenga demasiadas claves en la lista (es decir, la entidad no es demasiado grande), este es el camino a seguir.

Comencé a usar ndb en mis aplicaciones y hay algunos beneficios significativos al usar claves al buscar entidades. Si la entidad ya está en caché, primero la extraerá de la memoria o de la memoria caché. Entonces, si hay una superposición significativa en sus Listas de claves, las recuperaciones serán mucho más rápidas para aquellas entidades ya recuperadas.

Brent Washburne
fuente