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