SelfReferenceProperty против ListProperty Google App Engine - PullRequest
2 голосов
/ 23 марта 2010

Я экспериментирую с Google App Engine и у меня есть вопрос.

Ради простоты, скажем, мое приложение моделирует компьютерную сеть (довольно большая корпоративная сеть с 10 000 узлов).Я пытаюсь смоделировать свой класс Node следующим образом:

class Node(db.Model):
    name = db.StringProperty()
    neighbors = db.SelfReferenceProperty()  

Давайте на минуту предположим, что я не могу использовать ListProperty ().Основываясь на своих экспериментах на сегодняшний день, я могу назначить «соседям» только одну сущность - и я не могу использовать «виртуальную» коллекцию (node_set) для доступа к списку соседей Node.

Итак ... мои вопросы:

  1. Ограничивает ли SelfReferenceProperty вас одиночным объектом, на который вы можете ссылаться?
  2. Если явместо этого используйте ListProperty, я думаю, что я ограничен 5000 ключами, которые мне нужно превысить.

Обновление

Все закутано в мои шорты, как ябыло, я забыл * ReferenceReleationship "назад" - "список" вещей указывает на одну сторону отношений.SelfReferenceProperty работает так, как я думал.Виноват.Мне все еще нужно разобраться с большой стороной «многих» отношений - и я не думаю, что ListProperty справится с задачей, но я опубликую то, что я найду.

Спасибо, Джон

1 Ответ

1 голос
/ 23 марта 2010

Re 1, да (если я правильно понимаю, что вы спрашиваете): для каждого свойства в модели каждый экземпляр модели (AKA "сущность") имеет одно значение для этого свойства. Так, например IntegerProperty имеет одно целочисленное значение для данной сущности, SelfReferenceProperty имеет одно значение (внутренняя строка ключа) для данной сущности и так далее. Конечно, это не единственное значение для всех экземпляров модуля, но я не верю, что вы это имеете в виду.

Re 2, предел 5000 (вау, это много соседей для одного графа узлов, который имеет всего 10000 узлов!) Я полагаю, вы ссылаетесь на индексы для сущности - эта статья лучше объясняет ограничение.

Один из возможных обходных путей - вообще не иметь свойства neighbors на узлах, а использовать отдельную модель Connection для представления соединения от одного узла к другому (со свойствами ReferenceProperty в соединении, которые каждый обратитесь к узлу). Вам понадобится что-то дополнительное в Соединении (например, прогрессивный подсчет входящих и исходящих соединений для затронутых узлов), чтобы, конечно, иметь возможность извлекать многие тысячи из них (в нескольких запросах, учитывая 1000 в то время ограничение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...