2012-04-16 133 views
1

我有以下Objectify实体将数据存储在Google DataStore中。查询Google DataStore

public class Record implements Serializable { 

    private static final long serialVersionUID = 201203171843L; 
    @Id 
    private Long id;     
    private String name;   // John Smith 
    private Integer age;   // 43 
    private String gender;   // Male/Female 
    private String eventName;  // Name of the marathon/event 
    private String eventCityName; // City of the event 
    private String eventStateName; // State of the event 
    private Date eventDate;   // event date 

    //Getters & Setters 
} 

现在,我的问题是,我该如何查询我的数据库来获取记录计数对于给定eventName的或事件城+国?或者获取所有城市+名称的列表。

回答

1

在App Engine计数是very expensive:您基本上需要查询某些条件(eventName = something),然后计算所有结果。成本是一个关键的查询(1次读取+1次小操作),并随着计数的实体数量而增加。例如,计算100万个实体的成本为0.8美元。

通常做的事情是保持事物在专用实体内的数量:在计数增加时增加属性值(实体添加)并在实体删除时减少(实体删除)。

如果您打算在更大范围内执行此操作,那么您应该了解每个实体(实体组实际)大约有5次写入/更新的写入/更新限制。有关如何解决此问题,请参阅sharded counters