首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >来自PHP AppEngine的谷歌数据存储非常慢。

来自PHP AppEngine的谷歌数据存储非常慢。
EN

Stack Overflow用户
提问于 2019-03-17 13:36:45
回答 2查看 495关注 0票数 1

我使用官方的google-cloud-php库从我的PHP App Engine实例访问Google Cloud Datastore。

我一直看到每个查询的延迟在0.35秒以上。即使对于数据存储中少于100个实体的简单查询也是如此。

我的web应用程序需要对每个请求进行大约4个连续的数据存储查询,这使得数据存储完全不可用(每次页面加载都有1.5到3秒的延迟)

我是不是遗漏了什么?

下面是我连接到数据存储的方式:

代码语言:javascript
复制
        // Same issue even without 'authCache' (a memcached wrapper).
        $authCache = new DatastoreAuthCache();
        $datastore = new DatastoreClient([
            'projectId' => AppIdentityService::getApplicationId(),
            'authCache' => $authCache
        ]);
        Datastore::$ds = $datastore;

下面是我的查询的两个示例:

代码语言:javascript
复制
    // 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;
    }

这种级别的延迟是意料之中的吗?我可以缓存一些结果,但不是全部,所以我希望这是我这方面的一个问题。

下面是我已经尝试过的改善延迟的方法:

本地数据存储仿真器也会在0.01秒内返回。

我能做些什么来改善这种延迟呢?

EN

回答 2

Stack Overflow用户

发布于 2019-03-20 08:58:43

我不确定这是一个合格的答案,但我会尝试帮助您使用堆栈驱动程序进行调试。

查看您在云控制台中的日志- https://console.cloud.google.com/logs/viewer

寻找速度慢的处理程序。

将鼠标悬停在延迟列上,然后单击。这将把您带到堆栈驱动程序监控中的分布式跟踪系统。这可能会确认数据存储速度很慢,但希望它能揭示导致速度缓慢的其他原因。

它看起来像这样:

票数 1
EN

Stack Overflow用户

发布于 2019-03-24 05:22:40

最大的瓶颈是与数据存储建立连接(这可能需要长达200ms的时间,这正是身份验证缓存的作用所在)。不幸的是,这对php来说是个坏消息,因为我们不能建立永久连接。每次请求时,数据存储区客户端都需要重新连接。

当试图优化时,它变得更加困难,因为它严重依赖于延迟加载。最有效的方法似乎是对所有请求重用相同的数据存储客户端实例。

限制过滤器的数量可以加快查询速度,取而代之的是检索更大的数据块,然后这些数据块可以在本地进行过滤。使用像redis这样的东西,它也可以兼作数据缓存。

批处理由cron服务拾取的更新也有助于更快地释放请求。可以将通知推送到一个` `websocket中,或者在后续请求中拾取通知。

你没有提到这一点,所以不清楚你是否在使用gRPC,如果安装了该模块,DatastoreClient将默认使用grpc,否则它将回落到REST,与之相比,REST的速度要慢得多。

检查是否安装了grpc

代码语言:javascript
复制
php -m|grep grpc

我能想到的唯一其他建议是索引,但这只会对大型数据集有帮助。你还应该尝试在另一个数据中心进行测试,可能是你所在的那个数据中心变得拥堵。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55204168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档