2010-11-22 42 views
2

Je suis en train de développer une application avec Google App Engine et je suis tombé sur le scénario suivant, qui peut être décrit comme "MVP -lite".Utilisez une propriété ListProperty ou une propriété de tuple personnalisée dans App Engine?

Lors de la modélisation de relations plusieurs-à-plusieurs, the standard property to use is the ListProperty. Très probablement, votre liste est composée des clés étrangères d'un autre modèle. Cependant, dans la plupart des applications pratiques, vous aurez généralement besoin d'au moins un détail supplémentaire lorsque vous obtiendrez une liste de clés - le nom de l'objet - afin que vous puissiez construire un lien hypertexte vers cet objet. Cela nécessite de boucler votre liste de clés et de saisir chaque objet pour utiliser sa propriété "name".

Est-ce la meilleure approche? Parce que "les lectures ne coûtent pas cher", est-il acceptable d'obtenir chaque objet même si je n'utilise qu'une seule propriété pour le moment? Ou devrais-je utiliser une propriété spéciale comme tipfy's JsonProperty pour enregistrer un (clé, nom) "tuple" pour éviter les extractions supplémentaires?

Répondre

1

Bien que les lectures de magasin de données soient comparativement à, elles réduisent le temps de traitement des requêtes. Y compris les noms des objets ainsi que leurs clés étrangères ressemble à une bonne utilisation de la dénormalisation (par exemple, utilisez deux propriétés de liste pour simuler un tuple - l'une contient les clés étrangères et l'autre contient le nom correspondant). Si vous décidez contre cette dénormalisation, alors je vous suggère de récupérer par lots les entités auxquelles les clés étrangères se réfèrent (plutôt que de les obtenir une par une) afin de pouvoir au moins minimiser le nombre d'allers-retours que vous faites vers le magasin de données.

+0

Le maintien de deux listes est plus risqué que le maintien d'une liste de propriétés: chaînes de valeurs ("tuples")? Ou est diligent à propos de l'utilisation de l'insert (i, x) et de l'enlèvement (x) suffisant? –

+0

Je crois que deux listes sont la conception supérieure - alors vous n'avez pas besoin d'analyser/extraire les valeurs de tuple des chaînes. –

1

Lors de la modélisation d'un à plusieurs (ou, dans certains cas , plusieurs à plusieurs) relations, la propriété standard à utiliser est le ListProperty.

Non, lors de la modélisation de relations un-à-plusieurs, la propriété standard à utiliser est ReferenceProperty, du côté 'many'. Ensuite, vous pouvez utiliser une requête pour récupérer toutes les entités correspondantes.

Retour à la question d'origine: Si vous avez besoin de plus de données, dénormaliser. Stockez une liste de titres à côté de la liste des clés.

+0

Merci pour la clarification, Nick. J'ai édité ma question pour les futurs lecteurs. J'ai également commenté ci-dessus sur le maintien de deux listes. Est-ce préférable d'avoir une liste de "tuples"? –

+0

Cela dépend s'il existe un moyen naturel de sérialiser vos tuples et comment vous voulez interroger vos modèles. –