2017-07-20 4 views
0

En regardant le docs Je ne pouvais pas trouver une bonne explication comment structurer des données, quand il y a une relation à plusieurs. Le problème est qu'une seule requête prend beaucoup de temps, donc ce n'est pas une bonne solution pour faire plusieurs requêtes.Google Datastore une relation à plusieurs en Java

Supposons que la structure suivante:

Entity 
    Key(String hash) value(String) ...other values 

    User 
    Key(String hash) Entity Key(String hash) 

Maintenant, si je peux demander à toutes les entités de l'utilisateur clés de hachage et pour chaque clé faire une requête pour obtenir des valeurs réelles, mais ce n'est pas une option depuis qu'il a fait autant de requêtes que beaucoup Les entités attribuées à l'utilisateur prennent trop de temps.

Comment dois-je structurer mes données, ou comment faire une seule requête pour récupérer toutes les données de l'utilisateur?

Répondre

0

Compte tenu du scénario suivant -

  • UserEntity
  • NotesEntity

Un utilisateur a zéro ou plusieurs notes (un à plusieurs)

Une approche consiste à définir UserEntity comme Parent pour chaque entité de billets

  • UserEntity - clé, Nom, Email
  • NotesEntity - Key, Key parent (utilisateur), Remarques Date, Notes Description

Maintenant, pour récupérer tout ou une page de notes pour un utilisateur donné, vous pouvez simplement exécuter une requête ancêtre comme ci-dessous:

SELECT * FROM NotesEntity WHERE __key__ HAS ANCESTOR a_user_key 
+0

Mais à quoi cela ressemblerait-il en utilisant le magasin de données? Aussi, je dois supposer que NotesEntity peut avoir plusieurs parents. –

+0

Veuillez consulter la documentation - https://cloud.google.com/datastore/docs/concepts/entities#ancestor_paths. Si un NotesEntity peut avoir plusieurs parents (Utilisateurs), alors il devient une relation plusieurs-à-plusieurs, pas un-à-plusieurs. –

+0

Vous avez raison, ma mauvaise. Alors devrais-je utiliser une clé parent multi-niveau? –