【发布时间】:2011-09-02 12:25:57
【问题描述】:
我正在更新和添加来自提要的项目(可能有大约 40000 个项目)到数据存储区一次 200 个项目,问题是提要可能会更改,并且某些项目可能会从提要中删除。 我有这个代码:
class FeedEntry(db.Model):
name = db.StringProperty(required=True)
def updateFeed(offset, number=200):
response = fetchFeed(offset, number)
feedItems = parseFeed(response)
feedEntriesToAdd = []
for item in feedItems:
feedEntriesToAdd.append(
FeedEntry(key_name=item.id, name=item.name)
)
db.put(feedEntriesToAdd)
如何找出提要中没有的项目并将其从数据存储区中删除? 我考虑过创建一个项目列表(在数据存储中),然后从那里删除我更新的所有项目,剩下的将是要删除的项目。 - 但这似乎很慢。
PS:所有 item.id 对于该提要项都是唯一的并且是一致的。
【问题讨论】:
-
最简单的可能是比您开始的日期时间更早的时间,不是吗?或者,如果您不经常更新,实际上提前一点时间可能是谨慎的,以避免任何时钟偏差错误或类似错误。使用带有
auto_now=True的 DateTimeProperty。 -
并删除我开始之前更新的所有实体?
-
是的。或者也许在某处设置一个“我不关心日期时间 X 之前的任何事情”值,并将其用作该实体类型的所有查询中的过滤器。如果您由于未能从提要中提取任何项目而没有清空数据库,那么将来可能会更容易处理出现问题。
-
但这只是在浪费数据存储空间(成本很高),您不觉得吗?
-
嗯,你当然可以最终删除它们,只是我之前编写过从提要更新数据库的代码,当提要提供者出现故障并为你提供空的时候有点烦人暂时喂食。完全取决于您“备份”的成本是否值得,以及是否认为这是一个小故障而不是真正的更新来说不再有任何项目是否有意义。
标签: python google-app-engine google-cloud-datastore feed