我正在使用官方google-cloud-php库从我的 PHP App Engine 实例访问 Google Cloud Datastore。
我一直看到每个查询的延迟时间超过 0.35 秒。即使对于数据存储中少于 100 个实体的简单查询也是如此。
我的 Web 应用程序需要对每个请求进行 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 秒内返回。
我能做些什么来改善这种延迟?