2010-12-31 4 views
1

Hey, J'utilise AppEngine pour une application que j'écris. J'ai donc besoin d'assigner des tags à chaque objet. Je voulais savoir quelle est la meilleure façon de le faire. Dois-je créer une chaîne de balises séparées par un espace, puis interroger quelque chose comme% search_tag% (je ne suis pas sûr si vous pouvez le faire dans JDOQL)?Schéma d'étiquetage pour AppEngine

Quelles autres options ai-je? Dois-je créer une autre classe qui maquettera chaque objet sur une étiquette?

Quel serait le meilleur du point de vue de l'évolutivité, des performances et de la facilité d'utilisation?

Merci

Répondre

2

D'abord, les requêtes '% search_tag%' type 'LIKE' ne fonctionnent pas sur le datastore App Engine. Le mieux que vous pouvez faire est une recherche de préfixe.

Il est difficile de répondre à des questions très générales comme celle-ci. La meilleure solution dépendra de plusieurs facteurs, combien de tags espérez-vous par entité? Y a-t-il une limite au nombre de tags? Comment allez-vous utiliser les tags? Pour chercher? Pour l'affichage seulement? Les réponses à toutes ces questions ont une incidence sur la façon dont vous devez concevoir vos modèles.

Une solution générale pour le marquage consiste à utiliser une propriété à valeurs multiples, telle qu'une liste d'étiquettes. Sachez que si vous disposez de nombreuses balises sur vos entités, cela ajoutera un surcoût au moment de l'écriture, car les index écrits ont également besoin de temps. En outre, vous devez essayer d'éviter d'utiliser des propriétés à valeurs multiples plusieurs fois (ou plusieurs propriétés à valeurs multiples) dans des requêtes avec des inégalités ou des ordres. Cela peut conduire à des «exploding indexes», car une ligne d'index est écrite pour chaque combinaison des champs indexés.

+0

Le nombre d'écritures sera négligeable par rapport au nombre de lectures. Aussi, j'ai l'intention de définir des relations entre les balises, comme un thésaurus. Par exemple. la programmation et le codage doivent être associés. C'est une histoire différente, puisque le nombre d'étiquettes est beaucoup plus petit. Merci pour le lien – user513590