我正在尝试使用webapp2在Google应用引擎上开发一个网络应用。
我需要做的一件事就是从ndb中检索一个随机数并显示它。这是允许我这样做的有效方法吗?
答案 0 :(得分:3)
当你说“从ndb随机”时,我假设你的意思是随机记录。
如果您使用的是自动ID,则可以使用以下方法。 (你的id有多稀疏会影响它的成功程度)。
在开始为0时使用random.randrange(start, stop)
,在给定新的id分配策略时停止为(2 ^ 52)-1。
仅执行密钥查询大于从随机ID创建的密钥的密钥。如果没有结果尝试获取密钥<密钥创建。
获取10个(或一些数字)的密钥
对从早期提取返回的键序列执行随机选择random.choice(seq)
。
key.get()选择的记录。
少数实体的替代方案说< 1000
只执行一个键查询和fecth所有键,然后在键列表上执行random.choice()
,在所选键上执行db.get()。这将比任何循环解决方案快得多。如果你这么做很多,并且可供选择的实体集不会频繁更改,并且密钥列表的大小不到1MB,你可以将密钥缓存在memcache中。
答案 1 :(得分:2)
有一个分散保留属性。我不太了解它,但它在map / reduce实现中提到过。
答案 2 :(得分:0)
如果数据存储区中的实体数量不是很大,那么您可以使用以下方法:
1,使用yourquery = entitykind.query()
获取所有实体
2,使用yourquery.count()
获取实体数量
3,使用随机数生成器在上述计数值
中创建一个随机数4,使用for循环遍历
返回的实体yourquery.fetch()
然后当循环执行的次数等于上面的随机数时,使用webapp中的特定实体