Массовая запись, когда один объект требует ключ другого - PullRequest
0 голосов
/ 11 октября 2019

Попытка найти хорошее решение для этого. Использование Python и библиотеки NDB.

Я хочу создать сущность, и эта сущность также связана с другой сущностью. Оба созданы одновременно. Примером может служить создание сообщения для большого количества пользователей. У нас есть Inbox таблица / вид и Message таблица.

Так что, как только мы соберем ключи всех пользователей, которых мы хотим, я просто создаю сущность Inbox,сохраняя его, а затем используя предоставленный ключ, он возвращает его и присоединяя к Message, а затем сохраняя Message. Для большого количества пользователей это кажется довольно дорогим. 2 записи на пользователя. Обычно я просто создаю сами объекты, а затем использую ndb.put_multi() для пакетной записи. Поскольку нет Key, пока он не будет сохранен, я не могу этого сделать.

Надеюсь, что это имело смысл. Идеи?

1 Ответ

2 голосов
/ 11 октября 2019

Посмотрите на API allocate_ids. Вы можете передать родительский ключ и получить назначенный идентификатор. Вызов allocate_ids гарантирует, что идентификатор никогда не будет повторно использоваться в контексте этого родительского ключа. allocate_ids - это небольшая и быстрая операция. После того как вы распределили эти идентификаторы, вы можете выполнить put_multi, ссылаясь на выделенные идентификаторы в других сущностях, которые ссылаются на них. Как я понимаю, на сам объект сообщения не ссылаются, и если это так, вам нужно всего лишь выделить идентификаторы для папки «Входящие» (предположительно, если у пользователя его нет) и выполнить multi_put как для входящих, так и для объектов сообщений.

...