Google app engine 将查询转换为投影查询以节省成本

Google app engine 将查询转换为投影查询以节省成本,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我对查询和投影查询之间的区别有点困惑(这是关于将于7月1日生效的新定价)。假设我有这样一种: **POSTS:** post_id -index author -index post_message -index created -index 如果我想查询一个作者的所有文章,我将检索N篇文章,N是作者写的文章的数量。所以,如果他写了100篇文章,我将吃掉100个阅读请求。我可以创建一个虚拟属性,然后将查询转换为投影查询吗。因此,我添加了一个名为dummy的属性,然后进行查询,但只选择id、po

我对查询和投影查询之间的区别有点困惑(这是关于将于7月1日生效的新定价)。假设我有这样一种:

**POSTS:**
post_id -index
author -index
post_message -index
created -index

如果我想查询一个作者的所有文章,我将检索N篇文章,N是作者写的文章的数量。所以,如果他写了100篇文章,我将吃掉100个阅读请求。我可以创建一个虚拟属性,然后将查询转换为投影查询吗。因此,我添加了一个名为
dummy
的属性,然后进行查询,但只选择id、post_message和created(如果我是按它过滤的话,我已经知道了)。这样,只需读取1次即可获得所有这些实体。这可能吗?那么为什么每个人都不这样做以避免查询成本呢?

Projections从索引返回值,而不是从实体本身返回值

在您的示例中,您需要在
(post\u id,post\u message,created)
上创建一个索引,但是如果您想要检索属性,例如
Text
Blob
,则需要获取实体,因为这些属性无法被索引


您还可能会发现,如果要添加属性或更改要投影的属性,则需要构建新索引。因此,虽然它可以为您节省一些实体读取,但您也做出了一些牺牲。

随着7月1日开始的新定价,尽管创建索引是免费的(只是索引的存储将非常昂贵)。所以在我看来,唯一的额外成本是存储索引(我不需要长文本或blob)??我更关心的是我的建议是否可行?这实际上是一个重要的问题:根据您的数据和应用程序,您可能会发现您的许多节省被更高的复合索引存储成本所抵消。