Любое решение для присоединения к движку приложения? - PullRequest
2 голосов
/ 11 августа 2010

У меня есть следующая модель данных:

class StadiumOccupant {
  String stadiumname;
  String username;
}

class Friend {
  String username;
  String friendname;
}

Я хочу найти всех пользователей на стадионе, которые также являются моими друзьями. Я могу сделать это так:

List<String> friendsAtStadium;
String stadiumId = 'xyz';

List<Friend> friends = select from Friend where username = 'me';
for (Friend friend : friends) {
  List<StadiumOccupant> friendAtStadium = 
    select from StadiumOccupant where 
    stadiumname = stadiumId and
    username = friend.friendname;
  friendsAtStadium.addAll(friendAtStadium);
}

Это может работать с очень небольшим количеством объектов. Как только у пользователя будет больше, чем несколько друзей, это не сработает. Есть ли решение для этого на движке приложения? Я не могу думать о том, что хорошо работает.

Спасибо

-------- Некоторые примеры данных --------

Friend { john, tim }
Friend { john, mary }
Friend { mary, frank }

StadiumOccupant { abc, tim }
StadiumOccupant { abc, frank }
StadiumOccupant { abc, kim }

поэтому, если я пользователь 'john', мои друзья: {tim, mary}. если бы я запустил запрос к стадиону с stadiumname = 'abc', я должен был бы вернуться {tim}.

1 Ответ

2 голосов
/ 11 августа 2010

Для небольших объемов данных вы можете делать то, что предлагаете. Для больших объемов данных вы не будете выполнять соединение в любом случае, даже если вы используете базу данных SQL для своего бэкэнда.

Ваша проблема - типичная проблема с данными в социальных сетях. Скорее всего, вы захотите денормализовать свои данные и «протолкнуть» информацию во все списки друзей пользователя, когда они обновляют свой статус, или, возможно, извлекают его, как вы делаете выше. Наилучшее решение зависит от формы ваших данных и типов запросов, которые вы хотите оптимизировать - для поиска или обновления.

См. Мой ответ здесь для получения дополнительной информации, включая сообщение инженера на Facebook.

...