1

Я работаю с GAE и имею пользовательскую таблицу. Теперь я хочу моделировать отношения друзей между пользователями. Я думаю, что у меня есть 3 свойства user1, user2 и request_status, но проблема заключается в поиске друзей конкретного пользователя. Поскольку GAE не разрешает фильтрацию OR, я должен объединить два запроса. Ясно, что это очень неэффективно. Это только одна проблема с моим подходом. Если кто-то может предложить решение, которое позволяет мне отслеживать все запросы друзей, а также дружбу, тогда это было бы очень полезно.Моделирование отношений друзей в GAE

ответ

1

Denormalization позволит вам более эффективно находить друзей пользователя с одним запросом. Попробуйте сохранить другую собственность users (a db.ListProperty) в вашей модели, которая содержит иuser1 и user2. Тогда вы можете просто выполнить запрос, как это, чтобы найти друзей пользователя:

friendships = Friendship.all().filter('users =', user).fetch(...) 

Преимущество заключается в том, что вам нужен только один запрос (быстрее). Недостаток заключается в том, что у вас будет немного дополнительного пространства, чтобы сохранить свойство users и (автоматический) индекс на нем.

+0

Да, но порядок user1 и user2 неясен, если пользователь A был инициатором, чем пользователь user1, иначе он будет user2, – techbeast

+0

, так что уникальность свойства пользователя не существует во всех случаях. – techbeast

+0

Порядок «пользователей» собственность не имеет значения. Когда вы проверяете 'ListProperty' для равенства, он проверяет, если * любой * его элементов равен предоставленному вами значению. Поэтому, если вы сохраните выполнение вышеуказанного запроса, он вернет все сущности 'Friendship', которые либо' user1', либо 'user2' равны' user' (при условии, что вы правильно заполняете 'users'). –