英文:
Create a limited datastore index
问题
我在我的GAE应用程序中有一个查询,看起来像这样:
datastore.NewQuery("item").Ancestor(fk).Order("-PubDate").Limit(10).Run(c)
为了使其工作,我需要一个按PubDate排序的项目索引;自动生成的索引如下所示:
- kind: item
ancestor: yes
properties:- name: PubDate
direction: desc
- name: PubDate
这个索引非常大(约4 GB),但由于Limit()调用,大部分都不会被访问。是否可能让索引只记住每个祖先的10个结果?
英文:
I have a query in my GAE app that looks like this:
datastore.NewQuery("item").Ancestor(fk).Order("-PubDate").Limit(10).Run(c)
In order for this to work I need an index of items ordered by PubDate; the autogenerated one looks like:
- kind: item
ancestor: yes
properties:
- name: PubDate
direction: desc
This index is pretty big (about 4 GB) but most of it will never be touched because of that Limit() call. Is it possible to have the index only remember 10 results for each ancestor?
答案1
得分: 1
同一种类型的两个实体可以具有相同的属性,但一个实体具有该属性的索引,而另一个实体没有索引。
Java运行时中的低级Datastore API允许应用程序决定是否为每个单独的实体索引每个属性。我不知道其他运行时是否存在等效的功能。如果没有,您可以使用两个不同的属性名称来表示索引日期和非索引日期。
因此,从技术上讲,您可以只在索引中保留少量实体。但请注意,您将需要重新保存一个具有未索引属性的实体,以将其从索引中删除。重新保存所有实体将产生额外的成本,因此,如果您无论如何都要为任何其他原因重新保存实体,这个解决方案可能是有意义的。
英文:
It is possible to have two entities of the same kind to have the same property, but one entity having this property indexed and the other unindexed.
The low-level Datastore API in Java runtime allows an app to decide whether to index or not each property for each individual entity. I don't know if an equivalent exists in other runtimes. If not, you can use two different property names to indicate an indexed date and unindexed date.
So technically, yes, you can keep only a small number of entities in the index. Note, however, that you will have to re-save an entity with a property unindexed in order to remove it from that index. Re-saving all entities will incur additional costs, so this solution probably makes sense if you re-save an entity anyway for any other reason.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论