2011-08-07 11 views
5

Estoy tratando de entender cuándo usar una entidad "principal" en GAE. ¿Esto solo es útil para consultar (es decir, obtener todos los objetos de Foo donde el padre == algunosObj) o el niño tiene acceso a la entidad padre de manera similar a una propiedad de referencia?AppEngine: ¿Cuándo usar una relación principal?

¿Cuándo es mejor usar el elemento principal frente a la propiedad ReferenceProperty?

Respuesta

5

La única vez que debe usar grupos de entidades (que es lo que todas las entidades con un formulario principal común) es para seguridad transaccional. Si necesita actualizar varios registros en una transacción, todos deben tener la misma entidad raíz. La razón por la que no pondría todas sus entidades bajo un solo padre es porque las actualizaciones de un grupo de entidades están limitadas a aproximadamente 1 por segundo. Para obtener más información, consulte this section de la documentación.

Una entidad puede acceder a su padre con this.parent, pero no tiene nada de especial, eso es solo azúcar sintáctica para db.get(this.key().parent()).

+0

O para una mayor coherencia de lectura con el HRD, ¿no? –

+0

@Drew Sí, aunque es una extensión de la transaccionalidad. –

1

Todo lo que leo está en contra de las entidades Parent por una razón, y es cuando modificas cualquier cosa en ese árbol, todo está bloqueado.

Cuando comencé a trabajar con entidades matrices, quería tratarlas como el encabezado de una colmena o una base de datos localizada alrededor de esa entrada principal, pero aparentemente esa no es la forma en que se hacen. Probablemente quiera usar ReferenceProperty porque eso le permitirá acceder al padre y no provocará que el bloqueo continúe.

Por supuesto, si quieres ese tipo de relación de bloqueo, entonces tal vez lo quieras, pero no fuiste lo suficientemente específico como para medirlo.

Cuestiones relacionadas