Я моделирования Google хранилищу с объективизации и часть моего датасторе имеет эти 3 элемента:объективизации POST/LIKE/USER Отношения
пользователя Сообщение новое сообщение, которое может понравиться многим пользователям (типичная социальная сеть).
До сих пор я Пользователь:
@Entity
public class UserMW {
@Id
private Long id;
@Index
private String email;
...
}
Сообщение:
@Entity
public class PostMW{
@Id
private Long id;
@Load
private Ref<UserMW> owner;
...
}
И, как:
@Entity
public class LikeMW {
@Id
private Long id;
@Load
private Ref<UserMW> user;
private Key likedObject;
...
}
Он прекрасно работает и отвечает всем моим потребностям до сих пор. Проблема в том, что я не знаю, по какому пути я должен идти в отличие от поста (удалить объект из рода Likes).
У меня есть пользователь и likedObject ключ, чтобы удалить его, так что если это было в реляционной базе данных было бы очень просто (просто удалить с «где» по ID_пользователя и likedObjectID), но на объективизации ...
Я мог бы подумать о 2 способах:
1 - @index по обоим атрибутам Likes entity, затем запрашивает его и удаляет (но @Index так дорого, а таблица Likes будет гигантской!) Не звучит как хорошая Идея)
2 - @Parent по атрибуту пользователя Likes entity и @Index на понравившемся объекте, затем запрос по предку, а затем фильтр по полю избранным пользователем. d delete (но если я использую @Parent, я все время понимаю, что загружаю 1 пользователя, я загружу ВСЕ ЕГО ЛЮБОВЬ, и, как я уже сказал, таблица Likes станет гигантской! Не звучит также как хорошая идея)
Любое предложение для решения моей проблемы?
Спасибо, ребята!
Похоже, что добавление еще одного индекса вашей модели «Like» - это путь ... Что касается дорогого - индексы теперь бесплатны (но хранение по индексам - нет). Что заставляет вас думать, что это сделает Likes - гигант? –
Причина Любит собирать все понравившиеся для всего приложения. На данный момент он реализован для хранения только понравившихся сообщений, но очень скоро мы добавим функцию, которая позволит пользователю любить картинки, комментарии, сообщения и т. Д. Также, как и в facebook. Так что Likes будет иметь так много сущностей. Индексы дороги, потому что GAE Datastore взимает плату за запись, и каждый индекс внутри каждого объекта записывается дважды. Я прав @MihailRussu? –
Пер [Новая цена Datastore] (https://cloudplatform.googleblog.com/2016/03/Google-Cloud-Datastore-simplifies-pricing-cuts-cost-dramatically-for-most-use-cases.html) 'writing единый объект стоит всего 1 писать независимо от индексов и теперь будет стоить 0,18 доллара за 100 000. Вы можете использовать столько индексов, сколько требуется вашему приложению, без увеличения расходов на запись. « Индексы по-прежнему сохраняют память и влияют на производительность, но при их использовании вы можете быть немного более либеральными. Я лично думаю, что вы делаете это преждевременная оптимизация и будет идти с другим индексом, но я ошибся ... :) –