Самым большим узким местом является установление соединения с хранилищем данных (это может занять до 200 мс, в этом помогает кеш аутентификации). К сожалению, это плохая новость для php, потому что мы не можем установить постоянное соединение. Клиент Datastore должен переподключаться при каждом запросе.
Это становится еще сложнее при попытке оптимизировать, потому что он сильно зависит от ленивой загрузки. Лучше всего использовать повторно один и тот же экземпляр клиента хранилища данных для всех запросов.
Ограничение количества фильтров ускоряет запросы и вместо этого извлекает большие фрагменты данных, которые затем могут быть отфильтрованы локально. С использованием чего-то вроде redis
, которое также может использоваться в качестве кэша данных.
Пакетное обновление, полученное службой cron
, также может помочь в более быстром освобождении запроса. Уведомления могут быть помещены в веб-сокет или получены при последующих запросах.
Вы не упомянули об этом, поэтому не ясно, используете ли вы gRPC , DatastoreClient
будет использовать grpc
по умолчанию, если модуль установлен, в противном случае он возвращается к REST
, что значительно медленнее по сравнению.
Чтобы проверить, установлена ли у вас grpc
:
php -m|grep grpc
Единственный другой совет, который я могу придумать, это индексы, но это поможет только с большими наборами данных. Вам также следует попробовать провести тестирование в другом центре обработки данных, возможно, он перегружен.