1

我正在使用 Apache2 和 php 5.6.,12。我决定将我的数据库远程托管在 Heroku(使用 postgresql 9.4),并将我的服务器保留在 Digital Ocean。

在我的 yii 1 框架中,我添加的连接字符串如下:

'db'=>array(
                'connectionString' => 
               'pgsql:host=ec2-XX-XX-XX-XX.compute-1.amazonaws.com;port=6372;dbname=dddqXXXXX;sslmode=require',
                'emulatePrepare' => true,
                'username' => 'XXXX4dcXXXX', 
                'password' => 'XXXXXXXXXc34XXXXXXX123',
                 'charset' => 'utf8',
),

连接成功,但远程访问使我在数字海洋的服务器中的简单查询变得缓慢。我从 Heroku 读到,对于远程访问,必须启用 ssl 模式。所以我做到了,但我仍然无法弄清楚为什么数据库连接很慢。它可以慢到甚至 5 秒。我尝试使用本地安装的 postgresql 数据库服务器,一切都按预期运行。我不知道我该如何解决这个问题,否则我将不得不离开 Herokku 并以传统的方式来做这将是非常令人沮丧的。我希望有人能帮助我。

这是我的 php 信息 og pgsql:

在此处输入图像描述

是否需要进行一些设置来加快 apache2 或 php 中的远程 heroku 数据库访问?

4

2 回答 2

3

按照 Richard 的建议,我无法 ping Postgres Heroku 服务器(Heroku 已阻止 ping)。很明显,数字海洋服务器和 Heroku Postgres 服务器之间的连接速度很慢。因此,我直接给 Heroku 发了电子邮件,征求他们的意见。

Heroku的解决方案:

他们声称,从 Heroku 平台外部进行远距离连接的应用程序将具有初始连接延迟,而这种延迟是一个大问题。

因此,应用程序必须建立一个 TCP 连接,Postgres 协议会将其升级为 SSL 连接。这需要相当多的数据包并引入大量延迟,尤其是当应用程序为每个查询或页面加载创建新连接时。

Heroku 建议我将应用程序配置为使用 heroku-pgbouncer 连接池之类的东西。它使用 pgbouncer 和 stunnel 为应用程序端点提供可配置的连接池。

对我来说,这个建议听起来太昂贵且极具挑战性。

我的解决方案 ::使用数据库实验室

我发现了另一个 postgres 作为服务提供商,称为Database Labs。它们允许用户选择数据中心区域以获得更好的性能。Database Labs拥有简单的后端管理平台和友好的支持团队。后端具有最少的后端功能,我理解它们是在 2014 年开始的。

但是,在迁移到他们的服务后,我的网页性能显着提高。该连接就像任何标准连接一样,不需要 SSL。我正在输入我的解决方案,以帮助可能面临像我这样的类似问题的其他人。

如果我们在 Heroku 中托管我们的应用程序并使用他们的数据库服务,Heroku 绝对是一个很好的提供者。但是,如果您是 Digital Ocean 用户,我建议您使用Use Database Labs。这样可以节省很多时间

于 2015-09-08T16:16:34.160 回答
1

这里没有真正的问题,所以这个答案更多的是如何测试情况的​​指南。

  1. 如果您没有足够的知识来运行数据包跟踪,您可能希望确保您的服务器都在同一个网络上。但是,请尝试登录到您的 Digital Ocean 服务器,然后 ping Heroku 一个。重复 www.google.com 并比较时间。这是假设 Heroku 服务器响应 ping。

  2. 您应该能够连接“psql -h ...”。然后您可以运行“SELECT count(*) FROM”,然后运行“SELECT * FROM LIMIT 10000”,然后运行“LIMIT 20000”。这将使您弄清楚仅传输数据与运行查询花费了多少时间。

可能只是您的服务器之间的连接非常慢。未经测试不能说。

于 2015-09-04T09:57:22.227 回答