Какой самый эффективный способ установить отношение ONE: ONE в хранилище данных механизма приложений Google - PullRequest
3 голосов
/ 16 августа 2011

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

У меня есть такой код:

class AddlInfo(db.Model)
     user = db.ReferenceProperty(User)
     otherstuff = db.ListProperty(db.Key, indexed=False)

Исоздать запись с помощью:

info = AddlInfo(user=user)
info.put()

Чтобы получить этот объект, я могу сделать что-то вроде:

# This seems excessively wordy (even though that doesn't directly translate into slower)
info = AddlInfo.all().filter('user =', user).fetch(1)

или я могу сделать что-то вроде:

class AddlInfo(db.Model)
     # str(user.key()) is the key to this record
     otherstuff = db.ListProperty(db.Key, indexed=False)

Созданиевыглядит так:

info = AddlInfo(key_name=str(user.key()))
info.put()

А затем получить информацию с помощью:

info = AddlInfo.get(str(user.key()))

Мне не нужно reference_property в AddlInfo, (я получил с помощью объекта пользователя в первомместо).Что быстрее / менее ресурсоемко?

==================

Часть того, почему я делал это таким образом, заключается в том, что другие вещиможет быть список из 100+ ключей, и они мне нужны только иногда (вероятно, менее чем в 50% случаев). Я пытался сделать его более эффективным, не загружая эти 100+ ключей при каждом запросе .....

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Между этими двумя вариантами второй намного дешевле, потому что вы определяете ключ по логическому выводу, а не ищете его в удаленном индексе.

Как сказал Вубл, все еще дешевле просто хранить все в одной сущности. Подумайте о Expando , если вам просто нужен способ хранения нескольких дополнительных специальных свойств.

0 голосов
/ 16 августа 2011

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

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