我已经越来越多地进入app引擎,并且有点担心数据存储区中每个对象使用的空间(我正在使用java)。对于每个记录,看起来像对象字段的名称被编码为对象的一部分。因此,如果我有很多微小的记录,用于编码字段名称的额外空间可能会成为我数据存储使用的一个重要部分 - 这是真的吗?
如果是真的,我想不出任何好的策略 - 例如,在游戏应用程序中,我想在每次用户移动时存储记录。这将导致存储许多小对象。如果我要重写并使用存储用户所做的所有移动的单个对象,那么序列化/反序列化时间会随着移动列表的增长而增加:
所以:
// Lots of these?
class Move {
String username;
String moveaction;
long timestamp;
}
// Or:
class Moves {
String username;
String[] moveactions;
long[] timestamps;
}
我正确地解释权衡吗?
谢谢
答案 0 :(得分:2)
您的评估完全正确。您可以通过选择较短的字段名称来减少开销;如果您的映射框架支持它,那么您可以为较短的名称添加别名,以便您可以在应用程序中使用更加用户友好的名称。
您将移动聚合到单个实体的想法可能是一个好主意;这取决于您的访问模式。如果您经常只需要在一次移动中访问信息,那么您所花费的时间将随着移动次数而增长是正确的,但如果您经常访问顺序移动列表,则这不是问题。一种可能的折衷方案是将移动分成组 - 例如,每百次移动一个实体。