这个问题没有单一的正确答案。最佳解决方案主要取决于您的实体在任何特定时间可能处于删除状态的百分比。
一种选择是存储领域像@Index(IfTrue.class) boolean active;
和该过滤器添加到所有查询:
ofy.load().type(Thing.class).filter("size >", 20).filter("active", true)
这样做的缺点是,它需要添加额外的索引 - 也可能是多个,因为你现在可能需要多属性单一财产指数可以满足的指标。
或者,您可以存储“已删除”标志并从查询结果中手动排除已删除的实体。需要维护的索引较少,但当您拉回不需要的记录时,它会为每个查询增加额外的开销。如果你删除的条目稀少,这不会有问题。
最后一招。您可能会发现最好将已删除日期的索引存储起来,因为它可能是最有用的:@Index Date deleted;
这可让您filter("deleted", null)
获得活动项目,并且还可以让您按datestamp进行过滤,以获取您可能希望清除的旧实体。但是,请注意,这会导致删除的日期索引到任何多属性索引,如果您的删除实体的百分比较高,可能会显着增加索引大小。在这种情况下,您可能希望@Index(IfNull.class) Date deleted;
并使用map-reduce清除足够旧的实体。
只有一个数据存储区。你可能意味着相同的实体类型。 – 2012-04-24 11:28:33
是的......我的意思是相同的实体类型。感谢彼得的更正 – 2012-04-24 13:37:25