2010-10-24 6 views
1

J'ai un module de données qui comprend Vendor objets et VendorCategory objets. Chaque fournisseur a plusieurs catégories et chaque catégorie peut avoir plusieurs fournisseurs. Je dois énumérer tous les fournisseurs dans une catégorie donnée, et toutes les catégories sous un fournisseur donné.Comment utiliser les transactions de banque de données GAE avec des relations plusieurs-à-plusieurs?

Les opérations principales concernent les fournisseurs. J'écris donc du code pour mettre à jour/supprimer des objets VendorCategory en fonction des opérations d'édition sur les fournisseurs. Ces opérations doivent être transactionnelles, c'est-à-dire qu'une catégorie de fournisseur a son compte à rebours mis à jour si la création/suppression/modification du fournisseur a été effectuée, et pas autrement. Mais j'ai mis les choses en place comme une relation un-à-plusieurs sans nom, donc je pense qu'il n'est pas possible d'utiliser des transactions, car ils sont dans différents groupes d'entités.

Existe-t-il une meilleure façon de modéliser cette relation? Ai-je besoin de juste l'aspirer et vivre avec la nature non transactionnelle de la bête? J'ai pensé à utiliser la file d'attente de tâches pour passer et nettoyer les relations périodiquement, est-ce la meilleure façon?

+0

j'ai décrit un problème similaire http://stackoverflow.com/questions/3739189/app-engine-jdo-transaction-on-multiple-many-to-one – Patrick

Répondre

2

Ajoutez un transactional task pour mettre à jour VendorCategory lorsque vous apportez les modifications à Vendor. La tâche sera ajoutée uniquement si le magasin de données réussit. Gérer la mise à jour et la suppression des catégories dans leur propre transaction dans la tâche.

Vous voudrez peut-être consulter "Building high-throughput data pipelines with Google App Engine" de Google IO 2010. Spécifiquement les choses sur les vues matérialisées.

0

J'ai écrit récemment un billet décrivant différentes façons de faire many-many relationships in App Engine. Le choix que vous choisissez dépend de votre situation et de la «propriété» - par exemple, si un fournisseur possède sa liste de catégories, vous pouvez le stocker en tant que liste sur l'entité du fournisseur le plus simplement.

+0

J'ai commencé avec un modèle où les vendeurs avaient une liste de catégories , mais j'ai besoin d'obtenir une liste de catégories uniques et les fournisseurs qui appartiennent à une catégorie, alors j'ai tiré les catégories dans leur propre objet. Il se peut très bien que je doive passer à un autre modèle; Je joue encore du violon. – decitrig

Questions connexes