0

У меня плохое понимание. Обозначьте понятия отношений сущностей. Предположим, что у меня есть сущности User и UsersAction.Задавайте, эффективные отношения. Ref <> vs для хранения идентификационных и дублирующих полей

class User{ 
    String nick; 
} 

class UsersAction{ 
    Date actionDate; 
} 

Сейчас в вайя-конце приложении, которое я хочу, чтобы загрузить много UsersActions и отобразить его вместе с соответствующим ник пользователя. Я знаком с двумя понятиями, которые касаются этого:
Использование Ref <>,
Я могу поместить @Load Ref в UsersAction, поэтому он создаст связь между этим entites. Позже, при загрузке Действия Пользователя, Objectify загрузит надлежащего Пользователя.

class User{ 
    String nick; 
} 

class UsersAction{ 
    @Load Ref<User> user; 
    Date actionDate; 
} 

магазин Id и дублировать ник в UsersAction:
Я также могу Id магазин пользователя в UsersAction и дублировать ник пользователя при сохранении UsersAction.

class User{ 
    String nick; 
} 

class UsersAction{ 
    Long usersId; 
    String usersNick; 
    Date actionDate; 
} 

При использовании реф <>, насколько я понимаю, объективировать загрузит все необходимые UsersActions, то все соответствующие пользователи. При использовании дублирования Objectify нужно будет загружать UserActions, и все данные будут там. Теперь, мой вопрос. Есть ли существенная разница в производительности, между этими подходами? Эффективность - мой приоритет, но второе решение кажется уродливым и опасным для меня, поскольку оно вызывает дублирование данных, и когда Пользователь меняет свой ник, мне также нужно обновить его действия.

ответ

1

Вы спрашиваете, лучше ли denormalize прозвище. Трудно сказать, не зная, какие запросы вы планируете запускать, но, вообще говоря, ответ, вероятно, нет. Это звучит как преждевременная оптимизация.

Вы можете подумать о том, что пользователь User @Parent Ref<?> пользователя UserAction. Таким образом, родитель будет загружен одновременно с действием в том же объеме. До тех пор, пока он соответствует вашей требуемой пропускной способности транзакции (не более 1 изменения в секунду для всей группы объектов пользователя), она должна быть прекрасной.

+0

Im, обсуждая, что решения с моим другом и он остается, что денормализация более эффективна, beacause Ref приведет к дополнительной нагрузке. Но я думаю, поскольку я помещал эти два объекта в одну группу сущностей, а Пользователь загружался ключом, это не повлияет на производительность. Я прав? – KrzysztofW

+1

Это, вероятно, не будет иметь заметного влияния, поскольку родительский и дочерний объекты загружаются параллельно. Но это преждевременная оптимизация; не беспокойтесь об этом! – stickfigure