我从一个feed(可能有大约40000个条目)更新并添加条目到数据存储中,一次添加200个条目,问题是feed可能会更改,并且一些条目可能会从feed中删除。 我有这个密码:
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)
如何找出哪些项不在feed中并从数据存储中删除它们? 我想创建一个项目列表(在数据存储中),然后从中删除我更新的所有项目,剩下的将是要删除的项目。-但这似乎相当缓慢。你知道吗
PS:全部项目id对于该提要项是唯一的,并且是一致的。你知道吗
如果使用
auto_now=True
添加DateTimeProperty,它将记录每个实体的上次修改时间。既然你更新了feed中的每一个条目,那么当你完成的时候,它们都会在你开始的那一刻之后出现,所以任何在那之前有日期的东西都不会再出现在feed中了。你知道吗Xavier的生成计数器也很好——我们所需要的只是在刷新之间保证增加,而在刷新期间不会减少。你知道吗
从文档中不确定,但我希望DateTimeProperty大于IntegerProperty。后者是64位整数,因此它们的大小可能相同,或者DateTimeProperty存储多个整数。A group post表示可能是10字节,而不是8字节。你知道吗
但是请记住,通过添加一个额外的属性来执行查询,您还是在添加另一个索引,因此字段大小的差异会被稀释为开销的一部分。此外,4万乘以几个字节,即使是0.24美元/克/月,也不算多。你知道吗
对于generation或datetime,您不必立即删除数据。您的其他查询可以根据最近刷新的日期/生成进行过滤,这意味着您不必立即删除数据。如果feed(或您对它的解析)很有趣,无法生成任何项,或者只生成少数项,那么将最后一次刷新作为备份可能会很有用。完全取决于应用程序是否值得拥有。你知道吗
我会添加一个生成计数器
相关问题 更多 >
编程相关推荐