【问题标题】:Is it possible to store a PDO prepared statement in PHP / Mysql / APC / Memcache for reuse?是否可以在 PHP / Mysql / APC / Memcache 中存储 PDO 准备语句以供重用?
【发布时间】:2013-01-17 21:58:11
【问题描述】:

...如果是这样,会更快吗? 我的用例是托管 REST API 的典型 LAMP 堆栈。这个 API 的结构方式使我有 10 个(将增长到大约 50 个)不同的查询,这些查询将使用不同的输入运行,并且我希望频率非常快。我并没有特别询问查询的结果缓存,因为我对此有足够的了解,可以单独进行处理。我特别担心 95% 的应用程序逻辑将是客户端 JS,而大量微小的 REST 请求将主要执行小查询并将它们返回给浏览器进行处理,最终会做很多事情每个请求的冗余工作。如果我可以使用持久连接,并检查 APC 或 memcache 中的 PDO 准备语句,并重新使用它,我希望大大减少 apache 服务器到 mysql 服务器的开销。
我看到http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html 也可能出现在我的用例中,但它仍然会为每个请求发送准备语句。

【问题讨论】:

  • 解决办法是不使用PHP。使用在请求之间持续存在的东西。 PHP 只是不太适合这项任务。

标签: php mysql rest caching pdo


【解决方案1】:

没有。
这是一个有趣的问题,我花了一些时间调查它。
没有办法在调用之间传递准备好的语句。

而且,老实说,速度提升并不是那么好谈论的。

如果您关心性能,请转到查询,而不仅仅是驱动程序。
影响性能的是查询,而不是它们的调用方式。

错误..
在仔细阅读您的问题后,我没有改变主意,但有一些事情需要注意

大量微小的 REST 请求主要执行小型查询并将它们返回给浏览器进行处理,最终会为每个请求执行大量冗余工作。

没错。
因此,请考虑通过批量发送请求并一次性请求更多信息来减少该数量。不是因为准备好的语句的差异可以忽略不计,而是因为相当大的网络延迟

我希望大大减少 apache 服务器到 mysql 服务器的开销。

而这个不是。
看起来您错误地使用了准备好的语句并将它们与查询缓存混淆。
即使您设法让准备好的语句在请求之间持续存在,它也不会影响任何 apache 到 mysql 的交换 - 您需要 执行 每个后续调用准备好的语句,这意味着将请求发送到 mysql 服务器。因此,您唯一节省的就是查询解析,这在当今非常快。我的意思是不明显的快。

【讨论】:

  • 如果您阅读我提供的链接,它确实提到了使用查询缓存的准备好的语句:“在 MySQL 5.1.17 之前,准备好的语句不使用查询缓存。从 5.1.17 开始,准备好的语句使用在某些条件下查询缓存,这取决于准备方法:“这让我不清楚是否一个新的 PDO 准备具有相同的查询但不同的值会命中缓存,即使它仍然存在。你能解释/支持你没有办法的说法吗?您是否真的尝试将句柄粘贴在内存缓存中(我可能会这样做是为了学习)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 2016-09-10
相关资源
最近更新 更多