查询ndb中的随机行

时间:2013-06-25 05:25:54

标签: google-app-engine app-engine-ndb

我正在尝试使用webapp2在Google应用引擎上开发一个网络应用。

我需要做的一件事就是从ndb中检索一个随机数并显示它。这是允许我这样做的有效方法吗?

3 个答案:

答案 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中的特定实体