我有以下课程来保存我的记录:
class List(ndb.Model):
'''
Index
Key: sender
'''
sender = ndb.StringProperty()
...
counter = ndb.IntegerProperty(default=0)
ignore = ndb.BooleanProperty(default=False)
added = ndb.DateTimeProperty(auto_now_add=True, indexed=False)
updated = ndb.DateTimeProperty(auto_now=True, indexed=False)
以下代码用于返回我需要的所有实体:
entries = List.query()
entries = entries.filter(List.counter > 5)
entries = entries.filter(List.ignore == False)
entries = entries.fetch()
如何修改代码以从entries
获取10个随机记录?我计划每天有一个cron任务来提取随机记录,所以它们应该是随机的。获取这些记录的最佳方法是什么(最小化读取操作次数)?
我不认为以下代码是最好的:
entries = random.sample(entries, 10)
答案 0 :(得分:3)
在阅读完评论之后,我能看到的唯一改进就是只获取密钥并尽可能限制。
没有经过测试,但同样如此
list_query = List.query()
list_query = list_query.filter(List.counter > 5)
list_query = list_query.filter(List.ignore == False)
list_keys = list_query.fetch(keys_only=True) # maybe put a limit here.
list_keys = random.sample(list_keys, 10)
lists = [list_key.get() for list_key in list_keys]