【问题标题】:Persistent mysql connection, regardless of users connected?持久的mysql连接,不管用户连接?
【发布时间】:2015-05-06 09:16:21
【问题描述】:

我希望每个用户都使用一个单一的 mysql 连接,该连接始终选择数据并在满足特定条件时更新它(如出价)。最好即使没有用户访问该网站,如果可能的话?

所以,在过去的几天里,我一直在谷歌搜索,努力想办法解决我的问题,但似乎没有足够知识的人来帮助我解决我的问题。因此,我尝试尽可能简单地提出我的问题,而不会让您对我的代码感到困惑。 (但如果您有兴趣查看代码:http://pastebin.com/dRFzWtEH

但是,这完全是关于一个带有实时倒计时计时器的拍卖网站,我只想运行一个 node.js 服务器,每秒 SELECTs 数据并将其发送到 WebSocket 以显示所有访问该网站的用户实时倒计时和价格更新(出价)。

我通过使用 single-mysql-queries 完成了整个任务,但后来我遇到了errors。然后 GitHub node-mysql-module 的作者建议我使用 MySQL Pool。但是对于我在这个问题的第一句话中陈述的具体目标,根本找不到任何内容。

现在我想问一下,我怎么能做到这一点,这甚至可能吗?或者至少一个用户必须在我的网站上?

代码/代码结构/逻辑过程是什么样的?

而且我想我根本不需要关闭连接,所以我不需要像 connection.end() 这样的函数?

【问题讨论】:

  • 只是关于您的问题结构的注释...您问题的第一段应该描述您的问题,以便我们可以从首页看到您的问题,而无需单击以进一步查看。
  • 您在谷歌上搜索了好几天的文档可以在这里找到,您下载了 mysql 包:npmjs.com/package/mysql#pooling-connections 您只需创建池,然后使用它。就这么简单。
  • 谢谢,已编辑。 @KevinB
  • 我知道,这就是我发现的,但它并没有帮助我解决我的具体问题/实现我所说的目标。
  • 我现在看到了你打开的问题,我很好奇……你为什么对只有一个连接如此死心塌地?我不明白为什么你不同意拥有 10 个连接。只有 1 个连接会严重限制应用程序的速度。

标签: mysql node.js optimization websocket socket.io


【解决方案1】:

不,不用担心连接池。在 MySQL 中这没什么大不了的。

此外,“池”还有一个问题——在允许下一个“客户端”使用池连接之前,它必须清除所有设置、@variables、事务状态等。这可能需要一些时间,尤其是当客户端远离服务器时。

与竞品不同,MySQL 的连接/断开时间非常短。

如果您正在开发 Web 产品,请记住 HTTP 是“无状态的”。也就是说,您不能挂在从一个“页面”到下一个“页面”的连接上。因此,无法保存任何“状态”。

编辑

如果您遇到“跨越池塘”延迟问题(美国和欧洲之间为 100-200 毫秒),客户端连接池可能非常有用。但是,如果池软件正在注入命令来重置事物,那可能会完全破坏池。

如果您可以打开“通用日志”(在托管服务中,您可能必须使用log_output=TABLE),请执行此操作以查看注入了哪些额外命令。

另外,考虑将多个客户端 SQL 语句组合到存储过程中以减少来回操作。

还可以考虑将 MySQL 服务器移近客户端,或者将客户端移近 MySQL 服务器,具体取决于最终用户到客户端的来回流量与客户端到 MySQL 流量的比较。

【讨论】:

  • 感谢您的回答。你能给我举一个你最后一句话的例子吗?所以我可以更好地理解这一点?这也是我当前的代码(终于可以工作了):stackoverflow.com/questions/30064272/… 你建议将什么 connectionLimit 用于池,为什么?并且此代码是否像您已经说过的那样清除了所有设置,还是我必须在某处添加一些代码?感谢您的时间!
  • 你也说过“特别是如果客户端远离服务器”。所以目前我正在使用托管在美国某处的 OpenShift,但我住在德国柏林。你认为我的网站一获得大约。 100个在线用户什么的(不知道什么值会有问题),我应该考虑租一个自己的nodejs服务器托管在我的国家?
  • Re: 最后一句:这是一个网络应用程序吗?是否使用 AJAX?用户是否单击了某个按钮,然后您会打开一个新页面?
  • 是的,它是一个网络应用程序。为什么我这样做是一个很长的故事,但我使用的是托管在这里的 PHP/MySQL 和托管在美国的 nodejs-server (OpenShift)。我也在使用 AJAX,但我认为一般不会使用太多。我试图让这个网站尽可能地对用户友好,所以有一些链接指向没有 AJAX 的新页面,但总的来说,页面并不多(如果这很重要的话)。等一下,我对您编辑的答案再输入一条评论。
  • 正如您在编辑的最后一句中所说,客户端必须靠近 MySQL 服务器,我认为现在这样很好,因为正如我所说的 PHP/MySQL 主机在德国.所以 nodejs 只是被用作一个 WebSocket 来实现这个 web 应用程序作为一个实时 web 应用程序。 log_output=TABLE 是什么意思?你指的是nodejs还是MySQL?我从来没有使用过这个功能,所以我不能说清楚。好吧,我对池化 MySQL 连接有点陌生,甚至不知道这在 PHP 中是如何工作的。所以首先我要弄清楚如何按照你所说的方式组合它们。但我尝试使用
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2013-06-05
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多