我正在写一个备份服务的数据库to backup Yahoo! Groups。它逐步检索具有连续数字ID的消息。存储在'message_id'
字段中。因此,如果服务上的最后一条消息是消息号10000,那么一旦备份完成,数据库应该包含10000个文档,每个文档的排序的'message_id'
等于range(1, 10000+1)
。在字段范围内有效查询丢失的整数?
我想写一个查询产生缺少的消息id。因此,如果我在数据库中有9995个文档,并且缺少消息10,15,49,99和1043,则应该返回[10, 15, 49, 99, 1043]
。
我已经做了以下,从数据库中获取只是id和我的应用程序代码运行的交集:
def missing_message_ids(self):
"""Return the set of the ids of all missing messages.."""
latest = self.get_latest_message()
ids = set(range(1, latest['_id']+1))
present_ids = set(doc['_id'] for doc in self.db.messages.find({}, {'_id': 1}))
return ids - present_ids
这是好的,我的目的,但它似乎像它可能太对于大量的消息来说很慢。这更多的是出于好奇而不是真正的性能要求:是否有更有效的方式来完成这个工作,或许完全是在数据库引擎上?