用户提交与“地形图”关联的矩形轴对齐区域。用户可以随时删除他们创建的区域。
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在Task中更新,因此这必须是幂等操作 - 我只能通过事务性地抓取一批RegionUpdate实体,然后将它们应用到TerrainMap来实现这一点。
这使得我的实体组比“单个用户的数据或更小的数据”的“经验法则”规模大得多。
我是否会忽略一些更好的方式来模拟这个?
答案 0 :(得分:0)
正如我在Reddit问题中所建议的那样,我认为Brett's data pipelines talk拥有构建此问题所需的所有信息。基本方法是:每次插入或更新区域时,在同一实体组中添加“标记”实体。然后,在该任务中,使用新数据更新相应的TerrainMap,并将Marker实体作为其子项,表明您已应用该更新。有关详细信息,请参阅演讲。
另一方面,您没有指定每个TerrainMap期望的区域数,或者它们更新的频率。如果单个地形图的更新速率不是很大,您可以简单地将所有区域存储为它们应用的TerrainMap的子实体,并在单个事务中同步或在任务队列上更新映射,这很多简单。