Я предполагаю, что вы имеете в виду случайную запись, когда говорите «случайно из ndb».
Если вы используете автоматические идентификаторы, вы можете использовать следующий подход. (насколько редкие ваши идентификаторы повлияют на то, насколько успешным это будет).
используйте random.randrange(start, stop)
со значением start равным 0, а не значением (2 ^ 52) -1, учитывая новую политику распределения идентификаторов.
сделать запрос ключей только для ключей больше, чем ключ, созданный из случайного идентификатора. если результатов нет, попробуйте получить ключи ‹ключ создан.
получить 10 (или некоторое количество) ключей
сделать случайный выбор random.choice(seq)
для последовательности ключей, возвращенных из более ранней выборки.
key.get () выбранная запись.
Альтернатива для небольшого количества организаций, скажем, ‹1000
выполните запрос только ключей и вызовите все ключи, затем выполните random.choice()
в списке ключей и db.get () для выбранного ключа. Это будет намного быстрее, чем любое решение для создания петель. Если вы делаете это часто и набор объектов для выбора не меняется часто, а размер списка ключей меньше 1 МБ, вы можете кэшировать ключи в memcache.
person
Tim Hoffman
schedule
25.06.2013