Google Cloud - хранилище данных слишком медленное по сравнению с локальным компьютером

Мы используем Google App Engine с Datastore и Objectify. На нашем локальном компьютере запрос занимает 1 секунду, а в облаке - около 20 секунд. Расположение сервера находится на западе Европы, а я нахожусь в Испании, поэтому не думаю, что это проблема.

Запрос, который мы выполняем, просто извлекает данные с помощью всего одного фильтра:

final CityEntity cityEntity = new CityEntity();
cityEntity.setId(1);
ofy().load().type(Person.class).filter("city =", cityEntity).list();

person Ulises CT    schedule 05.02.2020    source источник


Ответы (1)


В хранилище данных запросы масштабируются в соответствии с размером набора результатов. Сколько людей в городе? Если он большой, запрос будет не только медленным, но и вы быстро достигнете пределов ОЗУ.

В зависимости от того, что вы пытаетесь сделать, вам может потребоваться другой подход. Например, вы можете выполнить запрос только с ключами, преобразовать результат в задачи и поставить задачу в очередь для каждого человека. Это, вероятно, сработает до сотен тысяч, может быть, до миллионов, прежде чем вы достигнете 10-минутного срока выполнения задачи / cron. Для большего количества вам, вероятно, понадобится какая-то форма map / reduce.

person stickfigure    schedule 05.02.2020
comment
это фильтрация по одному полю в сущность, содержащую до 2000 записей. Тогда это нормально, что это займет 20 секунд? Я нахожу это немного чрезмерным - person Ulises CT; 06.02.2020
comment
Это кажется немного медленным. Обычно я ожидаю около 1000 / с от API appengeine старого стиля, хотя новый REST API немного медленнее. Это могло зависеть от множества разных вещей. Помните, что хранилище данных предназначено для работы в широком масштабе, поэтому вы можете выполнять сотни тысяч операций в секунду по всей системе, но любая отдельная операция не особенно быстра. - person stickfigure; 06.02.2020