Пользователи отправляют прямоугольные выровненные по оси области, связанные с «картами местности».В любое время пользователи могут удалять созданные им области.
class Region(db.Model):
terrain_map = reference to TerrainMap
top_left_x = integer
top_left_y = integer
bottom_right_x = integer
bottom_right_y = integer
Я хочу сохранить «карту высоты местности», которая постепенно обновляется по мере добавления или удаления новых прямоугольных областей.
class TerrainMap(db.Model):
terrain_height = blob
Вот «рисунок» того, как карта может выглядеть с двумя перекрывающимися регионами: http://pastebin.com/4yzXSFC5
Поэтому я подумал, что мог бы сделать это, добавив модель RegionUpdate, созданную при создании или удалении объекта Region., а также ставит в очередь задачу, которая будет обрабатывать запрос для "RegionUpdate.applied = False"
class RegionUpdate(db.Model):
terrain_map = reference to TerrainMap
top_left_x = integer
top_left_y = integer
bottom_right_x = integer
bottom_right_y = integer
operation = string, either "increase" or "decrease"
applied = False/True
Проблема заключается в том, что все объекты RegionUpdates и Region должны находиться в той же группе объектов, что и их TerrainMap: RegionUpdates должен создаваться только тогда, когда объекты Region создаются или удаляются, поэтому это должно быть сделано транзакционно;TerrainMap.terrain_height обновляется в задаче, поэтому это должна быть идемпотентная операция - я могу думать об этом только путем транзакционного захвата пакета сущностей RegionUpdate, а затем применения их к TerrainMap.
Это делает мою сущностьгруппа намного больше, чем «практическое правило» размером около «данных одного пользователя или меньше».
Я пропускаю какой-то лучший способ смоделировать это?