Question

Le magasin de données Google App Engine étant basé sur la Bigtable , nous savons que ce n'est pas une base de données relationnelle, comment concevez-vous un schéma de base de données / modèle de données pour les applications utilisant ce type de système de base de données?

Était-ce utile?

La solution

La conception d’un schéma bigtable est un processus ouvert, qui nécessite essentiellement que vous réfléchissiez à:

  • Les modèles d'accès que vous utiliserez et leur fréquence d'utilisation
  • Les relations entre vos types
  • De quels indices aurez-vous besoin
  • Les modèles d'écriture que vous utiliserez (afin de répartir efficacement la charge)

Le magasin de données de GAE dénormalise automatiquement vos données. Autrement dit, chaque index contient une copie (la plupart du temps) complète des données et chaque index augmente donc considérablement le temps nécessaire pour effectuer une écriture et l'espace de stockage utilisé.

Si ce n’était pas le cas, la conception d’un schéma de banque de données nécessiterait beaucoup plus de travail: vous devrez réfléchir attentivement à la clé primaire de chaque type et examiner l’effet de votre décision sur la localité des données. Par exemple, lors du rendu d'un article de blog, vous devrez probablement afficher les commentaires qui l'accompagnent. Ainsi, la clé de chaque commentaire commence probablement par la clé de l'article associé.

Avec Datastore, ce n’est pas si grave: la requête que vous utilisez ressemblera à "Select * FROM Comment WHERE post_id = N.". (Si vous souhaitez rechercher les commentaires, vous devez également disposer d'une clause limit et d'un suffixe éventuel "AND comment_id", last_comment_id ".) Une fois cette requête ajoutée, Datastore construira l'index pour vous et vos lectures. sera magiquement rapide.

Il convient de garder à l'esprit que chaque index supplémentaire crée un coût supplémentaire: il est préférable d'utiliser aussi peu de modèles d'accès que possible, car cela réduira le nombre d'indices construits par GAE, et donc la mémoire totale requise. par vos données.

En relisant cette réponse, je la trouve un peu vague. Peut-être qu'une question pratique sur la conception aiderait à cerner le problème? : -)

Autres conseils

Vous pouvez utiliser www.web2py.com. Vous construisez le modèle et l’application une fois, et cela fonctionne sur GAE mais aussi avec SQLite, MySQL, Posgres, Oracle, MSSQL, FireBird

Alors que GAE s'appuie sur la gestion des données dans Django, de nombreuses informations sur la manière de traiter des questions similaires dans la documentation de Django (par exemple, consultez la page ici , faites défiler jusqu'à" Votre premier modèle ").

En bref, vous concevez votre modèle de base de données comme un modèle d’objet standard et laissez GAE trier tous les mappages relation-objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top