关系数据库支持的一个好东西是聚合函数,如 count、sum、avg 等。但似乎如果你使用 GAE,当插入或更新记录时你必须计算和存储 count、sum、avg等整个表的值。但是,如果您有很多条件分组怎么办?给定一个人:
class Person {
@Id
Integer age;
String city;
}
如果我愿意
- 总人数 和
- 平均年龄
每次我创建、更新或删除一个人时,我也应该计算这两个聚合并将它们作为单独的列存储在同一个表中,这是否正确。如果我还想要每个城市的总值和平均值,我是否应该将每个城市的这些值也作为单独的列存储在同一个表中?
最佳答案
正确:要正确使用 GAE 存储,您需要有选择地对模型的某些方面进行反规范化,保留“冗余”数据,在正常形式的数据库中,您可以即时重新计算这些数据,例如聚合 (总体和“按”分组)。
但是,在您的情况下,不要将此类字段添加到 Person
表中——这毫无意义!创建另一个 PersonAggregates
表,其中包含 City(总计为空/缺失)、Count、TotalAges(更易于维护:计算任何时间的平均值,即总计除以计数)。
关于google-app-engine - 有没有办法在 Google App Engine 上执行聚合函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/993059/