Я получаю доступ к Google Cloud Datastore из своего экземпляра PHP App Engine с помощью официального google-cloud-php.
Я постоянно вижу задержку более 0,35 секунды на запрос. Даже для простых запросов с менее чем 100 объектами в хранилище данных.
Мое веб-приложение должно выполнять около 4 последовательных запросов к хранилищу данных на запрос, что делает хранилище данных полностью непригодным для использования (постоянная задержка от 1,5 до 3 секунд на загрузку страницы)
Я что-то упускаю?
Вот как я подключаюсь к хранилищу данных:
// Same issue even without 'authCache' (a memcached wrapper).
$authCache = new DatastoreAuthCache();
$datastore = new DatastoreClient([
'projectId' => AppIdentityService::getApplicationId(),
'authCache' => $authCache
]);
Datastore::$ds = $datastore;
Вот два примера моих запросов:
// Lookup by keys.
$ds = Datastore::get();
$queryResults = $ds->lookupBatch($keys);
$rows = keyValue($queryResults, "found");
// Query by fields.
$query = $ds->query()
->kind(self::EntityName)
->filter('owner', '=', $a)
->filter('target', '=', $b)
->limit(1)
->keysOnly();
$results = $ds->runQuery($query);
foreach ($results as $entity) {
return $entity;
}
Ожидается ли такой уровень задержки? Я могу кэшировать некоторые результаты, но не все, поэтому я надеюсь, что это проблема с моей стороны.
Вот что я уже пытался уменьшить задержку:
Добавлен обработчик authCache для кеширования токенов API хранилища данных (без влияния)
Подтвержденное хранилище данных и экземпляр движка приложения находятся в одном регионе.
Подтверждено, что index.yaml настроен правильно
Подтверждено, что задержка связана с вызовами хранилища данных, а не с бизнес-логикой
Другие серверные части базы данных работают нормально (сервер Cloud SQL возвращается через ‹0,1 секунды). Эмулятор локального хранилища данных также возвращается через ‹0,01 секунды.
Что я могу сделать, чтобы уменьшить задержку?