在我的 Python AppEngine 应用程序中,我有一个 ndb 类,我正在运行 MapReduce 作业,以删除一些不再需要的旧对象。
课程如下:
class UserModel(ndb.Model):
is_backup_object = ndb.BooleanProperty(default=False)
etc.
MapReduce作业如下:
from mapreduce import operation as op
# Note: userobject is an instantiation of UserModel
def mapreduce_update_userobject(userobject):
# This will remove "backup" userobjects from the database, while leaving
# "normal" userobjects alone
if userobject.is_backup_object:
yield op.db.Delete(userobject)
当我运行 MapReduce 作业时,我有许多userobject
要删除的 s ( is_backup_object = True
),其中一些对象没有被删除,即使is_backup_object value
是True
。
问题:
- mapreduce yield 数据存储突变操作是否具有功能
operation.db.Put
并operation.db.Delete
旨在与 NDB 对象一起使用? - NDB 自动缓存是否会干扰已生成对象的删除(或者可能在数据存储查看器中显示过时的对象)?
- 是否有一种特定的方式我们应该产生不同于标准数据库对象的 NDB 对象?
- 对于我目睹的这种奇怪行为,还有其他可能的解释吗?
- 如果我做错了什么,那么使用 mapreduce 有效地批处理 NDB 数据库实体的最佳方法是什么?