2010-07-23 2 views
0

J'ai un modèle de données où je ne suis pas sûr de tirer profit des classes d'imbrication dans les groupes d'entités. Le modèle de base est que l'utilisateur possède beaucoup de chevaux, un cheval ne peut posséder une selle:Groupes d'entités d'imbrication?

// Model 1, nest everything: 
User 
    Horse 
     Saddle 
    Horse 
     Saddle 

// Model 2: Just let them all be siblings. 
User 
    Horse 
    Horse 
    Saddle 
    Saddle 

Je ne sais pas si je gagne un avantage sur les instances de selle de nidification sous un cheval, ou si je devrais les laisser tous comme frères et soeurs.

clés: Génération

// Model 1: 
Key key = new KeyFactory.Builder(
    User.class.getSimpleName(), userid) 
    .addChild(Horse.class.getSimpleName(), horseid) 
     .addChild(Saddle.class.getSimpleName(), saddleid).getKey(); 

// Model 2: 
Key key = new KeyFactory.Builder(
    User.class.getSimpleName(), userid) 
    .addChild(Saddle.class.getSimpleName(), saddleid).getKey(); 

Donc, la génération de clés est plus de travail pour la situation 1, et je me demande si je devrais passer à la situation 2 au lieu, si je ne gagne aucun avantage sur la plus nidification? Les opérations que je dois faire:

  1. Supprimer un cheval et sa selle.
  2. Créer un cheval avec une selle.
  3. Mettez à jour un cheval et sa selle.
  4. Obtenez un cheval par lui-même.
  5. Obtenez un cheval et sa selle en même temps.

Les deux modèles me donnent tout ce qui précède, je pense. Peut-être que le modèle n ° 1 offre l'avantage que l'ensemble de l'objet Utilisateur n'a pas besoin d'être verrouillé lors de l'exécution d'opérations uniquement sur une selle?

Merci

Répondre

2

par the docs:

Chaque entité avec une entité racine donnée comme un ancêtre est dans le même groupe entité . Toutes les entités d'un groupe sont stockées dans le même nœud de magasin de données.

Et:

groupes d'entités Utiliser uniquement quand ils sont nécessaires aux transactions. Pour les autres relations entre les entités, utilisez les propriétés ReferenceProperty et les valeurs Key , qui peuvent être utilisées dans les requêtes.

Les deux modèles aboutissent à un groupe d'entités par utilisateur, quel que soit l'imbrication. Si vous souhaitez simplement représenter une hiérarchie d'objets, vous devez éviter complètement les groupes d'entités et utiliser ReferenceProperty.