【发布时间】:2019-08-07 19:21:05
【问题描述】:
我正在使用官方 google-cloud-php 库从我的 PHP App Engine 实例访问 Google Cloud Datastore。
我一直看到每个查询的延迟超过 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 服务器在
我可以做些什么来改善这种延迟?
【问题讨论】:
-
无法真正回答是否会出现延迟,但也许至少让您感觉更快的一种解决方案是将您的查询代码移动到 AJAX 调用。这样,您页面的其余部分可以加载得更快,然后您就可以等待数据了。也许这只是转移了问题,但我想如果你愿意,我会提供它。
-
嗯,这可能有很多原因......有没有一种方法可以让我们实时查看和检查您的项目?
-
该服务是一个移动应用后端,所以很遗憾我认为没有简单的方法可以做到这一点
-
我还尝试使用 'keyFilePath' 参数来加载服务帐户凭据而不是应用程序默认凭据,但我的查询仍然需要大约 0.6 秒的时间
标签: php google-app-engine google-cloud-platform google-cloud-datastore google-app-engine-php