Google app engine 在Google App Engine中检索大型实体的开销

Google app engine 在Google App Engine中检索大型实体的开销,google-app-engine,Google App Engine,我在GoogleAppEngine数据存储中有一些实体,它们可能相当大(因为它们有blob,所以可能有1MB的数据)。让我们假设我有一个具有以下字段的实体类(使用Python作为示例,但语言与此无关): 现在,当我进行查询时,我得到一个File类型的对象,这可能意味着数据库和web服务器之间将有1MB的数据传输,并且将创建1MB的Python对象。这些假设正确吗 如果是这样,如果我想显示一个文件表而不检索它们的所有内容,我会进行如下查询 SELECT * FROM File ORDER BY n

我在GoogleAppEngine数据存储中有一些实体,它们可能相当大(因为它们有blob,所以可能有1MB的数据)。让我们假设我有一个具有以下字段的实体类(使用Python作为示例,但语言与此无关):

现在,当我进行查询时,我得到一个
File
类型的对象,这可能意味着数据库和web服务器之间将有1MB的数据传输,并且将创建1MB的Python对象。这些假设正确吗

如果是这样,如果我想显示一个文件表而不检索它们的所有内容,我会进行如下查询

SELECT * FROM File ORDER BY name ASC
然后显示每个文件的名称和大小的表格。我认为这实际上会将每个文件的完整内容从数据存储区拉入Python对象,这是正确的吗

由于GQL不允许像“
SELECT(name,size)FROM…
”这样的SQL,因此我认为除了为每个文件的实际内容创建一个单独的实体之外,没有其他方法可以解决这个问题

class FileContents(db.Model):
    contents = db.BlobProperty()

class File(db.Model):
    name = db.StringProperty()
    size = db.IntegerProperty()
    contents = db.ReferenceProperty(FileContents)

这是正常的做法吗?还有别的解决办法吗?请注意,我不想使用Blobstore服务,因为这需要启用计费功能。

是的,您的假设是正确的,是的,您需要两个模型才能仅选择名称字段。

感谢您确认我的怀疑。您可以使用Blobstore来存储文件,而不是数据存储,并使用
db.BlobReferenceProperty
@Nick Johnson,正如我在问题中所说:“请注意,我不想使用Blobstore服务,因为这需要启用计费功能。”;我确实开发了一个blobstore应用程序,当我上传它时失败了。
class FileContents(db.Model):
    contents = db.BlobProperty()

class File(db.Model):
    name = db.StringProperty()
    size = db.IntegerProperty()
    contents = db.ReferenceProperty(FileContents)