Google app engine 当我';是否已禁用数据存储写入?

Google app engine 当我';是否已禁用数据存储写入?,google-app-engine,app-engine-ndb,Google App Engine,App Engine Ndb,我正在尝试使用Mapreduce库在live App Engine应用程序上执行数据存储架构迁移 我的映射器使用DatastoreKeyInputReader。每个映射操作都使用我的旧模式获取旧实体,执行一些数据操作,然后在新模式下写入新实体(具有新类型)。我使用NDB以事务方式获取和放置实体,事务选项“force_writes”设置为True 由于该应用程序处于活动状态,因此我希望在迁移期间阻止所有其他数据存储写入,但映射程序的事务写入除外。不幸的是,虽然一个单独的映射操作可以在禁用写操作的应

我正在尝试使用Mapreduce库在live App Engine应用程序上执行数据存储架构迁移

我的映射器使用DatastoreKeyInputReader。每个映射操作都使用我的旧模式获取旧实体,执行一些数据操作,然后在新模式下写入新实体(具有新类型)。我使用NDB以事务方式获取和放置实体,事务选项“force_writes”设置为True

由于该应用程序处于活动状态,因此我希望在迁移期间阻止所有其他数据存储写入,但映射程序的事务写入除外。不幸的是,虽然一个单独的映射操作可以在禁用写操作的应用程序中将force_writes设置为True时正确运行,但我实际上无法启动Mapreduce作业-它会触发CapabilityDisabled错误,因为Mapreduce库本身在自己的作业簿记中没有使用force_writes

一个明显的黑客可能是在启用写操作的情况下启动作业,然后在作业启动后快速禁用它们。然而,这对我来说似乎相当危险,特别是因为我的应用程序在正常情况下每秒写入数次。另外,一旦作业结束,它可能会中断,除非及时重新启用写入以进行清理


那么,当我还需要禁用数据存储写入时,如何启动Mapreduce作业?似乎mapreduce.yaml支持作业的强制写入选项是最干净的…

mapreduce进程将运行多长时间?如果这不是一个非常长的过程(即不是3天或更长的时间),您可能只需要添加一个默认的handler,将所有流量路由到站点的静态HTML维护页面,然后运行mapreduce作业。一旦完成,您就可以在删除默认处理程序的情况下重新部署