2009-10-03 16 views
6

Tengo una aplicación que, si soy sincera, realmente no necesita integridad transaccional (muchas actualizaciones, ninguna de ellas crítica). Así que estaba planeando simplemente dejar a los grupos de entidades en el camino por el momento. Pero aún me gustaría entenderlo (proveniente de un entorno relacional).Grupos de entidades en Google App Engine Datastore

De la manera en que lo veo, todas las consultas para mi aplicación serán por usuario. Por lo tanto, no es necesario agrupar ninguna entidad superior a una usuario, según el docs recommendations. Pero no estaba planeando tener una entidad de usuario específica, sino que dependía de UserProperty en las propias entidades.

De la forma en que lo veo, si quiero transacciones (por usuario), necesitaré algún tipo de entidad de usuario raíz como padre de todas las entidades que forman parte de la jerarquía de sus datos, sin importar qué tan delgada sería esta entidad, es decir, básicamente no hay propiedades.

¿Es esto correcto?

Disculpas por verbosidad, lo único que realmente hace ping lo que sin esquema en realidad significaba en la práctica de esta noche ...

Respuesta

3

que son esencialmente correcta. Debe agruparlos si desea capacidad transaccional. Sin embargo, puede agrupar varias entidades sin crear una entidad raíz real, en el sentido de una entidad en el almacén de datos. En su lugar, crea una especie de entidad raíz virtual. Un caso de uso importante de esta característica es la capacidad de crear un objeto hijo antes de crearlo principal.

Puede crear una entidad con una trayectoria ancestro sin antes crear la entidad matriz. Para hacerlo, crea una clave para el ancestro usando un tipo y un nombre de clave, luego úsela como el padre de la nueva entidad. Todas las entidades con el mismo antecesor raíz pertenecen a el mismo grupo de entidades, ya sea o no, la raíz de la ruta representa una entidad real .

Esa cita es de the same doc you linked to.

11

De la manera en que lo veo, si quiero transacciones (por usuario), necesitaré algún tipo de entidad de usuario raíz como padre de todas las entidades que forman parte de la jerarquía de sus datos, no importa qué tan delgada sea esta entidad, es decir, básicamente no hay propiedades.

No solo crearía una entidad de usuario raíz y arrojaría todo en su grupo de entidades. Piensa para qué necesitas transacciones. Si no tiene propiedades en su entidad de usuario, ¿con qué la usaría en las transacciones?

No conozco sus datos, pero supongamos que es un sistema de blog y que tiene usuarios, publicaciones y comentarios. El modelo de publicación contiene un número_de_comentarios para que no tenga que contarlos. Es posible que desee que las transacciones se aseguren cuando crea un comentario, la propiedad number_of_comments se puede actualizar de forma segura.

En este caso, sería una sobrecarga innecesaria tener todas las publicaciones y comentarios de un usuario en un solo grupo de entidades. En su lugar, puede publicar los comentarios en el mismo grupo de entidades que la publicación a la que pertenecen. No habría necesidad de colocar las publicaciones en el mismo grupo que un usuario, y de hecho sería una mala idea, ya que los comentarios publicados en cualquiera de las publicaciones de usuarios estarían contendiendo por escribir el mismo grupo de entidades.

Escribí un short article about entity groups en mi blog hoy. Tu podrias encontrar esto útil.