如何在googleappengine for python中为NDB模型传输多个实体?

2024-04-26 06:06:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个NDB模型。一旦模型中的数据过时,我想从搜索和更新中删除过时的数据项。如果不是为了以后分析旧数据的需要,我本可以删除它们,这在this SO post中有解释。 我看到两个选择

  1. 添加一个布尔状态字段,并简单地将实体标记为已删除
  2. 将实体移动到其他模型

我对这两种选择之间权衡的理解

  1. 标记删除速度更快
  2. 标记为已删除更容易出错:如果有额外的列,则需要修改所有查询以排除标记为已删除的实体。这将增加复杂性和出现错误的可能性。你知道吗

问题: “移动实体”选项的速度是否可以与“标记已删除”相媲美? 如何在实体之间高效地移动代码?你知道吗

更新:2014-05-14,我决定暂时使用mark deleted。我认为减少rpc还有一个额外的好处。你知道吗

相关:

  1. How to delete all entities for NDB Model in Google App Engine for python?

Tags: 数据标记模型实体forso错误可能性
1条回答
网友
1楼 · 发布于 2024-04-26 06:06:15

你可以把你提出的解决方案结合起来,尽管在我看来,这是一种过度工程。你知道吗

1)首先,编写一个任务队列,用新字段is_deleted更新所有实体,并使用默认值False,这将防止在询问之前的所有实体是否被删除时返回错误。你知道吗

2)在模型级别编写查询,这样在模型中进行更改时就不必更改它们,只需在进行相关查询时传递要过滤的额外参数。您可以从引导程序项目gae-init的模型中得到一个想法。您可以使用is_deleted = False查询它们。你知道吗

3)如果您正在查询10个实体或1000万个实体,BigTable的性能不会受到影响,但是如果您想在新的实体模型中移动已删除的实体,您可以尝试创建一个裁剪作业,以便在一天结束时copy将它们移到其他地方并删除原始实体。别忘了这将使用你的配额,你介意最终支付字面上的清理。你知道吗

还要记住,如果对要移动的实体有任何依赖关系,则还必须更新它们。因此,在我看来,最好是让他们标记,并索引您的旗帜。你知道吗

相关问题 更多 >