Как смоделировать социальный граф, такой как flockDB, в Google App Engine - PullRequest
4 голосов
/ 14 апреля 2011

FlockDB предоставляет очень хороший способ моделирования социального графа: в системе всего два объекта: Пользователь и Дружба. где Пользователь представляет вершины графа, а дружба представляет ребра между двумя пользователями. Как это:

Пользователь (id, имя, фамилия, имя, дата рождения, регистрационная отметка времени)

Дружба (id, user1_id, user2_id, глубина, другие параметры дружбы ...)

У этого подхода есть ряд преимуществ

  • Вы можете указать параметры для дружбы, как друг, близкий друг, в отношениях
  • Вы можете выбрать, является ли ваша дружба направленной или нет.

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

class User(db.Model):
  name = db.StringProperty()
  age = db.IntegerProperty()
  registeration_ts = db.DateTimeProperty(auto_now_add=True)

class FriendShip(db.Model):
  user1 = db.Key()   // key to some user in user1
  user2 = db.Key()   // key to some user in user2
  creation_ts = db.DateTimeProperty(auto_now_add=True)
  updated_ts = db.DateTimeProperty(auto_now_add=True)

Ответы [ 2 ]

0 голосов
/ 05 сентября 2011

Вместо db.Key() (который является значением, а не классом свойств), используйте db.ReferenceProperty(User).

0 голосов
/ 14 апреля 2011

один из способов будет выглядеть следующим образом:

class User(db.Model):
 name = db.StringProperty()
 friends = db.SelfReferenceProperty(collection_name="subscribers")

Это будет простая модель для представления пользователя и друзей. Но я думаю, что у него будет два недостатка:

  1. Поскольку дружба не является сущностью, мы не можем присвоить ей свойства
  2. так как теперь поддерживается коллекция, я не представляю, как быстро она будет запрашивать, как поиск друзей у друзей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...