Php Globals v。数据库调用大量数据

时间:2014-05-23 20:42:06

标签: php database performance global-variables database-performance

对于大型数组,最好是将数据保存到全局变量或每次需要时查询数据库吗?在我的情况下,保持它们的局部范围并将它们传递给函数不是一个选项。

我使用wordpress,在大多数页面中,我会将每个用户和所有元数据附加到他们身上。通常我会在同一页面的多个位置使用这些变量。不幸的是,wordpress不允许我在模板之间传递变量,所以我每次都使用全局变量或调用数据库。最终,这将是数百个用户,每个用户都附加了大量元数据。我应该每次调用数据库以保持变量本地,还是应该将它们保存到全局变量以节省数据库查询?有什么考虑?我应该担心性能,开销和/或其他问题吗?

非常感谢!

2 个答案:

答案 0 :(得分:2)

您问题的唯一真正解决方案是使用某种缓存系统(MemcacheRedis是您的最佳选择)。幸运的是,有很多Wordpress插件使集成变得简单。例如:

修改

如果你只想缓存一些数据库调用,你可以忘记Wordpress插件并开始编码。假设您只想缓存从数据库中检索用户列表的调用,并且假设您正在使用Memcache来完成此任务(Memcache存储键值对并允许超级快速访问一个给定键的值)。

  1. 查询Memcache,询问密钥" 用户"。
  2. Memcache仍然没有这样的密钥,因此您将有一个缓存失败,在它之后,您将查询您的数据库以检索用户列表。现在序列化数据库响应(serializejson_encode是两种不同的方法)并存储密钥" 用户"沿着memcache中的序列化值。
  3. 下次你查询你的memcache要求"用户"时,你会受到打击。在这一刻,您只需要反序列化该值并使用您的用户列表。
  4. 这就是全部。现在您只需要决定要缓存的内容并将此过程应用于这些元素。

答案 1 :(得分:-1)

您不必执行调用,但每页一次,您可能必须为每个页面执行一次调用。因此,我建议您创建某种类来与您的数据库进行交互,您可以调用它来获取所需的数据。我还建议在数据库上使用存储过程和函数而不是直接查询,因为这将有助于安全性和应用程序逻辑和数据功能的分离。