Google App Engine поддерживает операцию выборки на основе списка ключей google.appengine.ext.db.get ( keys ) .
Мне было бы интересно выяснить, есть ли какая-либо гарантия, что список результатов сохраняет порядок ключей (то есть keys = [k_1
, k_2
, k_3
], затем для результата [r_1
, r_2
, r_3
] всегда верно, что r_i
.key () == k_i
).
Насколько я знаю, API выполняет выбор IN путем внутренней выдачи N суб-выбора для каждого значения в IN. Я ожидаю, что это произойдет для db.keys
, и поэтому вызов сохранит порядок ключей.
В любом случае, я не уверен, и я не могу найти никаких ссылок на то, что db.keys
эквивалентно выбору IN, хотя и если нет никаких оптимизаций для его выполнения на месте. В противном случае обходной путь был бы довольно простым (я бы повторял и запрашивал себя для каждого ключа, и поэтому у меня будет гарантия, что я не буду зависеть от реализации db.keys
).
Я провел несколько базовых тестов, и результаты показывают, что:
db.get()
показывает лучшие результаты
db.get()
сохраняет порядок ключей
- альтернатива
Model.<code>get_by_id
(для которой порядок результатов всегда будет гарантирован) выполняется медленнее
Хотя результаты, похоже, подтверждают мои предположения, мне интересно, исследовали ли другие это и пришли ли к подобным или другим выводам.
ТИА,
./alex
Проводя дополнительные исследования, я обнаружил следующее (документация для db.get()
и Model.get()
:
Если ids является списком, метод возвращает список экземпляров модели со значением None, если для соответствующего ключа не существует сущности.
Даже если это не подчеркивает, я думаю, что ясно, что заказ гарантирован.