1

J'ai une application sur laquelle j'ai un ensemble de données qui, sans être techniquement statiques, ne changera pas très souvent (disons 3 ou 4 fois par an en moyenne). Cependant, certaines de ces données sont interdépendantes. Un exemple de ce type de données serait les états et les comtés - idéalement, nous aimerions connaître tous les états disponibles lors de la mise en place d'une adresse ou d'un lieu, mais nous aimerions également connaître les comtés disponibles pour chaque état. , donc nous pouvons afficher cette information de manière appropriée à l'utilisateur (c'est-à-dire filtrer les comtés inappropriés lorsqu'un utilisateur a un état sélectionné). Par le passé, je l'ai fait dans une base de données relationnelle en ayant une table d'état et de comté, où le comté est lié à l'état auquel il appartient, et l'état et les comtés sont liés à toutes les tables qui ont besoin de leur information. Cependant, ces données ne sont pas la propriété et, dans le magasin de données Google, il semble que le mécanisme de transaction de verrouillage provoque des verrous même si nous ne modifions pas activement ces données. Quelle est la meilleure façon de gérer ce type de données? Est-ce d'avoir une entité pour les pièces qui n'a pas de parent (parent de None/null)? Cela va-t-il causer des problèmes de verrouillage dans le futur?Comment gérer les "données de référence" (données statiques) dans le magasin de données Google App Engine?

+0

Pourquoi pensez-vous que le mécanisme de transaction provoquera des verrous? Les transactions s'appliquent uniquement aux groupes d'entités. Quelle entité comptez-vous faire contre les écritures? –

+0

@ DaveW.Smith Je parle des entités que je charge - dans cet exemple, les états et les comtés en particulier. Je ne prévois pas de leur écrire, mais je pensais lire cette lecture lors d'une transaction qui bloquerait plusieurs groupes d'entités si des multiples étaient lus - je pourrais très bien me tromper là-dessus. – aperkins

+0

Je pense que vous vous trompez là-dessus. –

Répondre

3

Je considérerais stocker ceci dans une structure de données optimisée dans votre code et la mettre à jour manuellement. Le gain de performance sera énorme, et puisque Google vous facture pour cela, vous finirez par le remercier. L'idée est de mélanger ces structures de données fixes avec votre base de données, de sorte que vous donniez un ID à chaque pays (ou quelque chose d'autre) et que vous le référenciez dans vos modèles.

Une approche simple est de dresser une liste de pays et chacun d'eux contient une liste d'états. Vous pouvez les charger dans def main():, avant d'exécuter l'application. Bien sûr, cela apportera toutes sortes de problèmes si vous ne faites pas attention, mais si vous le faites, vous devriez aller bien. Un plus avancé serait de garder en mémoire seulement les pays de charge et de décharge les plus utilisés et les plus paresseux à la volée.

+0

"Bien sûr, cela apportera toutes sortes de problèmes si vous ne faites pas attention" - quels problèmes? Je suis vraiment nouveau à Python ET GAE, donc je ne vois pas le problème exact là. Merci pour la réponse aussi - vraiment utile. :) Qu'en est-il de la définition des structures de données dans un script .py de type constantes? Cela fonctionnerait-il de la même façon que la méthode principale que vous avez mentionnée plus haut? – aperkins

+0

sûr, il suffit de lancer avant de lancer l'application, et def main(): est un super endroit. – fceruti

+0

Un problème que je vois pourrait éventuellement se produire est l'attribution et l'identification à un pays, puis vient un nouveau développeur, le modifie, et votre base de données de trou n'a plus de sens. Thas pourquoi je dis que vous devriez faire attention, comme si vous étiez un moteur MySql! – fceruti

Questions connexes