Использовать свойство ListProperty или пользовательский кортеж в App Engine? - PullRequest
2 голосов
/ 22 ноября 2010

Я разрабатываю приложение с Google App Engine и наткнулся на следующий сценарий, который, возможно, можно описать как « MVP -lite».

При моделировании отношений "многие ко многим" стандартным свойством, которое нужно использовать, является ListProperty . Скорее всего, ваш список состоит из внешних ключей другой модели.

Тем не менее, в большинстве практических приложений вам, как правило, понадобится хотя бы еще одна деталь, когда вы получите список ключей - имя объекта - чтобы вы могли создать хорошую гиперссылку на этот объект. Для этого нужно пройтись по списку ключей и захватить каждый объект, чтобы использовать его свойство «name».

Это лучший подход? Поскольку "чтения читаются дешево", можно ли получить каждый объект, даже если сейчас я использую только одно свойство? Или я должен использовать специальное свойство, такое как tipfy's JsonProperty , чтобы сохранить (ключ, имя)"кортеж", чтобы избежать дополнительных операций?

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

При моделировании отношений один-ко-многим (или в некоторых случаях многие-ко-многим) стандартным свойством, которое нужно использовать, является ListProperty.

Нет, при моделировании одного-в-ко-многим, используемое стандартное свойство - ReferenceProperty со стороны «многие».Затем вы можете использовать запрос для извлечения всех соответствующих объектов.

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

1 голос
/ 22 ноября 2010

Несмотря на то, что чтение из хранилища данных на сравнительно * на 1002 * дешевле, запись в хранилище данных все же может добавить значительное время к обработчику запросов.Включение имен объектов, а также их внешних ключей звучит как хорошее применение денормализации (например, используйте два свойства списка для имитации кортежа - одно содержит внешние ключи, а другое - соответствующее имя).

Есливы решаете отказаться от этой денормализации, а затем я предлагаю вам пакетно извлечь объекты, на которые ссылаются внешние ключи (вместо того, чтобы получать их по одному), чтобы вы могли по крайней мере минимизировать количество обращений в хранилище данных.

...