我有一个NDB模型。一旦模型中的数据变得陈旧,我想从搜索和更新中删除过时的数据项。我可以删除它们,这在this SO post中有解释,如果不是因为以后需要分析旧数据。 我看到两个选择
我对这两个选项之间权衡的理解
问题: 可以使移动实体选项足够快,以便与标记删除相媲美吗? 关于如何有效地在模型之间移动实体的任何示例代码?
更新:2014-05-14,我决定暂时使用mark-deleted。我认为还有更少的RPC可以带来额外的好处。
相关:
答案 0 :(得分:0)
你可以使用你提出的解决方案的组合,虽然在我脑海中,我认为这是一个过度工程。
1)首先,编写一个任务队列,使用默认值is_deleted
更新您的新字段False
的所有实体,这将阻止所有以前的实体返回错误当你问他们是否被删除时。
2)在模型级别编写查询,因此您无需在模型中进行任何更改时更改它们,而只需在进行相关查询时传递要过滤的额外参数。您可以从引导项目gae-init的模型中获得一个想法。您可以使用is_deleted = False
查询它们。
3)如果您要查询10个实体或10 M个实体,BigTable的性能不会受到影响,但如果您想在新的实体模型中移动已删除的实体,您可以尝试创建裁剪作业,以便在最后他们在其他地方{或3}他们的一天或其他东西,删除原来的。不要忘记,这将使用你的配额,你会介意最终支付清理费用。
请记住,如果您要移动的实体存在任何依赖关系,您还必须更新它们。因此,在我看来,最好让它们标记,并为你的旗帜编制索引。