Как использовать транзакции хранилища данных GAE со связями «многие ко многим»? - PullRequest
1 голос
/ 24 октября 2010

У меня есть модуль данных, который включает Vendor объекты и VendorCategory объекты. У каждого поставщика есть несколько категорий, и у каждой категории может быть несколько поставщиков. Мне нужно перечислить всех поставщиков в данной категории, и все категории в рамках данного поставщика.

Основные операции выполняются на поставщиках, поэтому я пишу код для обновления / удаления VendorCategory объектов на основе операций редактирования на поставщиках.

Я бы хотел бы , чтобы эти операции были транзакционными: т. Е. Категория поставщика обновляется, если обновляется / исчезает / редактируется поставщик, а не иначе Но у меня есть вещи, настроенные как неизвестные отношения «многие ко многим», поэтому AFAIK невозможно использовать транзакции, поскольку они находятся в разных группах сущностей.

Есть ли лучший способ смоделировать эти отношения? Нужно ли мне просто смириться с этим и жить с нетранзакционной природой зверя? Я думал об использовании очереди задач для периодической очистки и очистки отношений, это лучший способ?

Ответы [ 2 ]

2 голосов
/ 24 октября 2010

Добавьте транзакционную задачу для обновления VendorCategory при внесении изменений в Vendor. Задача будет добавлена ​​только в случае успешной записи в хранилище данных. Обработайте обновление и удаление категорий в своей собственной транзакции внутри задачи.

Возможно, вы захотите проверить " Создание высокопроизводительных конвейеров данных с помощью Google App Engine " из Google IO 2010. В частности, материал о материализованных представлениях.

0 голосов
/ 26 октября 2010

Я недавно написал в блоге сообщение о различных способах создания много-много отношений в App Engine .То, что вы выберете, зависит от вашей ситуации и от «владения» - например, если поставщик «владеет» своим списком категорий, вы можете проще всего сохранить его в виде списка в сущности поставщика.

...