【问题标题】:Fetch a random entity from the datastore从数据存储中获取随机实体
【发布时间】:2010-09-12 08:10:08
【问题描述】:

很简单,在我的 AppEngine 应用程序中,我有超过 100 万个实体,随机选择一个实体的最佳方法是什么?

【问题讨论】:

标签: python google-app-engine random google-cloud-datastore


【解决方案1】:

也许是一种解决方案,但我不知道它是否是最好的:)

import random
from google.appengine.ext import db
from google.appengine.api import memcache

DATA_KEY = "models/keys/random"

def get_data():
    data = memcache.get (DATA_KEY)
    if data is None:
        offset = random.randint (1, 1000000)
        data  = self.MyModel.all (keys_only=True).fetch (100, offset)
        memcache.add (DATA_KEY, data, 60)

    entity_key = random.choice (data)
    return db.get (entity_key)

【讨论】:

  • 随着偏移量的增加,获取所需的时间也会增加。使用此代码的几乎每个请求都会出现 DeadlineExceeded 异常。
【解决方案2】:

【讨论】:

  • @sag 我不知道为什么在 2010 年我把它作为“答案”而不是投票关闭作为重复 - 我现在就这样做。
猜你喜欢
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2015-11-15
相关资源
最近更新 更多