Certaines entités du magasin de données Google App Engine peuvent être très volumineuses (elles contiennent des bogues de 1 Mo). Supposons que j'ai une classe d'entité avec les champs suivants (en utilisant Python pour l'exemple, mais la langue est sans importance):Frais généraux liés à la récupération de grandes entités dans Google App Engine
class File(db.Model):
name = db.StringProperty()
size = db.IntegerProperty()
contents = db.BlobProperty()
Maintenant, quand je fais une requête, je reviens un objet de type File
, qui vraisemblablement signifie qu'il y aura 1 Mo de transfert de données entre la base de données et le serveur Web, et qu'un objet Python de 1 Mo sera créé. Ces hypothèses sont-elles correctes?
Si oui, si je voulais afficher une table de fichiers sans récupérer tout leur contenu, je voudrais faire une requête telle que
SELECT * FROM File ORDER BY name ASC
puis afficher une table du nom et la taille de chaque fichier . Ai-je raison de penser que cela entraînerait le contenu complet de chaque fichier du magasin de données dans un objet Python?
Puisque GQL n'autorise pas un "SELECT (name, size) FROM ...
" de type SQL, je suppose qu'il n'y a aucun moyen de contourner cela, sauf de créer une entité distincte pour le contenu réel de chaque fichier.
class FileContents(db.Model):
contents = db.BlobProperty()
class File(db.Model):
name = db.StringProperty()
size = db.IntegerProperty()
contents = db.ReferenceProperty(FileContents)
Est-ce une pratique normale? Y a-t-il une autre solution? Notez que je ne souhaite pas utiliser le service Blobstore, car cela nécessite que la facturation soit activée.
Merci de confirmer mes soupçons. – mgiuca
Vous pouvez utiliser le blobstore pour stocker le fichier au lieu de la banque de données et utiliser 'db.BlobReferenceProperty'. –
@Nick Johnson Comme je l'ai dit dans la question: "Notez que je ne veux pas utiliser le service Blobstore, car cela nécessite la facturation activée." Ce fait n'est en fait pas très clair; J'ai développé une application blobstore qui a échoué lorsque je l'ai téléchargée. – mgiuca